前面讲到了部署多个tomcat和多个rabbitmq用nginx做代理服务器,这种情况,tomcat和rabbitmq既实现了高可用又实现了负载均衡。但是,nginx确成了单点。在一个HA环境中,任何一个点都必须实现高可用,这里就需要借助keepalived来实现nginx的高可用。
测试环境
- host1 192.168.30.1 (nginx, keepalived/master)
- host2 192.168.30.2 (nginx, keepalived/backup)
安装keepalived
host1和host2分别安装keepalived, host2安装nginx(过程略)
$ yum install keepalived
AI 代码解读
准备nginx状态检测脚本
/etc/keepalived/check_nginx.sh
#!/bin/bash if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then /usr/local/nginx/sbin/nginx sleep 5 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then killall keepalived fi fi
AI 代码解读
拷贝到host2
$ scp /etc/keepalived/check_nginx.sh root@192.168.30.2:/etc/keepalived/check_nginx.sh
AI 代码解读
修改host1的keepalived配置
! Configuration File for keepalived global_defs { notification_email { test@sanlogic.com } notification_email_from test@test.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.30.30 } }
AI 代码解读
修改host2的keepalived配置文件
! Configuration File for keepalived global_defs { notification_email { test@sanlogic.com } notification_email_from test@test.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.30.30 } }
AI 代码解读
启动keepalived
$ systemctl enable keepalived
$ systemctl start keepalived
AI 代码解读
测试
用浏览器访问http://192.168.30.30/hellonginx,出现如下界面
这时关闭host1
$ halt -p
AI 代码解读
用浏览器访问http://192.168.30.30/hellonginx,仍然是如下界面
Done !