利用keepalived實現高可靠 動態管理 ngnix
實際工作中ngnix肯定要做成高可用模式,防止一個ngnix掛了,所有請求都無法訪問成功,我們可以利用keepalived實現高可靠來動態管理ngnix,cong從而讓ngnix也具備高可用性。
1 ,keepalived實現高可靠(HA)
HA(High Available), 高可用性叢集,是保證業務連續性的有效解決方案,一般有兩個或兩個以上的節點,且分為活動節點及備用節點,keepalive是一款可以實現高可靠的軟體,通常部署在2臺伺服器上,分為一主一備。Keepalived可以對本機上的程序進行檢測,一旦Master檢測出某個程序出現問題,將自己切換成Backup狀態,然後通知另外一個節點切換成Master狀態。
2,keepalived安裝
下載keepalived官網:http://keepalived.org
將keepalived解壓到/usr/app目錄下
tar -zxvf keepalived-1.2.19.tar.gz -C /usr/app/
進入到/usr/app/keepalived-1.2.19目錄
cd /usr/app/keepalived-1.2.19
開始configure
./configure --prefix=/usr/app/keepalived #指定keepalived的目錄為 /usr/app/keepalived
如果安裝報錯,是因為少一些依賴,執行如下命令安裝依賴大全,,,
yum -y install gcc pcre-devel openssl openssl-devel
#編譯並安裝
make && make install
3,將keepalived新增到系統服務中
拷貝執行檔案
cp /usr/app/keepalived/sbin/keepalived /usr/sbin/
將init.d檔案拷貝到etc下,加入開機啟動項
cp /usr/app/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
將keepalived檔案拷貝到etc下
cp /usr/app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
建立keepalived資料夾
mkdir -p /etc/keepalived
將keepalived配置檔案拷貝到etc下
cp /usr/app/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
新增可執行許可權
chmod +x /etc/init.d/keepalived
新增keepalived到開機啟動
chkconfig --add keepalived
chkconfig keepalived on
4, 配置keepalived虛擬IP
修改配置檔案: /etc/keepalived/keepalived.conf
#MASTER節點
global_defs {
}
vrrp_instance VI_1 {
state MASTER #指定A節點為主節點 備用節點上設定為BACKUP即可
interface eth0 #繫結虛擬IP的網路介面
virtual_router_id 51 #VRRP組名,兩個節點的設定必須一樣,以指明各個節點屬於同一VRRP組
priority 100 #主節點的優先順序(1-254之間),備用節點必須比主節點優先順序低
advert_int 1 #組播資訊傳送間隔,兩個節點設定必須一樣
authentication { #設定驗證資訊,兩個節點必須一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #指定虛擬IP, 兩個節點設定必須一樣
192.168.33.60/24 #如果兩個nginx的ip分別是192.168.33.61,,...62,則此處的虛擬ip跟它倆同一個網段即可
}
}
#BACKUP節點
global_defs {
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.33.60/24
}
}
#分別啟動兩臺機器上的keepalived
service keepalived start
測試:
殺掉master上的keepalived程序,你會發現,在slave機器上的eth0網絡卡多了一個ip地址
檢視ip地址的命令: ip addr
其實他的原理就是根據兩臺keepalived伺服器繫結的共同的網段的ip地址(192.168.33.60),利用這個ip實現主備跳轉切換,訪問該ip預設等於訪問主機的實際ip,當主機掛了,備機自動切換為主機,這是使用該ip訪問依然成功,不過就相當於訪問了備機ip。
5,配置keepalived心跳檢查
要想實現ngnix主備自動切換,需要讓使用者自定義一個shell指令碼並利用keepalived去檢測使用者自己的程式,返回狀態給keepalived就可以了, 當指令碼檢測到 test1 伺服器上的 ngnix掛了,那麼keepalived會自動切換為test2伺服器上的keepalived, 同時test1上的keepalived會根據自定義編寫的指令碼對test1上的ngnix進行重啟或關閉等操作。
修改配置檔案: /etc/keepalived/keepalived.conf
#MASTER節點
global_defs {
}
vrrp_script chk_health {
script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"
interval 1 #每隔1秒執行上述的指令碼,去檢查使用者的程式ngnix
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 1
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_health
}
virtual_ipaddress {
10.0.0.10/24
}
notify_master "/usr/local/keepalived/sbin/notify.sh master"
notify_backup "/usr/local/keepalived/sbin/notify.sh backup"
notify_fault "/usr/local/keepalived/sbin/notify.sh fault"
}
#BACKUP節點
global_defs {
}
vrrp_script chk_health {
script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"
interval 1
weight -2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_health
}
virtual_ipaddress {
10.0.0.10/24
}
notify_master "/usr/local/keepalived/sbin/notify.sh master"
notify_backup "/usr/local/keepalived/sbin/notify.sh backup"
notify_fault "/usr/local/keepalived/sbin/notify.sh fault"
}
#新增切換通知指令碼
vi /usr/app/keepalived/sbin/notify.sh
#!/bin/bash
case "$1" in
master)
/usr/local/nginx/sbin/nginx
exit 0
;;
backup)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
exit 0
;;
fault)
/usr/local/nginx/sbin/nginx -s stop
exit 0
;;
*)
echo 'Usage: notify.sh {master|backup|fault}'
exit 1
;;
esac
#在第二臺機器上新增notify.sh指令碼
#分別在兩臺機器上啟動keepalived
service keepalived start
chkconfig keepalived on
接下來自行測試即可,手動殺死ngnix程序,檢視主備變化,自己看不解釋了。