Nginx+keepalived雙機熱備
Nginx+keepalived雙機熱備
標籤(空格分隔):linux,nginx,keepalived
Keepalived介紹
Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived可以用來防止伺服器單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,通過配合Nginx可以實現web前端服務的高可用。
Keepalived實現的基礎是VRRP協議,Keepalived就是巧用VRRP協議來實現高可用性(HA)的.
VRRP(Virtual Router Redundancy Protocol)協議是用於實現路由器冗餘的協議,VRRP協議將兩臺或多臺路由器裝置虛擬成一個裝置,對外提供虛擬路由器ip(一個或多個),而在路由器組內部,如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER,或者是通過演算法選舉產生,MASTER實現針對虛擬路由器IP的各種網路功能,如arp請求,ICMP,以及資料的轉發等;其他裝置不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告資訊外,不執行對外的網路功能。當主機失效時,BACKUP將接管原先MASTER的網路功能。
VRRP協議使用多播資料來傳輸VRRP資料,VRRP資料使用特殊的虛擬源MAC地址傳送資料而不是自身網絡卡的MAC地址,VRRP執行時只有MASTER路由器定時傳送VRRP通告資訊,表示MASTER工作正常以及虛擬路由器IP(組),BACKUP只接收VRRP資料,不傳送資料,如果一定時間內沒有接收到MASTER的通告資訊,各BACKUP將宣告自己成為MASTER,傳送通告資訊,重新進行MASTER選舉狀態。
安裝Keepalived
cd /home wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz tar -zxvf keepalived-1.2.18.tar.gz cd keepalived-1.2.18/ ./configure --prefix=/usr/local/keepalived make && make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 複製keepalived啟動檔案到預設路徑,也可以通過設定環境變數的path實現 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ 複製服務啟動指令碼到,以便可以通過service控制keepalived服務 cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 複製keepalived服務指令碼到預設的地址,也通過修改init.d/keepalived檔案中的相應配置實現 mkdir -p /etc/etc/keepalived/ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ vi /etc/keepalived/keepalived.conf 複製預設配置檔案到預設路徑,其實也可以在/etc/init.d/keepalived中設定路徑 chkconfig keepalived on 開機啟動服務
環境
主: 192.168.135.128 從: 192.168.135.143 虛擬IP: 192.168.135.211
主伺服器配置
global_defs { # 路由節點 host對應 127.0.0.1nginx_master router_id nginx_master } vrrp_script chk_http_port { script "/usr/local/keepalived/nginx.sh"#在這裡新增指令碼連結 interval 2#指令碼執行間隔 weight -20#指令碼結果導致的優先順序變更 } vrrp_instance VI_NODE { state MASTER interface eth0 virtual_router_id 100 mcast_src_ip 192.168.135.128# 主 ip priority 100# 初始值權重 advert_int 1 authentication { auth_type PASS auth_pass 123456 } track_script { chk_http_port#新增指令碼執行 } virtual_ipaddress { 192.168.135.211 # 虛擬IP } }
從伺服器配置
global_defs { # 路由節點 路由節點 host對應 127.0.0.1nginx_slave router_id nginx_slave } vrrp_script chk_http_port { script "/usr/local/keepalived/nginx.sh"#在這裡新增指令碼連結 interval 2#指令碼執行間隔 weight -20#指令碼結果導致的優先順序變更 } vrrp_instance VI_NODE { state BACKUP interface eth1# 網絡卡 ip a 檢視 virtual_router_id 100 mcast_src_ip 192.168.135.143 # 從IP priority 80# 初始值權重 advert_int 1 authentication { auth_type PASS# 驗證方式 auth_pass 123456 # 密碼 } track_script { chk_http_port#新增指令碼執行 } virtual_ipaddress { 192.168.135.211# 虛擬IP } }
nginx.sh
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #nginx命令的路徑 sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
注意點:
1 虛擬ip要根據網絡卡設定

2 nginx.sh 加許可權chmod +x /nginx.sh 3 priority 80 這個權重注意下
效果
1 開啟主和從的keep和nginx service keepalived start ./nginx
2 關閉主nginx服務