keepalived
一、keepalived入门介绍
1.keepalived简介
2.keepalived服务的三个重要功能
2.1.管理LVS负载均衡软件
2.2.实现对LVS集群节点健康检查功能
2.3.作为系统网络服务的高可用功能
3.keepalived高可用故障切换转移原理
4.keepalived安装及主配置文件介绍
二、使用keepalived实现双机热备
1.案例描述
2.Master服务器配置
3.Backup服务器配置
4.验证测试
5.Keepalived “裂脑”问题
5.1.什么是裂脑?
5.2.导致裂脑发生的原因
5.3.解决裂脑的常见方案
5.4.生产场景下检测裂脑故障的思路:
三、LVS+keepalived实现高可用负载均衡集群实战
1.案例描述
2.案例实施
Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康状态检查功能---判断LVS负载调度器、节点服务器的可用性、及时隔离并替换为新的服务器,当故障主机恢复后重新将其加入集群。可以实现高可用的VRRP/HSRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务(Nginx、Haproxy、MySQL等)的高可用解决方案软件。
早期的LVS软件需要通过命令行或脚本实现管理,并且没有针对LVS节点的健康检查功能。为了解决LVS的这些使用不便的问题,keepalived就诞生了,可以说keepalived软件起初是专门解决LVS的缺陷而诞生的。因此,keepalived和LVS的通常情况下是同时出现在集群系统中的。
Keepalived可以通过在自身的keepalived.conf配置文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,keepalived服务会自动将失效的节点服务器从当前的工作列队中移除,并将请求转交到正常节点服务器中,从而保证用户的访问不受影响。当故障节点服务器被修复后,再自动加入工作列队,继续为用户提供服务。
Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、反向代理服务器。
Keepalived高可用功能实现的简单原理为,两台主机同时安装配置keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,而Backup主机为备份主机,暂时不为用户提供服务,但是处于监听状态;当Master主机出现故障时,Backup通过keepalived高可用机制也发现了Master服务器无法正常工作,因此自动接管Master主机的所有工作,此时必然有一段时间处于用户无法正常访问服务,由于此机制响应速度较快,因此在进行故障切换时,用户几乎无法感知服务器有异常。当Master主机故障修复后,又会通过“抢占”机制获取对用户的服务权,继续为用户提供服务,而此时的Backup依旧为备服务器。也就是说,如果Master主机正常运行,那么Backup主机将一直处于待命状态。
Keepalived高可用服务对Master、Backup之间的故障切换转移是通过VRRP来实现的,在keepalived服务正常工作时,主Master节点会不断地向备服务器发送(以组播方式)心跳消息,用于告诉Backup主机我当前的状态是正常的,当Master主机出现故障时,就无法给Backup主机发送心跳消息,此时Backup主机也迟迟未接收到Master的心跳消息,因此Backup判断Master主机无法正常为用户提供服务,因此Backup主机接管了Master主机的所有服务。也就是说Backup主机从之前的待命状态变成了工作状态。当Master主机经过修复恢复正常后,通过对比双方的优先级,此时的Master主机将会从Backup主机中夺回服务权,而Bakcup主机此时继续待命。
Keepalived采用虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)热备份协议,以软件的方式实现Linux服务器的多机热备功能,VRRP是针对路由器的一种备份解决方案---由多台路由器组成一个热备份组,通过共用虚拟IP地址(简称VIP)对外提供服务,每个热备组内同一时刻只能有一台路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址为客户继续提供服务。热备组内的每台路由器都有可能成为主路由器,虚拟路由器的IP地址可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址,漂移地址的实现不需要配置网卡子接口,而是通过keepalived配置文件实现。
VRRP协议实现拓扑图如下图所示:
Keepalived安装方式一般通过编译安装、rpm包/yum安装两种方式实现,这两种方式安装都非常简单,因为keepalived安装时所需要依赖的包极少,可以忽略不计。在特殊环境下,可能有附加的包需要安装,具体根据实际情况实施安装,在此通过yum方式安装keepalived软件,不管哪种安装方式,使用时的配置都是一样的。
# yum install -y keepalived ipvsadm
# systemctl enable keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
keepalived配置文件
在keepalived高可用功能模块中,keepalived配置文件主要包含三部分:
全局配置区域:主要用来定义keepalived故障通知机制和Route ID标识
VRRP实例定义区域:此区域主要定义具体服务的实例配置,包括keepalived主备状态、接口、优先级、认证方式和IP信息等。
LVS负载的服务器池区域:定义VIP地址、健康状态检查时间、LVS负载均衡调度算法、负载均衡模式、节点服务器IP、权重、重连时间等信息。
全局配置区域:
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived //等同于#,表示这是一个关于keepalived的配置文件
global_defs { //全局配置区域起始
notification_email { //定义一个邮件通知项目
acassen@firewall.loc //此三行定义收件人,一般为管理员邮箱地址
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc //定义发件人地址,可以专门为此服务器申请一个邮箱地址用于发送keepalived信息邮件
smtp_server 192.168.200.1 //定义邮件服务器IP地址
smtp_connect_timeout 30 //定义连接邮件服务器的超时时间
router_id LVS_DEVEL //定义当前服务器主机名,具有唯一性
}
注意:在以上的邮件配置方面,生产环境中可以不用配置,此类报警通告可通过更加专业的监控工具来时间,如zabbix、nagios等。而花括号{}表示一个项目的开始和截止,因此一个项目开始若有花括号{,那么结尾也应该有个花括号}。
VRRP实例定义区域:
vrrp_instance VI_1 { //定义第一个vrrp实例,实例名称为VI_1,主和备可以不一样,在主中的多个实例中,此名称不应该一样
state MASTER //声明当前服务器角色为Master主服务器,BACKUP为备
interface ens32 //当前用于和集群中其他主机通信的网卡编号,而不是随意的一个编号
virtual_router_id 51 //虚拟路由器的ID号,一般为数字,主备应该一致
priority 100 //优先级,主服务器的要比备服务器优先级更高
advert_int 1 //心跳检查时间。用于主与备之间通信检查,该值为一秒,默认即可。该值越大,说明客户端感受到的故障时间越长
authentication { //主和备服务器通信的权限验证项目,确定主和备属于同一热备组
auth_type PASS //类型有PASS(密码验证)和AH(IPSEC验证),官方建议PASS
auth_pass 1111 //PASS的值,一般为数字,不超过8位
}
virtual_ipaddress { //指定VIP地址,可以有多个,此地址应该为客户端所访问的地址
192.168.200.16
192.168.200.17
192.168.200.18
61.139.2.69/30 dev ens32 label ens32:0
//以上一行的配置为,指定客户访问的公网地址,使用的物理网卡为ens32,别名为ens32:0
}
}
LVS负载的服务器池区域:
virtual_server 192.168.200.100 443 { //定义虚拟服务器,VIP地址、端口
delay_loop 6 //健康检查时间间隔,单位为秒
lb_algo rr //lvs调度算法rr/wrr/lc/wlc...
lb_kind NAT //负载均衡转发模式NAT/TUN/DR
persistence_timeout 50 //用户请求服务器会话超时时间,秒数。实验环境中一般禁用此项,目的是刷新一次浏览器页面,即可访问不同节点服务器,该值存在时,在值规定的时间内,客户端不断访问VIP地址将会由同一台服务器处理。
protocol TCP //使用的协议
real_server 192.168.201.100 443 { //第一个节点服务器ip、端口
weight 1 //权重,若节点服务器配置一致,此值都为1,不一致时,配置较高处理能力较强的服务器此值可以适当调高,调度器会给次值高的转发更多的请求。
inhibit_on_failure //当健康检查发现该节点故障后将其权重设置为0,而不是从服务列队剔除,0表示停用该节点
TCP_CHECK { //当前的健康状态检查模式,可以选择的有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 3 //连接超时时间
nb_get_retry 3 //重连次数
delay_before_retry 3 //重连间隔时间
connect_port 80 //健康检查的端口的端口
}
}
}
到目前为止,常用的keepalived配置文件参数介绍完毕,如需了解更加详细的配置文件说明,可以在linux终端下输入# “man keepalived.conf”以查看官方的文档解说。
基于VRRP的热备方式,keepalived可以用作服务器的故障切换,每个热备组可以有多台服务器,最常用的就是双机热备,在这种方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(web、ftp、mail等)
本小结主要是和通过一个简单的实验案例来实现keepalived双机热备。Master、Backup服务器的IP地址分别为192.168.1.10、192.168.1.20,而VIP地址设置为192.168.1.100,如下图所示:
案例环境:
主机 | 操作系统 | IP地址 | 主要软件 |
Keepalived_Master | CentOS 7.5_64 | 192.168.1.10/24 | keepalived-1.2.13-8.el7.x86_64 |
Keepalived_Backup | CentOS 7.5_64 | 192.168.1.20/24 | keepalived-1.2.13-8.el7.x86_64 |
Client_test | CentOS 7.5_64 | 192.168.1.30/24 | elinks-0.12-0.36.pre6.el7.x86_64 |
# yum install -y keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
123456@qq.com
}
notification_email_from 654321@qq.com
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id chengdu
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 dev ens32 label ens32:0
}
}
# systemctl start keepalived
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "keepalived高可用集群Web Server_1" > /var/www/html/index.html
# yum install -y keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
123456@qq.com
}
notification_email_from 654321@qq.com
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id shanghai
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 dev ens32 label ens32:0
}
}
# systemctl start keepalived
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "keepalived高可用集群Web Server_2" > /var/www/html/index.html
当以上keepalived配置完成后,默认情况下Master服务器通过ifconfig命令能够查看到ens32:0网卡的VIP地址192.168.1.100,而Backup服务器却查看不到,当将Master服务器的优先级设置比Backup服务器低时,Master服务器将无法查看到VIP地址,而Backup服务器却可以。
总结:通过ifconfig命令查看VIP地址时,只有当前为客户提供服务的服务器才能查看到VIP地址,而处于待命的服务器上无法查看到VIP地址。
客户端访问验证:
# yum install -y elinks //客户机安装文本浏览器
# elinks 192.168.1.100 //客户机访问VIP地址,由于此时Master服务器为192.168.1.10,因此获取到的页面为192.168.1.10的网页页面
Master服务器执行:
# systemctl stop keepalived //在Master服务器中关闭keepalived程序,此时Master服务器无法正常提供服务,因此Backup服务器应该会接替并为用户提供服务
客户端执行:
# elinks 192.168.1.100 //客户机访问VIP地址,由于此时为客户提供服务的为Backup服务器,因此获取到的页面应该为Backup服务器的页面。
当客户机连接时,可以通过以下命令在调度器上查看客户机访问服务器的路径流程
# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 01:49 FIN_WAIT 192.168.1.222:49375 192.168.1.100:80 192.168.1.30:80
TCP 00:55 FIN_WAIT 192.168.1.222:49374 192.168.1.100:80 192.168.1.30:80
# ipvsadm --list --timeout
Timeout (tcp tcpfin udp): 1 1 1 //超时时间
# ipvsadm --set 1 1 1 //修改超时时间,分别对应 tcp tcpfin udp
由于某些原因,导致两台高可用服务器对在指定时间内无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑。
(1)高可用服务器之间心跳线链路故障,导致无法正常通信。
(2)高可用服务器上开启了防火墙阻挡了心跳消息传输。
(3)高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
(4)其他服务配置不当等原因,如router_id不一致、心跳方式不同、心跳广播冲突、软件BUG等。
1)同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了另一个还是好的,依然能传送心跳消息。
2)当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith、fence)。相当于备节点接收不到心跳消息,发送关机命令通过单独的线路关闭主节点的电源。
3)做好对裂脑的监控报警(如邮件及手机短信等或值班),在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短信就有上行和下行的区别。报警信息报到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器,让服务器根据指令自动处理相应故障,这样解决故障的时间更短。
(1)简单判断的思想:只要备节点出现VIP就报警,这个报警有两种情况,一是主机宕机了备机接管了;二是主机没宕,裂脑了。不管属于哪个情况都进行报警,然后由人工查看判断及解决。
(2)比较严谨的判断:备节点出现对应VIP,并且主节点及对应服务(如果能远程连接主节点查看是否有VIP就更好了)还活着,就说明发生裂脑了。
Keepalived的设计目标是构建高可用的LVS负载均衡集群,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用作双机热备。使用keepalived构建LVS集群更加简便易用,主要优势体现在对LVS负载调度器实现热备切换、提高可用性、对服务器池中的节点服务器进行健康状态检查、自动移除失效节点、加入有效节点等功能。
在基于LVS+keepalived实现的LVS集群结构中,至少包括两台热备的负载调度器,至少两台节点服务器。本内容将以DR模式的LVS集群为基础,增加一台负载调度器,使用keepalived来实现主、从调度器的热备,从而构建兼有负载均衡、高可用两种能力的LVS网站集群系统。
案例架构图如下:
案例环境:
主机 | 操作系统 | IP地址 | VIP地址 | 主要软件 |
Master Server | CentOS 7.5_64 | 61.139.2.2/29 | 61.139.2.1/29 | ipvsadm-1.27-7.el7.x86_64 keepalived-1.2.13-8.el7.x86_64 |
Backup Server | CentOS 7.5_64 | 61.139.2.3/29 | 61.139.2.1/29 | |
Web Server_1 | CentOS 7.5_64 | 61.139.2.4/29 | 61.139.2.1/32 | httpd-2.4.6-45.el7.centos.x86_64 |
Web Server_2 | CentOS 7.5_64 | 61.139.2.5/29 | 61.139.2.1/32 | |
Client_test | CentOS 7.5_64 | 61.139.2.6/29 | elinks-0.12-0.36.pre6.el7.x86_64 |
对于以上拓扑结构以及网络设计的说明:服务器池中的节点服务器原设计第一网卡与调度器通信,第二网卡与内网的存储服务通信,由于此时实验环境使用存储服务的话无法体现更有效果的负载均衡集群效果,且NFS共享存储设置较为简单,因此在此处并未安装如图所示配置服务器池的第二网卡及后端存储服务。
Master Server操作
调整/proc响应参数
对于DR集群来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。
# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0 //此接口地址为lvs服务器正在使用的物理接口
# sysctl -p
安装并配置keepalived
# yum install -y keepalived ipvsadm
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
123456@chengdu.vip
}
notification_email_from 654321@chengdu.vip
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id chengdu
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 5525
}
virtual_ipaddress {
61.139.2.1/29 dev ens32 label ens32:0
}
}
virtual_server 61.139.2.1 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 61.139.2.4 80 { //第一个节点服务器
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 61.139.2.5 80 { //第二个节点服务器
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
# systemctl restart keepalived //重启服务
# ipvsadm –ln //通过ipvsadm管理工具查看通过配置文件配置的虚拟服务器和节点服务器是否有效
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 61.139.2.1:80 wrr
-> 61.139.2.4:80 Route 0 0 0
-> 61.139.2.5:80 Route 0 0 0
此时由于节点服务器还未配置httpd服务,开放80端口,因此两台节点服务器中的权重都被设置了为0,后续过程中当把节点服务器http服务配置完成并监听80端口后,再次查看此权重应该为keepalived.conf配置文件做所设置的1
在此时如果将keepalived.conf配置文件中节点服务器的“inhibit_on_failure”选项删除后,再次通过“ipvsadm -ln”命令将无法查看到节点服务器信息,因为节点服务器被移除了服务列队。即便是这样,在后续配置中将所有节点服务器都配置完成后,再次观察Master服务器的节点服务器状态,可以发现是能够查看到的。
Backup Server操作
调整/proc响应参数
对于DR集群来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。
# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0 //此接口地址为lvs服务器正在使用的物理接口
# sysctl -p
安装并配置keepalived
# yum install -y keepalived ipvsadm
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
123456@chengdu.vip
}
notification_email_from 654321@chengdu.vip
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id shanghai
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 5525
}
virtual_ipaddress {
61.139.2.1/29 dev ens32 label ens32:0
}
}
virtual_server 61.139.2.1 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 61.139.2.4 80 { //第一个节点服务器
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 61.139.2.5 80 { //第二个节点服务器
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
# systemctl restart keepalived //重启服务
# ipvsadm –ln //通过ipvsadm管理工具查看通过配置文件配置的虚拟服务器和节点服务器是否有效
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 61.139.2.1:80 wrr
-> 61.139.2.4:80 Route 1 0 0
-> 61.139.2.5:80 Route 0 0 0
两台Web Server配置
使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突,除此之外,WEB服务器的配置与NAT类似。
节点服务器配置VIP地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发),因此使用虚接口lo:0来承受VIP地址,并为本机添加一条路由记录,将访问VIP地的数据限制在本地,避免通信紊乱。
Web Server_1配置:
设置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0 //只修改以下三部分内容即可
DEVICE=lo:0
IPADDR=61.139.2.1
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 61.139.2.1 dev lo:0
# vim /etc/profile
/sbin/route add -host 61.139.2.1 dev lo:0
调整/proc相应参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p
安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS+keepalived高可用负载均衡集群之Web Server_1" > /var/www/html/index.html
Web Server_2配置:
设置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0 //只修改以下三部分内容即可
DEVICE=lo:0
IPADDR=61.139.2.1
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 61.139.2.1 dev lo:0
# vim /etc/profile
/sbin/route add -host 61.139.2.1 dev lo:0
调整/proc相应参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p
安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS+keepalived高可用负载均衡集群之Web Server_2" > /var/www/html/index.html
3、验证测试
keepalived负载调度器高可用功能验证:
在配置完成后,两台调度器都开启了keepalived,而且61.139.2.2的优先级更高,因此它应该为Master。通过# tail -50 /var/log/messages 查看系统日志,或ifconfig命令查看VIP地址,能够验证。
此时客户端通过浏览器访问VIP地址61.139.2.1也能够通过LVS负载均衡集群访问到节点服务器的网页内容且能够实现多个节点服务器之间跳转。
# systemctl stop keepalived //在第一台调度器中执行此命令,停用keepalived,此时keepalived服务应由第二台服务器接管,通过在第二台服务器61.139.2.3中执行以下命令可以验证:
# tail -20 /var/log/messages //在最后几行应该会显示以下字样,表示当前服务器已经角色为Master
VRRP_Instance(VI_1) Transition to MASTER STATE
VRRP_Instance(VI_1) Entering MASTER STATE
此时客户机再次访问VIP地址61.139.2.1,依然能够像之前那样访问到多台节点服务器的网页内容,也就是说,一台调度器出现了故障,并未影响客户正常访问。
接着继续将第二台服务器的keepalived服务也停止,此时集群中的两台服务器都无法实现为客户提供服务,因此客户端无法获取到任何节点服务器数据,也就是说客户端访问VIP地址时,无法获取到正常的网页内容。
# systemctl stop keepalived
两台调度器keepalived服务都关闭后,客户机访问情况如下:
# systemctl start keepalived //第一台调度器再次开启keepalived服务
# tail -20 /var/log/messages //查看日志,发现当前服务器成为了Master
VRRP_Instance(VI_1) Transition to MASTER STATE
VRRP_Instance(VI_1) Entering MASTER STATE
客户机再次访问:
此时LVS+keepalived高可用负载均衡集群验证到此结束。