keepalived+Nginx實現(xiàn)高可用集群配置
首先準備兩臺機器,每個機器都安裝有 keepalived 以及 Nginx,nginx 反向代理兩個 tomcat 實現(xiàn)負載均衡,所以每個機器上安裝docker 以及 tomcat。
1. 配置 Keepalived
1.1 配置 MASTER
第一步:修改 /etc/hosts 文件, 添加:
127.0.0.1 KEEPALIVED_NGINX_MASTER
第二步:將 KEEPALIVED_NGINX_MASTER 配置到 router_id
第三步:注釋掉 vrrp_strict
第四步 :配置 vrrp_instance 的 interface

所以將 interface ens33
第五步:配置 vrrp_instance 的 state 為 MASTER
第六步:配置 virtual_ipaddress
192.168.214.99
全部配置如下:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id KEEPALIVED_NGINX_MASTER
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.214.99
}
}1.2 配置 BACKUP
第一步:修改 /etc/hosts 文件, 添加:
127.0.0.1 KEEPALIVED_NGINX_BACKUP
第二步:將 KEEPALIVED_NGINX_BACKUP 配置到 router_id
第三步:配置 vrrp_instance 的 state 為 BACKUP
第四步:配置 vrrp_instance 的 statepriority 為 50
其他的配置和 MASTER 保持一致
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id KEEPALIVED_NGINX_BACKUP
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.214.99
}
}2. 測試 Keepalived
兩臺機器的 Nginx 訪問頁面:


通過 Keepalived 虛擬 ip 訪問:

宕掉 MASTER :

3. 通過 shell 腳本優(yōu)化 keepalived+Nginx 高可用集群
實際情況中 keepalived 不容易掛掉,而容易掛掉的是nginx。
此時的問題是如果 nginx 掛了,但是 keepavlied 沒掛,這時候依然可以訪問機器但是訪問不到服務(wù)。
3.1 優(yōu)化步驟
所以通過 keepalived 的 vrrp_script 配置,來調(diào)用自定義shell腳本。
#!/bin/bash
echo 'xxxxxx'
count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`
echo $count_nginx
if [ $count_nginx -eq 0 ];then
systemctl start nginx.service
sleep 2
if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then
systemctl stop keepalived.service
fi
fi這個 shell 腳本的作用是統(tǒng)計 nginx 進程數(shù),假如是 0 個 說明 Nginx 掛掉了,那就啟動 nginx,等2秒,再統(tǒng)計,假如還是0,說明nginx啟動失敗,就把宕掉 keepalived 切換備份機器,假如不是0,說明啟動成功,那就繼續(xù)運行;
第一步:上面 shell 腳本命名 nginx_check.sh 文件,存/shell/目錄下;
第二步:配置 keepalived.conf;
vrrp_script chk_http_port {
script "/shell/nginx_check.sh" #腳本地址
interval 2 #檢測腳本執(zhí)行的間隔
weight 2 #比重
}第三步:重啟 keepalived
到此這篇關(guān)于keepalived+Nginx實現(xiàn)高可用集群配置的文章就介紹到這了,更多相關(guān)keepalived Nginx 高可用集群 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx日志輪轉(zhuǎn)與定時啟動腳本的實現(xiàn)
本文主要介紹了Nginx日志輪轉(zhuǎn)與定時啟動腳本的實現(xiàn),通過批處理腳本rotate-logs.bat實現(xiàn)日志輪轉(zhuǎn),使用start-nginx.bat啟動和重啟Nginx服務(wù),借助Windows任務(wù)計劃程序每日凌晨自動執(zhí)行日志輪轉(zhuǎn),確保Nginx服務(wù)正常啟動,感興趣的可以了解一下2026-04-04

