Nginx+Keepalive高可用之主從配置
實驗環境
操作系統:CentOS 7.4 1708
軟件安裝:yum -y install epel-release && yum -y install nginx keepalived
Nginx+Keepalived NodeA:18.50.129.72(master)
Nginx+Keepalived NodeB:18.50.129.73(slave)
VIP:18.50.129.74
實現目標
當Nginx服務停止後Keepalived會自動去啟動此服務,如果無法啟動將VIP轉移至Slave節點
當Master節點Nginx配置文件更新後,Slave節點的Nginx配置文件及時同步
Node1的Keepalived配置
! Configuration File for keepalived global_defs { router_id NodeA #路由器標識,最好寫主機名,用於標識 } vrrp_script chk_nginx { #配置檢查方式,chk_nginx為自定義名稱 script "/etc/keepalived/nginx_check.sh" interval 2 weight 20 #此值需要大於MASTER的priority減去BACKUP的priority } vrrp_instance VI_1 { state MASTER #主節點為:MASTER,備節點為:BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { #此為認證方式,MASTER和BACKUP統一 auth_type PASS auth_pass 1314 } track_script { #調用上面的檢查腳本 chk_nginx } virtual_ipaddress { #設定VIP地址 18.50.129.74/24 } }
Node2的Keepalived配置
! Configuration File for keepalived global_defs { router_id NodeB } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight 20 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1314 } track_script { chk_nginx } virtual_ipaddress { 18.50.129.74/24 } }
nginx_check.sh腳本內容:
#!/bin/bash A=`ps -C nginx --no-header | wc -l` if [ $A -eq 0 ];then nginx sleep 2 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then pkill keepalived fi fi
腳本說明:
腳本邏輯為檢測進程如果沒有nginx就嘗試啟動一次,然後等礴兩秒,再檢測,如果還沒有上進程就結束keepalived進程。這樣VIP就會移動到備份節點
我這裏是yum安裝的Nginx,所以直接使用nginx命令可以啟動nginx,如果你是源碼安裝,或者需要配置下環境變量或者更改下啟動命令和絕對路徑,並測試是否能正常啟動
如果覺得等待兩秒的時候過長可以更改為1秒
啟動服務:
在NodeA和NodeB執行後面命令:systemctl start keepalived
測試:
查看兩個節點的Nginx服務是否啟動成功,如果keepalived啟動成功會調用啟動Nginx,前提需要保證Nginx能正常啟動
在Master故意更改錯Nginx配置文件,並停止Nginx服務過幾秒查看VIP是否已經移動至NodeB,正常是會移動到NodeB節點
恢復Master節點,查看VIP是否回到Master,正常VIP會綁定到Master
小知識:
查看VIP使用:ip addr 命令
keepalived日誌默認記錄在:/var/log/messages
最後關於Nginx配置文件同步問題,我只說明了一下思路,不作演示,可以參考我自動運維上關文章, 我們可以使用salt來管理Nginx的配置文件,這樣就可以做到指的更新,這樣就解決了我們多臺Nginx配置文件同步問題
本文出自 “藍色_風暴” 博客,請務必保留此出處http://270142877.blog.51cto.com/12869137/1969359
Nginx+Keepalive高可用之主從配置