LVS-DR主备模型

caroly 2020年03月18日 203次浏览

LVS-DR主备模型

因LVS会发生单点故障导致挂掉,所以采用高可用方案『主备模型』,由『主』广播自己存活的状态,『备机』被动接收判定,如果连续多次没有收到包,『备机』根据优先级选择一个最高的当作『主』。

负载均衡服务器LVS配置

此操作在地址为『240.131』、『240.134』的虚拟机上进行

一、配置虚拟机RIP

准备4台虚拟机,并配置4台虚拟机的网络:eth0配置在一个网段,DIP(转发的网络地址)、RIP(后端真实主机IP地址)在一个网段。

RS(真实服务器)配置

此操作在地址为『240.132』、『240.133』的虚拟机上进行

一、调整响应级别
  • arp_ignore:定义接收到ARP请求时候的响应级别。
    • 0:只要本地配置的有相应地址,就给予响应。
    • 1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应。
  • arp_announce:定义将自己地址向外通告时的通告级别。
    • 0:将本地任何接口上的任何地址向外通告。
    • 1:试图仅向目标网络通告与其网络匹配的地址。
    • 2:仅向与本地接口上地址匹配的网络进行通告。

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

这几个文件是内核的映射文件,覆盖后立即生效。也就是说此配置为临时配置,重启后恢复为『0』。

二、配置隐藏VIP

隐藏的VIP需要配置在环回接口的子接口

ifconfig lo:2 192.168.240.150 netmask 255.255.255.255

网络配置

此处配置为四个『255』,避免两个网卡的网络号相同。数据包到达两个网卡,如果网络号相同,会优先选择离内核近的环回接口进行转发,环回接口没有物理网线连接,数据包将发不出去。

三、启动httpd

service httpd start


配置keepalived

此操作在地址为『240.131』、『240.134』的虚拟机上进行

一、安装keepalived

yum install keepalived -y

安装ipvsadm

yum install ipvsadm -y

此时,两台LVS的网络设备是没有配置的。

网络配置

二、修改配置文件『keepalived.conf』

此操作在地址为『240.131』的虚拟机上进行

cd /etc/keepalived

cp keepalived.conf keepalived.conf.bak

vi keepalived.conf

可以看到首先是全局配置,主要体现是设置邮箱,出现宕机问题可以发送邮件,此处暂不设置。

需要设置的是『vrrp_instance』以及『virtual_server』。

VRRP实例定义块主要用来定义对外提供服务的VIP区域及其相关属性

  • state :可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER
  • interface :对外提供服务的网络接口,用来发VRRP包
  • virtual_router_id :取值在0-255之间,用来区分多个instance的VRRP组播, 同一网段中该值不能重复,并且同一个vrrp实例使用唯一的标识
  • priority :用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)*
  • advert_int :发VRRP包的时间间隔,即多久进行一次master选举,可以认为是健康查检时间间隔,单位为秒
  • auth_type :认证类型有PASS和AH(IPSEC),通常使用的类型为PASS,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信
  • virtual_ipaddress :可以有多个VIP地址,每个地址占一行,不需要指定子网掩码,必须与RealServer上设定的VIP相一致

vrrp_instance

关于这些属性的用法及用例,可以观看配置文件的帮助文档

man keepalived.conf

虚拟服务器定义块,该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。ipvsadm命令可以实现的管理在这里都可以通过参数配置实现,注意:real_server是被包含在viyual_server模块中的,是子模块。

  • virtual_server :定义RealServer对应的VIP及服务端口

  • delay_loop :延迟轮询时间(单位秒)

  • lb_algo :后端调试算法

  • lb_kind :LVS调度类型NAT/DR/TUN

  • persistence_timeout :持久连接超时时间

  • protocol:转发协议protocol.一般有TCP和UDP两种

  • real_server :RealServer的IP和端口号,该组可在下面定义多个

virtual_server

保存退出。

需要对地址为『240.134』的虚拟机进行同样的配置。

scp ./keepalived.conf root@192.168.240.134:`pwd`

回车后输入『yes』,再输入密码即可以复制到『240.134』。

操作步骤

以下操作在地址为『240.134』的虚拟机上进行

编辑『keepalived.conf』文件

vi /etc/keepalived/keepalived.conf

修改『vrrp_instance』下的『state』为『BACKUP』

修改『vrrp_instance』下的『priority』为『50』

保存退出。


结果分析

在启动『keepalived』前,可以在地址为『240.131』的LVS上看到,并没有配置VIP,LVS内核模块也并没有配置。

网络及内核配置

启动『keepalived』

service keepalived start

再次查看网络配置以及内核配置

ifconfig

ipvsadm -ln

网络及内核配置

可以发现都已经配置好了。

再看一下地址为『240.134』的LVS。

网络及内核配置

在本机的『keepalived』未启动前,这些配置是没有的。

启动『keepalived』

service keepalived start

发现接口当中依旧没有VIP,但是内核模块会配置。

备机和主机在后台同时做着健康机制的检查,当主机挂掉,可以及时接替,保持状态一致性。

在物理机的浏览器中访问 192.168.240.150 即可看到效果。

也可以使用命令请求

curl 192.168.240.150

请求结果

宕机测试

一、主机备机同时启动,数据包发向何处

多次访问『192.168.240.150』,在两台LVS中查看记录的连接

ipvsadm -lnc

可以发现在主机『240.131』中有记录,在备机『240.134』无记录。

二、主机宕掉

使用禁用网卡的方法模拟主机宕掉。

ifconfig eth0 down

多次访问『192.168.240.150』,在地址为『240.134』的LVS中可以看到有连接记录。

连接记录

接着启用『240.131』的网卡

ifconfig eth0 up

多次访问『192.168.240.150』,在地址为『240.131』的LVS中可以看到有连接记录。

三、keepalived进程kill

此操作在地址为『240.131』的虚拟机上进行

先看一下keepalived进程的pid

ps -fe | grep keepalived

管道查询

可以看到有一个主进程、两个子进程。

接着kill进程:

kill -9 2778

kill -9 2780

kill -9 2781

查看网络配置以及内核配置,发现VIP以及TCP连接都没有卸载。

网络及内核配置

查看『240.134』的网络配置以及内核配置,发现VIP以及TCP都已经配置。