LVS负载均衡群集其中之一:LVS-DR加上keepalive可实现稳定以及可靠的负载均衡;

实验结构

实验思路:

  • 调度服务器区域实现接收访问,调用节点服务器池可用服务器。实现keepalive,实现双机热备功能,由于调度服务器由于负载量过大出现拓机情况时,备份调度服务器可直接顶替工作,保证了服务访问不被中断。
  • 节点服务器提供网络服务,利用内部网络存储服务器提供的存储空间,将需要提供的网络服务搭建其中。

##实验环境:

服务器 系统环境 IP地址 所需服务
主调度 centos7 192.168.200.201 keepalived+ipvsadm
从调度 centos7 192.168.200.202 keepalived+ipvsadm
节点web1 centos7 外:192.168.200.221 内192.168.100.101 httpd+NFS
节点web2 centos7 外:192.168.200.222 内192.168.100.102 httpd+NFS
NFS存储 centos7 192.168.100.111 NFS

实验部署

1、LVS调度服务器

主从调度服务器在LVS调度服务配置基本相同,主要区别在于实现keepalive时配置有所区别,对于区别处,文中有注明。

主调度服务器

调整proc响应参数

#yum install keepalived ipvsadm -y  //安装所需软件

#vim /etc/sysctl.conf          


net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
//proc响应关闭重定向功能


#sysctl -p  //对上述修改立即生效

配置虚拟IP

#cd /etc/sysconfig/network-scripts/   
#cp ifcfg-ens33 ifcfg-ens33:0   //设置虚拟网卡
#vim ifcfg-ens33:0
                   //删除全部原有内容,写入以下内容
    DEVICE=ens33:0
    ONBOOT=yes
    IPADDR=192.168.200.10
    NETMASK=255.255.255.0

#ifup ens33:0  //启动虚拟网卡

配置调度服务脚本

#cd /etc/init.d/
#vim dr.sh

#!/bin/bash
GW=192.168.200.1
VIP=192.168.200.10
RIP1=192.168.200.221
RIP2=192.168.200.222
case "$1" in
start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
        systemctl start ipvsadm
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens33:0
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting --------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C
        systemctl stop ipvsadm
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped----------------------[ok]"
         ;;
        status)
        if [ ! -e /var/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped---------------"
        exit 1
                else
                echo "ipvsamd Runing ---------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0

#chomd +x dr.sh  //增加执行权限
#service dr.sh start  //启动调度服务
#systemctl stop firewalld.service   //关闭防火墙
#setenforce 0

从调度服务器

从调度服务器配置与主调度服务器配置完全相同,只是若遇到启动ifup ens33:0 报错失败的情况,只需将网卡重新启动,然后再次ifup即可。

2、主从调度服务器keepalive配置

主调度服务器

#cd /etc/keepalived/
#vim keepalived.conf  //编辑keepalive主配置文件

global_defs {
  ...
  smtp_server 127.0.0.1           //指向本地
  router_id LVS_01   //指定名称,备份服务器不同名称
  ...             
}

vrrp_instance VI_1 {
  state MASTER             //备份服务器是BACKUP
  interface ens33          //接口按照系统修改
  virtual_router_id 10     //组号相同
  ...
  auth_pass abc123         //验证密码
  priority 100              //优先级备份小于主
  ...
  virtual_ipaddress {
        192.168.100.10     //虚拟IP地址
    }
  ...
virtual_server 192.168.200.10 80 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR   //采用DR直连路由模式
    persistence_timeout 50
    protocol TCP

...
  real_server 192.168.200.221 80 {    //真实节点服务器IP地址
        weight 1
        TCP_CHECK {      //TCP健康检查方式           
            connect_port 80      //删除URL地址部分,添加端口
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }   
    real_server 192.168.200.222 80 {
        weight 1
        TCP_CHECK {
            connect_port 80              //添加端口
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }    
}
...

#systemctl start keepalived    //启动keepalive服务
#ip addr show dev ens33:0      //查看虚拟网卡

从调度服务器

从调度服务器的keepalive配置方式同主调度服务器,需要区分的地方已经注明。

3、节点服务器

  • 对于节点服务器需要利用NFS存储服务器提供的空间来提供服务,在实际工作环境中,实际是将存储服务器中提供的LVM动态逻辑卷或者raid磁盘挂载使用,对于挂载过程不在重复,可参见LVS-NAT负载均衡群集详细过程。
  • 节点服务器需要将网络服务提供出去,为了使得所有节点服务器仅能被调度服务器所调度,需要和调度服务器区建立相同虚拟IP.

节点服务器web1

  • 提供httpd服务
#systemctl stop  firewalld.service 
#setenforce 0
#yum install httpd -y   //安装httpd服务
#echo "this is first web" > /var/www/html/index.html    //创建首页,为了区别,web2首页需不同
  • 建立虚拟IP

用于仅接受调度服务器所需请求。

#cd /etc/sysconfig/network-scripts
#cp ifcfg-lo ifcfg-lo:0
#vim ifcfg-lo:0

DEVICE=lo:0     //删除原有内容,写入以下内容
IPADDR=192.168.200.10      //虚拟IP
NETMASK=255.255.255.255
ONBOOT=yes
  • 调整proc响应参数
#cd /etc/init.d/
#vim web.sh      //编写服务脚本,方便管理

#!/bin/bash
VIP=192.168.200.10
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /sbin/route add -host $VIP dev lo:0
                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                sysctl -p >/dev/null 2>&1
                echo "RealServer Start OK "
                ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                echo "RealServer Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0
        
        
#chmod +x /etc/init.d/web.sh
#ifup lo:0   //启动虚拟网卡
#service web.sh start  //启动服务

节点服务器web2

配置方式同web1,唯一区别是为了实验方便得出结论,采用不同首页。

4、测试

  • 模拟客户端访问,当多次请求时,客户端得到的是不同节点服务器给予的响应回馈。
  • 模拟当主调度服务器损坏无法工作是,从服务器直接顶替工作,使得服务能够继续访问。

当客户端多次请求

当主调度服务器无法工作时

这里为了简化操作,直接将主调度服务器关机,达到模拟主调度服务器无法工作情况。然后继续使用客户端访问。