keepalived双主配置
1、基础知识
1.1、需求
在实际的工作中,我们的网站服务一般都是以域名的方式对外提供服务,对于这种情况下一般有这么两种现象:
1、一个域名对应一个ip地址,万一域名解析的ip地址故障,就出现单点故障现象
2、一个域名可以解析不同的后端服务,我们可以基于同域名解析多个不同服务的ip地址,更精确的响应用户
也就是说,我们在实现keepalived的高可用时候,需要在同一组高可用集群中,设置多个对外的VIP即多组VRRP实例,任意一组失误,都不影响用户的访问体验。
1.2、架构图
1.3、主机资源
kpmaster 192.168.10.12 ens33 192.168.10.100 vip-master 192.168.10.200 vip-slave kpslave 192.168.10.13 ens33 192.168.10.100 vip-master 192.168.10.200 vip-slave
2、配置
2.1、准备检查的脚本
]# vim /data/scripts/keepalived_check.sh #!/bin/bash if [ -f /tmp/keepalived.fail ];then weight -2 fi # 生产中是获取进程是否存在判断
2.2、配置kpmaster 多个vrrp示例
global_defs { router_id kpmaster } vrrp_script chk_keepalived { script "/bin/bash /data/scripts/keepalived_check.sh" interval 1 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 50 priority 100 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.100 dev ens33 label ens33:0 } track_script { chk_keepalived } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id 51 priority 99 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.200 dev ens33 label ens33:1 } track_script { chk_keepalived } } virtual_server 192.168.10.100 80 { ... } virtual_server 192.168.10.200 80 { ... }
2.3、配置kpslave 多个vrrp实例
global_defs { router_id kpslave } vrrp_script chk_keepalived { script "/bin/bash /data/scripts/keepalived_check.sh" interval 1 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 50 priority 99 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.100 dev ens33 label ens33:0 } track_script { chk_keepalived } } vrrp_instance VI_2 { state MASTER interface ens33 virtual_router_id 51 priority 100 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.200 dev ens33 label ens33:1 } track_script { chk_keepalived } } virtual_server 192.168.10.100 80 { ... } virtual_server 192.168.10.200 80 { .. }
2.4、开启web服务
这里显示页面,自行准备 # 保证所有依赖服务都处于开启状态 [root@kpmaster ~]# systemctl start httpd [root@kpslave ~]# systemctl start httpd [root@lvs-rs1 ~]# systemctl start nginx [root@lvs-rs2 ~]# systemctl start nginx
2.5、启动两台keepalived主机服务
systemctl start keepalived.service
2.6、查看日志效果
结果显示:
在kpslave结点keepalived服务未启动时候,两个vrrp实例都在kpmaster主机上
当kpslave结点keepalived服务启动时候,VI_2的实例优先级较kpmaster主机高,所以将8.200的VIP枪过来了。
2.7、检查效果
2.7.1、vip和ipvs检查
# 检查两台主机的ip ip addr # 检查ipvs规则 [root@kpmaster ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:80 rr -> 192.168.10.16:80 Route 1 0 4 -> 192.168.10.17:80 Route 1 1 4 TCP 192.168.10.200:80 rr -> 192.168.10.16:80 Route 1 0 0 -> 192.168.10.17:80 Route 1 0 0 可以看到: 这里存在两个lvs集群,管理的内容是一致的。
2.7.2、访问效果
# 单独找一台客户端来验证效果 [root@client ~]# for i in {1..8}; do curl 192.168.10.100;done nginx-RS1 nginx-RS2 nginx-RS1 nginx-RS2 nginx-RS1 nginx-RS2 nginx-RS1 nginx-RS2 [root@client ~]# for i in {1..8}; do curl 192.168.10.200;done nginx-RS2 nginx-RS1 nginx-RS2 nginx-RS1 nginx-RS2 nginx-RS1 nginx-RS2 nginx-RS1
2.8、关闭两台RS的nginx服务
[root@lvs-rs1 ~]# systemctl stop nginx [root@lvs-rs2 ~]# systemctl stop nginx 查看keepalived的ipvs规则 [root@kpmaster ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:80 rr -> 127.0.0.1:80 Route 1 0 0 TCP 192.168.10.200:80 rr -> 127.0.0.1:80 Route 1 0 0
3、小结
3.1、高可用的场景步骤
对于多应用场景或者请求入口高可用的场景,我们可以基于vrrp多实例的样式来完成。 完成步骤如下: 1、规划服务的检测内容 2、后端服务的正常运行 3、keepalived使用配置多vrrp实例 4、效果测试
3.2、注意事项
keepalived在配置多vrrp实例的时候,一定要注意:
1、同一实例间的优先级和state必须写清楚
2、不同实例的名称和VIP一定要合理的规划