通过Keepalived可以实现主服务器整机不可用,实现VIP的切换。保证用户可以通过VIP进行访问服务。但是实际上,往往不是服务器整机不可用,只是对应的服务或者软件不可用。
比如说,nginx提供的web的服务,nginx进程关闭。
就需要检测当nginx不可用的时,就切换VIP。
实现过程分析:
VIP实际上由Keepalived进行绑定的,所以当nginx服务不可用时,就关闭当前机器的Keepalive即可,释放VIP。进而绑定到其他备用服务器。
1)编写服务器检测脚本,实现检测nginx是否可用,不可用则关闭当前所在主机的Keepalived。
2)在Keepalived配置中调用检测服务脚本。
Nginx服务可用检测脚本:
主备服务器都要实现此脚本。
1)编写测试脚本,赋予执行权限:
- [root@server01 keepalived]# cat check_nginx.sh
- #!/bin/bash
-
- nginx_status=`ps -C nginx --no-header | wc -l`
-
- if [ $nginx_status -eq 0 ]; then
- systemctl stop keepalived;
- fi
赋予权限:
[root@server01 keepalived]# chmod +x check_nginx.sh
测试下脚本可用性:
启动nginx和Keepalived
关闭nginx,执行脚本,查看Keepalived是否关闭。
- [root@server01 keepalived]# ps aux |grep nginx
- root 746 0.0 0.0 46192 1268 ? Ss 08:39 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- www 748 0.0 0.0 46616 2012 ? S 08:39 0:00 nginx: worker process
- www 749 0.0 0.0 46616 2012 ? S 08:39 0:00 nginx: worker process
- root 1356 0.0 0.0 112816 972 pts/0 S+ 08:59 0:00 grep --color=auto nginx
- [root@server01 keepalived]#
- [root@server01 keepalived]# kill -TERM 746
- [root@server01 keepalived]# ps aux |grep nginx
- root 1360 0.0 0.0 112812 972 pts/0 R+ 09:00 0:00 grep --color=auto nginx
-
执行下脚本,再看keepalived的状态。
然后VIP已经切换到server03这台服务器上了。
同样,我们也要在server03这台服务器上添加这个脚本。
scp check_nginx.sh 192.168.17.109:/etc/keepalived/
在多台服务器中配置Keepalived定时触发检测nginx脚本模块:
在这个过程中,我纠正了一个nginx的一个配置问题:
然后我就使用systemctl status nginx就能正常工作了。不会显示错误信息。
实现web服务器的高可用。
以上案例已经实现了,服务不可用VIP切换到可用服务器。
现在需求用户的服务是连续不间断的,故用户需要通过VIP进行访问。
1)解析域名到VIP;
2)模拟用户访问;
在测试的过程中,发现无法ping 通VIP。通过百度。看到可以将vrrp_strict进行注释即可。当然还有两种配置方法。
然后重启keepalived进程。systemctl restart keepalived。
然后再进行ping测试,发现可以ping通VIP。
另外,我们也可以写nginx自愈的脚本编写。
总结:
具有故障自动恢复能力的可用性。
解析域名,切换到可用的服务器上。web的高可用就实现了。