keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:nginx,haproxy,mysql等)的高可用解决方案软件
keepalived软件主要通过VRRP协议实现高可用功能的。VRRP(虚拟路由器冗余协议),VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保持当个别节点宕机时,整个网络可以不间断地运行
所以keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能
官网:www.keepalived.org
对LVS集群节点健康检查
keepalived可以在自身的配置文件中修改对LVS节点的管理、启停,以及当LVS集群节点失效的时候,踢出集群,并且转换IP地址等配置,转移到健康的节点上,从而保证用户的访问不受影响
当故障的节点恢复后,keepalived服务能够重新将其加入LVS集群中
作为系统网络服务的高可用共而过
keepalived能够实现任意两台主机之间,例如master和backup主机之间的故障和自动转义,这个主机可以是普通的禁止停机的业务服务器,也可以是例如LVS、Nginx这样的方向代理服务器
keepalived高可用&故障切换原理
VRRP描述
keepalived配置文件
安装keepalived
yum install keepalived -y
默认的配置文件路径
/etc/keepalived/keepalived.conf
keepalived主要有3个功能,下面仅分享其高可用的功能,非高可用性相关的功能可以将其注释掉
有关高可以用性的配置,有如下两大区块
全局定义部分(global defintiton)
这部分主要定义keepalived的故障通知机制和Router ID标识
[root@lb01 conf]# head -12 /etc/keepalived/keepalived.conf | cat -n1 ! Configuration File for keepalived23 glbal_defs {4 notification_email {5 acassen@firewall.loc6 failover@firewall.loc7 sysadmin@firewall.loc8 }9 notification_email_from Alexandre.Cassen@firewall.loc10 smtp_server 192.168.200.111 smtp_connect_timeout 3012 router_id LVS_DEVEL13 }
内容解释:
1.注释行,!和 # 作用一样
2.空行
3~8.定义邮件报警的地址,当keepalived主备切换,或者RS(后端服务器 real sever)故障时发送告警邮件
9.指定告警邮件,发信人的地址
10.指定邮件服务器地址,例如本地配置了sendmail服务
11.连接邮件服务器的超时时间
12.重要参数,指定keepalived的路由指标(router_id),在局域网内,该ID应该是唯一的
VRRP实例配置
主要配置keepalived主备状态,接口、优先级,认证方式,IP地址等信息
/etc/keepalived/keepalived.conf
19 vrrp_instance VI_1 {20 state MASTER21 interface eth022 virtual_router_id 5123 priority 10024 advert_int 125 authentication {26 auth_type PASS27 auth_pass 111128 }29 virtual_ipaddress {30 192.168.200.1631 192.168.200.1732 192.168.200.1833 }34 }
内容解释:
19.定义vrrp实例,名字是VI_1,每一个vrrp实例可以理解为是keepalived的一个业务,vrrp实例在配置文件中可以有多个,并且主节点的keepalived配置的vrrp_instance在备节点也必须存在,才能实现故障迁移(keepalived是一款工具,真正干活的配置是vrrp_instance)
20.参数作用是表示当前实例VI_1的角色是主节点,该参数只有MASTER和BACKUP两种,严格区分大小写。MASTER表示工作中的主节点,BACKUP表示备用节点。BACKUP在MASTER故障时,接替其工作继续运转
21.insterface为网络通信接口,对外提供服务器的网络接口,根据自己机器修改
22.唯一虚拟路由ID标识,最好是数字,在当前keepalived.conf配置文件中必须是唯一的,且在MASTER和BACKUP的配置中相同实例的virtual_router_id必须是一样的,否则会出现脑裂问题
23.定义实例的优先级,也是一串数字,数字越大,优先级越高。在同一个vrrp_instance实例里,MASTER的优先级必须高于BACKUP,一般配置MASTER和BACKUP间隔大小在50,例如MASTER的优先级150,BACKUP的优先级是小于100的数值
24.定义MASTER和BACKUP之间的通信检查时间,默认单位是秒
25~28.权限配置参数,密码类型是PASS,密码为明文方式,长度建议不超过8个字符,一般用4位数字,同一个VRRP实例,MASTER和BACKUP的密码必须一样才能通信
29~34.定义虚拟IP的地址,可以配置多个IP地址,且明确子网掩码和IP绑定的网络接口(网卡名),否则虚拟IP的子网掩码默认是32位,网络接口和前面的Interface参数一致,这里的虚拟IP(VIP)就是实际工作中需要使用的IP地址,和域名进行绑定解析
keepalived配置信息
global_defs {router_id lb01}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.47.140/24 dev ens33 label ens33:1}}
global_defs {router_id lb02}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.47.140/24 dev ens33 label ens33:1}}
keepalived实战单实例
事实上网络服务的高可用功能原理是比较简单的,本质上就是手动的操作自动化就可以解决了。
如果没有配置高可用服务,当服务器宕机了就得找一个新的服务器,重新进行环境初始化,配置IP,搭建服务,整个手动恢复的时间比较漫长,对于用户而言,就不太友好。这个切换过程必须自动化完成,效率更高,体验更好。
高可用性的实验配置,就是开启一堆服务器,同时配置好高可用服务,但是只有获取到虚拟IP(VIP)的主服务器提供服务,若是主的宕机,VIP会自动漂浮到备用服务器上,此时用户的请求,也就跟着走到了备用服务器,这个过程完全自动化,快速迁移。
配置主keepalived服务器 lb01-master
备份旧配置文件,定义新配置文件
进入配置文件目录
cd /etc/keepalived/
备份配置文件
cp keepalived.conf{,.bak}
清空配置文件内容
keepalived.conf
定义新配置 ```nginx global_defs { router_id lb01 }
vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.178.3/24 dev ens33 lable ens33:3 } }
3. 启动keepalived> systemctl start keepalived> ps -ef | grep keep | grep -v grep4. 检查是否生成新的vip地址,192.168.178.3> ip addr | grep "inet 192"<a name="eFIOK"></a>## 配置keepalived备服务器 lb02-BACKUP1. 注意主备的区别```nginxglobal_defs {router_id lb02}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.178.3/24 dev ens33 lable ens33:3}}
- 同样的启动服务,检查服务状态,查看是否出现虚拟IP(VIP)
ip addr | grep “inet 192”
- 正确的结果应该是没有出现VIP
- 因为lb02位BACKUP,当主节点正常的时候,他不会接管VIP
-
报错排查故障思路
如果出现lb01、lb02抢夺vip资源
主备服务器是否能够通信,可以ping检测
- 是否没有正确配置防火墙,或是忘记关闭防火墙
- 两台服务器的keepalived.conf是否写错(例如虚拟路由ID是否不一样)
高可用集训脑裂
什么是脑裂?
由于某些问题,导致两台高可用服务器在指定时间内无法检测到对方的心跳信息,导致各自都取得资源和服务的拥有权,这样会导致同一个IP地址或服务同时存在,引发的冲突问题。并且可能两台机器使用同一个VIP地址,用户写入数据可能会分别写入两台机器,导致服务器两端数据不一致,造成数据混乱,这种情况就是脑裂问题。
导致脑裂的原因
- 高可用服务器之间的心跳线路故障,无法通信
- 心跳线坏了、断裂、老化(心跳线指的是服务器之间使用网络连接)
- 网卡或驱动损毁,ip配置冲突
- 防火墙阻挡了心跳信息传输
-
解决脑裂方案
使用双心跳线路,防止单线路损坏,另一个还是好的,同时使用串行电缆和以外网电缆
- 当检测到脑裂情况时,强行关闭一个心跳节点(需要额外设备支持,如stonith),备节点收不到心跳消息的时候,通过单独的线路发送关机命令,强制关闭主节点电源
- 做好脑裂监控报警,如手机短信、邮件、微信等,在发生脑裂问题时,人为第一时间介入仲裁,降低损失
- 注意如果开启了防火墙,一定要允许心跳信息通过,允许ip段访问
- 使用专业级监控软件,Nagios等进行脑裂检测
keepalived双实例双主模式实战
设备准备
- A业务在lb01上是主模式,在lb02上是备模式
- B业务在lb02上是备模式,在lb02上是主模式
lb01 — 192.168.178.130 — vip:192.168.178.3(绑定A业务www.chaoge.com)
lb02 — 192.168.178.131 — vip:192.168.178.4(绑定B业务bbs.chaoge.com)
文件配置
- 配置lb01,添加vrrp实例 ```nginx global_defs { router_id lb01 }
vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.178.3/24 dev ens33 lable ens33:3 } }
vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.178.4 dev ens33 lable ens33:4 } }
2. 配置lb02```nginxglobal_defs {router_id lb02}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.178.3/24 dev ens33 lable ens33:3}}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 52priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.178.4 dev ens33 lable ens33:4}}
- 分别重启keepalived,查看vip的信息情况
systemctl restart keepalived
检验结果:谁是vrrp实例的master,谁就优先得到vip,lb01得到ip192.168.178.3,lb02得到ip192.168.178.4
nginx + keepalived高可用实验
##准备四台机器## 高可用性负载均衡集群节点 lb01 keepalived master lb02 keepalived backup 2个real server节点,资源服务器节点 web01 nginx web02 nginx
- 准备2个web节点的内容,即配置对应ip首页的显示内容,方便我们进行实验检测
- 配置lb01,主要是修改nginx,定义负载均衡池,以及域名的配置 ```nginx upstream my_web { server 172.20.0.67; server 172.20.0.72; }
server { listen 80; server_name www.chaoge.cn; location / { proxy_pass http://my_web; } } ```
- 配置lb02,与lb01相同
- 检验效果
curl lb01的IP地址
curl lb02的ip地址
#都能够分别得到两个web节点的内容,即ok
进行keepalived vip结合
- 选用lb01为master主的负载均衡器,选用的他的vip,与公司域名绑定即可
- 修改hosts文件,填写vip和域名绑定解析关系
- 这个时候,我们就可以利用网页,通过域名查看到web站点的内容
- 且这个时候我们关闭lb01,可以查看vip已经到了lb02机器上,发现网站还是可以正常访问
