我們已經做過tomcat叢集以及nginx負載均衡,但前提是nginx正常運作。如果nginx當機,則系統就沒有統一入口。本文将闡述如何保證nginx的高可用性,這時候就需要keepalived服務。
1、 環境限制
- CentOS 6.4 64位 2台,作者ip各為192.168.100.134、192.168.100.136
- nginx-1.5.0
- keepalived
2、 前提限制
-
完成nginx下的tomcat叢集部署 https://www.jianshu.com/nb/34743981
注意:現在我們研究的是nginx的高可用性,可以不用安裝tomcat即配置tomcat高可用性
3、操作
3.1 通過yum安裝keepalived
yum -y install keepalived
3.2 修改/etc/keepalived/keepalived.conf
# 加入check_nginx.sh的配置節點
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
#修改vrrp_instance VI_1節點中的 virtual_ipaddress
virtual_ipaddress {
192.168.100.135
192.168.100.137
}
3.3 新增配置/etc/keepalived/check_nginx.sh
#!/bin/bash
COUNT=$(ps -C nginx --no-header |wc -l)
echo $COUNT
#判斷Nginx 是否都挂掉了
if [ $COUNT -eq 0 ]
then
#如果挂掉了,就啟動nginx
/usr/local/nginx/sbin/nginx start
echo "重新開機nginx"
#等5秒鐘後,再次檢視是否 啟動成功
sleep 5
#如果nginx沒有啟動起來,就直接幹掉keepalived
COUNT=$(ps -C nginx --no-header |wc -l)
if [ $COUNT -eq 0 ]
then
echo "幹掉keepalived"
#如果killall指令不能使用,就需要安裝psmisc工具了
#yum install -y psmisc
killall keepalived
fi
fi
3.4 分别啟動keepalived
/etc/init.d/keepalived start
至此,我們已經完成了nginx的高可用性,此時,我們通路http://192.168.100.135/或者http://192.168.100.137/都可以被配置設定請求到nginx。如果有一台機子的keepalived當機,135/137也能通路;如果有一台機子的nginx當機,135/137也能通路;如果有一台機子的tomcat當機,135/137也能通路。nginx保證了tomcat的高可用性; keepalived保證了nginx的高可用性; 多個nginx對應多個keepalved,keepalived也具有高可用性,這種情況下除非發生不可抗力,系統将永不停服。