部署 LVS-DR + keepalived

部署 LVS-DR + keepalived

一、为什么要用Keepalived?

因为企业应用中,单台LVS服务器(单挂)承担应用存在单点故障的危险;单点故障一旦发生,企业服务将发生中断,造成极大的危害。

二、Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具
支持故障自动切换
支持节点健康状态检查

三、Keepalived实现原理剖析

  • Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

  • VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
    由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
    每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
    若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

  • Keepalived案例讲解
    Keepalived可实现多机热备,每个热备组可有多台服务器
    双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器

四、实例:负载均衡+高可用群集

  • Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用做双击热备

  • 使用Keepalived构建LVS群集更加简便易用

  • 主要优势
    对LVS负载调度器实现热备切换,提高可用性
    对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入

服务器IP地址虚拟地址软件包
LVS1192.168.127.10ens33:0-192.168.127.100ipvsadm软件包、keepalived软件包
LVS2192.168.127.20ens33:0-192.168.127.100ipvsadm软件包、keepalived软件包
Web1192.168.127.30lo:0-192.168.127.100httpd软件包
web2192.168.127.40lo:0-192.168.127.100httpd软件包

4.1、LVS-DR调度服务部署

1.安装ipvsadm和keepalived软件包

[root@localhost ~]# yum -y install ipvsadm keepalived

 
 
  • 1

2.修改/etc/sysctl.conf配置文件,添加如下参数

[root@localhost ~]# vim /etc/sysctl.conf
#添加以下内容
net.ipv4.ip_forward=1    #开启路由功能
#proc响应关闭重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

[root@localhost ~]# sysctl -p #让sysctl.conf立刻生效

3.设置ens33:0接口地址为虚拟IP地址

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vim ifcfg-ens33:0
#内容全部删除,添加以下内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.127.100
NETMASK=255.255.255.255

 
 

4.通过启动脚本实现DR工作模式

cd /etc/init.d/
vim dr.sh
#脚本内容:
#!/bin/bash
GW=192.168.127.1
VIP=192.168.127.100
RIP1=192.168.127.10
RIP2=192.168.127.20
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地址,重启网络

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost ~]# vim ifcfg-ens33
#修改为static模式,并添加以下内容:
IPADDR=192.168.127.10     #另一台 LVS2 的IP地址为192.168.127.20
NETMASK=255.255.255.0
GATEWAY=192.168.127.1
[root@localhost ~]# systemctl restart network

 
 

6、把服务都开启,防火墙关闭

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

 
 

4.2、web节点服务器部署

1.安装、启动apache服务

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

 
 

2.给两台web节点服务器添加不同内容的首页文件

[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "this is test01" > index.html    #192.168.127.30节点首页
[root@localhost html]# echo "this is test02" > index.html    #192.168.127.40节点首页

 
 

3.给web节点服务器的环回地址添加子接口,配置虚拟IP

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
#内容全部删除,添加以下内容:
DEVICE=lo:0
IPADDR=192.168.127.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0

 
 

4、编写web服务脚本

[root@localhost ~]# vim /etc/init.d/web.sh
 #!/bin/bash
VIP=192.168.127.100
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
[root@localhost ~]# chmod +x /etc/init.d/web.sh

 
 

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

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
#修改为static模式,并添加以下内容:
IPADDR=192.168.127.30    #另一台 web2 的IP地址为192.168.127.40
NETMASK=255.255.255.0
GATEWAY=192.168.127.1
[root@localhost ~]# systemctl restart network 

 
 

6、把服务都开启

[root@localhost ~]# ifup lo:0                    #开启回环地址
[root@localhost ~]# service dr.sh start             #开启 web 服务

 
 

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

在这里插入图片描述

4.3、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 {           #指定vrrp热备参数
    state MASTER               #第三处:服务器角色是master,备份服务器设置为BACKUP
    interface ens33            #第四处:修改物理网卡名称改为ens33,默认是centos6的eth0
    virtual_router_id 10       #第五处:虚拟组,两个LVS服务器必须一样
    priority 100               #第六处:备用LVS2优先级小于100,设为90  优先级,主服务器设置要大于备服务器
    advert_int 1
    authentication {
        auth_type PASS         #验证类型和密码,不建议修改
        auth_pass 1111
    }   
    virtual_ipaddress {
        192.168.127.100        #第七处:只要虚拟IP地址(漂移地址(VIP)地址,可以有多个)
 }
}
virtual_server 192.168.127.100 80 {    #第八处:虚拟IP地址和端口
    delay_loop 6
    lb_algo rr                  #调度算法为轮询
    lb_kind DR                  #第九处:我们使用的是LVS的DR模式(直连路由)
    persistence_timeout 50
    protocol TCP
    real_server 192.168.127.30 80 {    #10、web1服务器节点
        weight 1
        TCP_CHECK {                    #健康检查参数 
            connect_port 80            #检查80端口连接是否正常
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.127.40 80 {   #11、web2的服务器节点
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 
 

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

[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# scp /etc/keepalived/keepalived.conf root@192.168.127.40:/etc/keepalived/

 
 

3、LVS2服务器的修改

[root@localhost ~]# vim /etc/keepalived/keepalived.conf
按上述修改后,启动服务:
systemctl start keepalived

 
 
  • 1
  • 2
  • 3

4.4、验证结果

最后,在win10客户端浏览器访问VIP地址192.168.127.100进行验证,成功访问并且刷新能够看到不同的网页内容代表实验成功
在这里插入图片描述

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

[root@localhost ~]# ifdown ens33:0

 
 

再用浏览器访问192.168.127.100,这时请求会被LVS2 调度到web处理。
在这里插入图片描述

五、实验注意事项

由于本实验LVS采用的是DR模式,存在ARP广播问题

  • 客户端寻找节点服务器的ARP问题:
    在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址,但是在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
    当一个ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上的,它们都会接收到ARP广播
    此时只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

  • 解决办法:
    真实服务器的VIP地址应该配置成对外隐藏,对内可见,那么什么样的配置方式才能达到上述的效果呢,答案就是在我们的回环接口上配置这个VIP,使其不响应针对VIP的ARP请求
    使用虚接口lo:0承载ⅥP地址
    设置内核参数 arp_ignore=1:系统只响应目的IP为本地IP的ARP请求

  • 关于真实web服务器上的VIP配置在环回接口上,且掩码必须配置成4个255。

  • 节点服务器回复客户端时的ARP问题:
    RealServer返回报文(源IP是VIP)经路由器转发,在重新封装报文时需要先获取路由器的MAC地址,发送ARP请求时, Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口(例如ens33)的IP地址
    这时路由器收到ARP请求后,将更新ARP表项,将原有的VIP对应 Director的MAC地址会被更新为ⅥP对应RealServer的MAC地址
    问题来了,此时新来的请求报文,路由器根据ARP表项,会将该报文转发给RealServer,从而导致 Director的VIP失效

  • 解决办法:
    对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值