之前咱们学习了keepalive的各种模式,详情可以查看这个笔记https://sulao.cn/post/877.html,这次我们就在上次学习的基础上部署keepalive非抢占单播模式
我的环境如下
192.168.1.73 docker环境 192.168.1.74 docker环境 192.168.1.73 VIP
首先我们先把VIP绑定到192.168.1.73这台机器,我的网卡名是eth0
ip addr add 192.168.1.75/24 dev eth0
然后我们开始部署测试用的nginx
分别在两台机器创建nginx目录
mkdir -p /data/nginx mkdir -p /data/nginx/{etc,www,logs}
在192.168.1.73上机器创建nginx默认网页
vi /data/nginx/www/index.html <head> <title>test nginx</title> </head> <body> test docker deploy nginx from 192.168.1.73 ! </body> </html>
在192.168.1.74上机器创建nginx默认网页
vi /data/nginx/www/index.html <html> <head> <title>test nginx</title> </head> <body> test docker deploy nginx from 192.168.1.74 ! </body> </html>
然后使用docker部署nginx并使用上述默认网页
docker run -itd -p 8888:80 --name nginx -v /data/nginx/www:/usr/share/nginx/html -v /data/nginx/logs:/var/log/nginx nginx:latest
通过上述部署以后我们尝试使用http://+8888的形式测试是否能访问nginx网页返回test docker deploy nginx from 192.168.1.73/74 !的内容,如果可以显示说明nginx这里就已经部署好了
紧接着我们部署keepalive
分别在两台机器创建keepalive目录
mkdir -p /data/keepalive mkdir -p /data/keepalive/{conf,check}
在192.168.1.73上机器创建keepalive配置文件
vi /data/keepalive/conf/keepalived.conf global_defs { router_id R1 } vrrp_script check_k8s { script "/data/keepalive/check/script.sh" interval 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 nopreempt preempt delay 300 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.1.73 #自己的IP #单播模式 unicast_peer { 192.168.1.74 #另一个IP } virtual_ipaddress { 192.168.1.75/24 #VIP } track_script { check_k8s } }
在192.168.1.74上机器创建keepalive配置文件
vi /data/keepalive/conf/keepalived.conf global_defs { router_id R2 } vrrp_script check_k8s { script "/data/keepalive/check/script.sh" interval 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 nopreempt priority 100 preempt delay 300 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.1.74 #自己的IP #单播模式 unicast_peer { 192.168.1.73 #另一个IP } virtual_ipaddress { 192.168.1.75/24 #VIP } track_script { check_k8s } }
两台节点的检测脚本都是同一个,脚本内容如下,分别在两台机器该位置创建
vi /data/keepalive/check/script.sh #!/bin/bash count=`netstat -ntpl | grep 8888 | wc -l` if [ $count -gt 0 ]; then exit 0 else exit 1 fi
赋予该脚本执行权限
chmod +x /data/keepalive/check/script.sh
最后我们启动keepalive容器
docker run -itd --name keepalived --restart=always \ --cap-add=NET_ADMIN \ --cap-add=NET_BROADCAST \ --cap-add=NET_RAW \ --net=host \ -v /data/keepalive/conf:/usr/local/etc/keepalived \ -v /data/keepalive/check:/data/keepalive/check \ osixia/keepalived:2.0.20
最后我们测试VIP的漂移
我们尝试停止192.168.1.73上的nginx
docker stop nginx
这是我们打印192.168.1.73上的keepalived日志,可以到如下信息
docker logs -f keepalived
keepalived将优先级从100改成了98,然后将本机设置为BACKUP状态,然后回收了VIP
然后我查看192.168.1.74的keepalived日志,可以到如下信息
keepalived将优先级从98改成了100,然后本机设置为MASTER,然后设置了VIP,将VIP绑到了本机网卡上
这是我们使用http://192.168.1.75访问nginx网页发现返回的是原本设置的192.168.1.74的默认网页
我要评论