准备两台机器分别部署nginx和keepalived,事先部署好docker容器环境。
主机名 | ip地址 | 部署容器 |
park2-0007 | 10.9.102.62 | nginx+keepalived |
park2-0008 | 10.9.102.63 | nginx+keepalived |
分别启动两个nginx容器
docker run -d \--name my-nginx -p 8005:8005 \-v ./nginxdir/default.conf:/etc/nginx/conf.d/default.conf \-v ./nginxdir/index.html:/usr/share/nginx/html/index.html \10.9.102.61:5000/nginx:1.27.2
分别访问看看
在启动 keepalived容器之前先把配置写好
[root@park2-0007 keepalived]# cat keepalived.conf ! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL }vrrp_instance VI_1 {state MASTERinterface eth1 # 根据实际网络接口修改virtual_router_id 51priority 51advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.9.102.244 # 替换为实际的虚拟 IP} }
[root@park2-0008 keepalived]# cat keepalived.conf ! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL }vrrp_instance VI_1 {state MASTERinterface eth1 # 根据实际网络接口修改virtual_router_id 51priority 101advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.9.102.244 # 替换为实际的虚拟 IP} }
分别在两台机器启动keepalived容器
docker run -d \--copy-service \--name keepalived \--network host --cap-add=NET_ADMIN \-v ./keepalived.conf:/container/service/keepalived/assets/keepalived.conf \swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/osixia/keepalived:2.0.20
可以看到vip在park2-0008的eth1上启动了,跟我们配置的一样。
好了,我们现在访问10.9.102.244:8005这个vip+端口应该看到的就是hello park2-0008
现在我们手动停掉park2-0008上的keepalived容器,模拟0008上nginx故障看看效果
可以看到park2-0008上的vip漂移走了
惊不惊喜,vip漂移到了park2-0007上。那我们再通过vip访问看一下
翻车了,不知道为啥vip不通了,刚刚还能访问的。不管了,思路就是这样。
最后在补充一个检查脚本,放在cronjob中每两秒执行检查一次。注意两个节点上都要有这个脚本,同时脚本中的ip写本机的。
#!/bin/bash # 向 Nginx 发送 HTTP 请求,检查返回状态码 response=$(curl -s -o /dev/null -w "%{http_code}" http://nginxip:8005)if [ "$response" -ne 200 ]; then# 如果状态码不是 200,停止 Keepalived/etc/init.d/keepalived stop fi