部署 LVS-DR + keepalived 高可用群集

一、LVS-DR模式

关于群集的负载调度技术,可以基于IP端口,内容等进行分发,其中IP负载均衡技术是效率最高的。

在基于IP的负载均衡模式中,常见的有地址转换,IP隧道、直接路由 这三种工作模式:

  • 直接路由;简称DR模式

    • 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
    • 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。
      在这里插入图片描述

二、LVS-DR数据包的流向分析

  • 为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4。
    在这里插入图片描述
  • 1.Client向目标VIP发出请求,Director (负载均衡器)接收。此时IP包头及数据帧头信息为:
    在这里插入图片描述
  • 2.Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为
    RealServer_1的MAC地址,然后在局域网上发送。IP包头及数据帧头信息如下:
    在这里插入图片描述
  • 3.RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP) ,于是处理这个报文。随后重新封装报文,发送到局域网。此时IP包头及数据帧头信息为:
    在这里插入图片描述
  • 4.Client将收到回复报文。Client认为得到正常的服务,而不会知道是哪一台服务器处理的。
  • 注意:如果跨网段,那么报文通过路由器经由Internet返回给用户

三、LVS-DR中的ARP问题

  • 对节点 web服务器进行处理,使其不响应针对VIP的ARP请求
    • 使用虚接口lo:0承载VIP地址
    • 设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求。
  • 新来的请求报文,路由器根据ARP表项,会将该报文转发给RealServer,从而导致Director的VIP失效
    • 解决方法:对节点服务器进行处理,设置内核参数arp_ announce=2: 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。
  • 修改/etc/sysctl.conf文件
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.allarp_announce = 2

四、keepalived 软件工具

  • LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。

  • keepalived 软件是专为LVS和HA设计的一款健康检查工具

    • 可以进行节点健康状态检查。
    • 实现 LVS 的高可用性,解决 LVS 单点故障的问题。
    • 支持故障自动切换。
      在这里插入图片描述
  • 在LVS基础之上实现心跳检测、监控服务器实现故障转移,如果服务器发生宕机的时候,可以尝试自动重试脚本。如果多次重试还是失败状态,会发送邮件给运维人员。实现高可用。

五、LVS-DR的搭建

5.1、环境搭建

  • 两台做LVS+keepalived架构
  • 两台虚拟机做web服务器
服务器IP地址虚拟地址
LVS1192.168.100.110ens33:0-192.168.100.10
LVS2192.168.100.111ens33:0-192.168.100.10
Web1192.168.100.201lo:0-192.168.100.10
web2192.168.100.202lo:0-192.168.100.10

5.2、两台LVS的配置

  • 注意:这两个LVS服务器的配置基本相同,在这里就只演示一遍。区别之处已经标出。

1、先安装ipvsadm和keepalived工具

yum -y install keepalived ipvsadm

2、修改内核参数文件 /etc/sysctl.conf

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
sysctl -p #启动生效

在这里插入图片描述
在这里插入图片描述
3、设置虚拟地址

vim ifcfg-ens33:0
#内容全部删除,添加以下内容:
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0

在这里插入图片描述
在这里插入图片描述
4、编写一个名为dr.sh的LVS规则脚本

cd /etc/init.d/
vim dr.sh
//脚本内容:
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.201
RIP2=192.168.100.202
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 I stop I status }"
  exit 1
esac
exit 0

//添加权限,注意:先不要执行脚本!!!
chmod +x dr.sh

5、把模式改为主机模式,修改IP地址,重启网络

cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33

//修改为static模式,并添加以下内容:
IPADDR=192.168.100.110     //另一台 LVS2 的IP地址为192.168.100.111
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

service network restart    

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、把服务都开启,防火墙关闭

ifup ens33:0                    //开启虚拟VIP
service dr.sh start             //开启LVS服务
systemctl stop firewalld
setenforce 0

在这里插入图片描述

5.3、Web服务器的搭建

1、安装httpd包,关闭防火墙

yum -y install httpd

systemctl stop firewalld
setenforce 0

2、添加网页内容,用于验证

cd /var/www/html/
echo "this is test01 web" > index.html 
  
//另一台web服务器输入内容:test02区分一下。
cd /var/www/html/
echo "this is test02 web" > index.html 

3、设置回环地址

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

#内容全部删除,添加以下内容:
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes

在这里插入图片描述
在这里插入图片描述
4、编写web服务脚本

cd /etc/init.d/
vim web.sh

#!/bin/bash
VIP=192.168.100.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 web.sh

5、把模式改为主机模式,修改IP地址,重启网络

cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33

//修改为static模式,并添加以下内容:
IPADDR=192.168.100.201    //另一台 web2 的IP地址为192.168.100.202
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

service network restart    

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、把服务都开启

ifup lo:0                    //开启回环地址
service dr.sh start             //开启 web 服务

7、在 web 服务器的浏览器输入127.0.0.1验证。
在这里插入图片描述
在这里插入图片描述

5.4、keepalived配置

1、修改 LVS1 服务器的配置文件

cd /etc/keepalived/
vim keepalived.conf
#配置文件内容
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }   
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1        //第一处修改:改为127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01             //第二处修改:LVS2服务器修改为02
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER     //第三处:备用服务器LVS2改为BACKUP
    interface ens33   //第四处:改为ens33
    virtual_router_id 10    //第五处:虚拟组,两个LVS服务器必须一样
    priority 100          //第六处:备用LVS2优先级小于100,设为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }   
    virtual_ipaddress {
        192.168.100.10         //第七处:只要虚拟IP地址
 }
}

virtual_server 192.168.100.10 80 {    //第八处:虚拟IP地址和端口
    delay_loop 6
    lb_algo rr
    lb_kind DR    //第九处:我们使用的是LVS的DR模式
    persistence_timeout 50
    protocol TCP

    real_server 192.168.100.201 80 {    //10、web1服务器节点
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.100.202 80 {   //11、web2的服务器节点
        weight 1
        TCP_CHECK {
            connect_port 80
connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

2、启动服务,把配置文件传给LVS2服务器

systemctl start keepalived

scp /etc/keepalived/keepalived.conf root@192.168.100.111:/etc/keepalived/

3、LVS2服务器的修改

cd /etc/keepalived/
vim keepalived.conf
//修改下图中的几处。
启动服务:
systemctl start keepalived

在这里插入图片描述

5.5、验证

修改win10的IP地址,并改为主机模式。
在这里插入图片描述
在浏览器输入192.168.100.10,访问Apache网站。
在这里插入图片描述
keepalived工具可以自动故障切换,把LVS1服务器服务关闭,模拟故障,如果客户端依旧可以和虚拟 IP地址 互通,且能够正常访问网站的话,就说明 LVS2 就代替 LVS1 工作了,防止单点故障的效果实现了。

ifdown ens33:0

在客户端 ping 一下虚拟ip
在这里插入图片描述
再用浏览器访问192.168.100.10,这时请求会被LVS2 调度到web处理。
在这里插入图片描述

5.4、总结

  • 我们的LVS-DR负载均衡和keepalived双机热备已经搭建成功。
  • 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值