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一定要合理的规划

 

 

 

 

posted @ 2023-05-17 16:06  小粉优化大师  阅读(438)  评论(0编辑  收藏  举报