keepalived + nginx 實現高可用 本篇主要介紹一下 keepalived + nginx 來實現 對於nginx的高可用, 還是簡單的主備模式 1.概述 前面有瞭解keepalived 的主備的基本使用, 但是那種是針對宕機等情況 停止了keepalived 的進程實現的 vip的漂 ...
keepalived + nginx 實現高可用
本篇主要介紹一下 keepalived + nginx 來實現 對於nginx的高可用, 還是簡單的主備模式
1.概述
前面有瞭解keepalived 的主備的基本使用, 但是那種是針對宕機等情況 停止了keepalived 的進程實現的 vip的漂移,本篇把keepalived 添加校驗nginx存活腳本 實現針對nginx的監控, 實現nginx的高可用
2.準備工作
準備2台機器 , 把111定義為 keepalived 的 MASTER 節點
ip | keepalived |
---|---|
172.16.225.111 | MASTER |
172.16.225.110 | BACKUP |
分別在2台伺服器上配置好nginx 並且修改預設的 index.html 添加上 ip 標識方便區分. 如下:
3.配置 keepalived
在keepalived 的配置文件中的 instance 裡面配置 track_script 指定 檢查nginx是否存活的腳本
3.1 master (172.16.225.111)
! Configuration File for keepalived
global_defs {
router_id LB111
}
vrrp_script chk_nginx {
# 具體的腳本
script "/etc/keepalived/nginx_check.sh"
interval 2 # 2s執行一次
weight -20 # 失敗一次 則優先順序 -20
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.225.200
}
# 指定腳本
track_script {
chk_nginx
}
}
3.2 master (172.16.225.110)
! Configuration File for keepalived
global_defs {
router_id LB111
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.225.200
}
track_scrip {
chk_nginx
}
}
4.配置 nginx_check.sh
主要是這個腳本 這個腳本的內容就是 通過ps命令檢查 nginx進程是否存活
,如果不存活 則嘗試啟動一次 則檢查 ,如果還是啟動不起來 則 把keepalived 關閉
, 從而讓 keepalived 能檢測到 並且 vip 能夠漂移到其他機器
#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then
# 嘗試啟動一次
systemctl start nginx
# 再次檢查ngixn 進程
status2=$(ps -C nginx --no-heading|wc -l)
if [ "${status2}" = "0" ]; then
# 關閉 keepalived
systemctl stop keepalived
fi
fi
需要在2台機器上都配置上這個腳本
# 給腳本一個 可執行的許可權
chmode +x /etc/keepalived/nginx_check.sh
# 重啟或者啟動 keepalived
systemctl restart keepalived
5.關閉 selinux
如果重啟後或者啟動後 查看日誌有如下拋錯 , 則是 selinux 沒有關閉
# 臨時關閉
setenforce 0
#永久關閉
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config
6.模擬測試
2台機器 分別啟動nginx 和 keepalived 後
訪問 vip 172.16.225.200 這個vip 目前在 111 master機器上
在master機器上 把ngixn關閉
# 關閉 nginx
./nginx -s stop
# 此時查看 keepalived 的狀態就是 dead了
systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: inactive (dead)
再次訪問vip 172.16.225.200 , 可以看到 vip 已經跑到了 backup機器110上了
總結
本篇主要介紹了 keepalived + nginx 的基本的主備配置 實現了 nginx 的高可用,核心點就是配置 nginx_check.sh腳本給keepalived 的執行, 這個nginx_check.sh 腳本內如果發現nginx 不存活 嘗試啟動 如果還是不存活 則直接關閉 keepalived 進程
歡迎大家訪問 個人博客 Johnny小屋
歡迎關註個人公眾號