Nginx+Keepalived實現高可用
準備資源
2臺Nginx
服務器 | IP | 端口 | 角色 |
---|---|---|---|
Nginx - master | 192.168.1.20 | 80 | MASTER |
Nginx - master - 2 | 192.168.1.200 | 80 | BACKUP |
安裝Keepalived
在2臺Nginx下都安裝Keepalived
yum -y install keepalived
配置Keepalived
主要配置4個地方
主節點配置
修改主Nginx服務器的/etc/keepalived/keepalived.conf文件,內容如下
! Configuration File for keepalived
#全局配置
global_defs {
notification_email { #指定keepalived在發生切換時需要發送email到的對象,一行一個
[email protected]
}
notification_email_from [email protected] #指定發件人
#smtp_server XXX.smtp.com #指定smtp服務器地址
#smtp_connect_timeout 30 #指定smtp連接超時時間
router_id LVS_DEVEL #運行keepalived機器的一個標識
}
vrrp_instance VI_1 {
state MASTER #標示狀態爲MASTER 備份機爲BACKUP
interface ens33 #設置實例綁定的網卡
virtual_router_id 51 #同一實例下virtual_router_id必須相同
priority 100 #MASTER權重要高於BACKUP 比如BACKUP爲99
advert_int 1 #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設置認證
auth_type PASS #主從服務器驗證方式
auth_pass 8888
}
virtual_ipaddress { #設置vip
192.168.1.100 #可以多個虛擬IP,換行即可
}
}
查看ip
備用節點配置
修改備用Nginx服務器的/etc/keepalived/keepalived.conf文件,內容如下
! Configuration File for keepalived
#全局配置
global_defs {
notification_email { #指定keepalived在發生切換時需要發送email到的對象,一行一個
[email protected]
}
notification_email_from [email protected] #指定發件人
#smtp_server XXX.smtp.com #指定smtp服務器地址
#smtp_connect_timeout 30 #指定smtp連接超時時間
router_id LVS_DEVEL #運行keepalived機器的一個標識
}
vrrp_instance VI_1 {
state BACKUP #標示狀態爲MASTER 備份機爲BACKUP
interface ens33 #設置實例綁定的網卡
virtual_router_id 51 #同一實例下virtual_router_id必須相同
priority 99 #MASTER權重要高於BACKUP 比如BACKUP爲99
advert_int 1 #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設置認證
auth_type PASS #主從服務器驗證方式
auth_pass 8888
}
virtual_ipaddress { #設置vip
192.168.1.100 #可以多個虛擬IP,換行即可
}
}
查看ip
只有當主節點的Keepalived停掉時,備用節點纔會生成虛擬ip
配置主從切換
keepalived是通過檢測keepalived進程是否存在判斷服務器是否宕機,如果keepalived進程在但是nginx進程不在了那麼keepalived是不會做主備切換,所以我們需要寫個腳本來監控nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉。
在主nginx上需要編寫nginx進程檢測腳本(check_nginx.sh),判斷nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉
check_nginx.sh內容如下:
#!/bin/bash
# 如果進程中沒有nginx則將keepalived進程kill掉
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx進程 把值賦給變量A
if [ $A -eq 0 ];then ## 如果沒有進程值得爲 零
service keepalived stop ## 則結束 keepalived 進程
fi
添加客執行權限
chmod +x /etc/keepalived/check_nginx.sh
修改主Nginx的配置
添加如下兩段代碼
在vrrp_instance VI_1上面添加下面這段代碼
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" ##監控腳本
interval 2 ##時間間隔,2秒
weight 2 ##權重
}
在virtual_ipaddress上面添加下面這段代碼
track_script {
check_nginx #監控腳本
}
訪問測試
啓動keepalived
service keepalived start
爲了區分主備Nginx,修改一下Nginx主頁
瀏覽器訪問虛擬ip,http://192.168.1.100/
首先進來的是主Nginx
當停掉主Nginx,會訪問到備用Nginx
service nginx stop
再次訪問http://192.168.1.100/,進入到備用Nginx