目錄
項(xiàng)目架構(gòu)
一,環(huán)境介紹
二,項(xiàng)目部署
在Web服務(wù)器上配置Web測(cè)試頁(yè)面
nginx負(fù)載均衡配置
配置Nginx_Master
通過(guò)vrrp_script實(shí)現(xiàn)對(duì)集群資源的監(jiān)控(1>通過(guò)killall命令探測(cè)服務(wù)運(yùn)行狀態(tài))
通過(guò)vrrp_script實(shí)現(xiàn)對(duì)集群資源的監(jiān)控(2、開(kāi)發(fā)檢測(cè)nginx存活的shell腳本)
三,項(xiàng)目測(cè)試
四,實(shí)現(xiàn)不搶占模式
項(xiàng)目架構(gòu)
Nginx+Keepalived實(shí)現(xiàn)高可用
在?Keepalived?+ Nginx 高可用負(fù)載均衡架構(gòu)中,keepalived 負(fù)責(zé)實(shí)現(xiàn)高可用。它是一個(gè)高性能的服務(wù)器高可用或者熱備解決方案,Keepalived主要來(lái)防止服務(wù)器單點(diǎn)故障的發(fā)生問(wèn)題,可以通過(guò)其與Nginx的配合實(shí)現(xiàn)Web服務(wù)器端的高可用。使用keepalived可以保證nginx的高可用,他能監(jiān)控nginx的健康狀態(tài),當(dāng)nginx出現(xiàn)宕機(jī)時(shí)自動(dòng)主備切換。
一,環(huán)境介紹
服務(wù)器名稱 | IP | 用途 |
Nginx_Master | 172.16.90.111 | 提供負(fù)載均衡 |
Nginx_Backup | 172.16.90.112 | 提供負(fù)載均衡 |
LVS-DR-VIP | 172.16.90.200 | 網(wǎng)站的VIP地址 |
Web1服務(wù)器 | 172.16.90.113 | 提供Web服務(wù) |
Web2服務(wù)器 | 172.16.90.114 | 提供Web服務(wù) |
二,項(xiàng)目部署
在后端服務(wù)器上配置Web測(cè)試頁(yè)面
web01配置:
cd /usr/share/nginx/html/
echo "web test page,`hostname -I`." > index.html
systemctl restart nginx
web02配置同上
nginx負(fù)載均衡配置
nginx_master/backup做同樣配置
1、安裝nginx
yum install http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm
?2、配置nginx反向代理
[root@nginx_master ~]# cd /etc/nginx/conf.d/
[root@nginx_master conf.d]# mv default.conf{,.bak}
[root@nginx_master conf.d]# vim web.conf
upstream webpools {
server 172.16.90.113;
server 172.16.90.114;
}
server {
location / {
proxy_pass http://webpools;
index index.html;
}
}
3,重啟nginx服務(wù),并測(cè)試訪問(wèn)nginx
nginx -t
systemctl restart nginx
客戶端訪問(wèn)測(cè)試負(fù)載均衡:
for ((i=1;i<=10;i++)); do curl 172.16.90.111; done
配置Nginx_Master
安裝keepalived
yum install keepalived -y
通過(guò)vrrp_script實(shí)現(xiàn)對(duì)集群資源的監(jiān)控(1>通過(guò)killall命令探測(cè)服務(wù)運(yùn)行狀態(tài))
配置keepalived
vim /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
script "killall -0 nginx"
#script "</dev/tcp/127.0.0.1/80"
#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"
#script "/etc/keepalived/check_nginx.sh"
interval 2 //間隔時(shí)間,單位為秒,默認(rèn)1秒
fall 2 //腳本幾次失敗轉(zhuǎn)換為失敗
rise 1 //腳本連續(xù)監(jiān)測(cè)成果后,把服務(wù)器從失敗標(biāo)記為成功的次數(shù)
}
vrrp_instance VI_1 {
state MASTER
interface ens32 //填你對(duì)應(yīng)的網(wǎng)卡名稱
virtual_router_id 51
priority 150 //默認(rèn)100,改大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/fault.sh"
track_script{
chk_nginx
}
virtual_ipaddress {
172.16.90.200/24 dev ens32
}
}
相關(guān)參數(shù)說(shuō)明:
notify的用法:
notify_master:當(dāng)當(dāng)前節(jié)點(diǎn)成為master時(shí),通知腳本執(zhí)行任務(wù)(一般用于啟動(dòng)某服務(wù),比如 nginx,haproxy等)
notify_backup:當(dāng)當(dāng)前節(jié)點(diǎn)成為backup時(shí),通知腳本執(zhí)行任務(wù)(一般用于關(guān)閉某服務(wù),比如nginx,haproxy等)
notify_fault:當(dāng)當(dāng)前節(jié)點(diǎn)出現(xiàn)故障,執(zhí)行的任務(wù);
根據(jù)提供的路徑腳本路徑,編寫(xiě)提供日志記錄的腳本:
vim /etc/keepalived/master.sh
#!/bin/bash
LOGFILE=/etc/keepalived/nginx_state.log
echo "[master]" >> $LOGFILE
date >> $LOGFILE
vim /etc/keepalived/backup.sh
#!/bin/bash
LOGFILE=/etc/keepalived/nginx_state.sh
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
vim /etc/keepalived/fault.sh
#!/bin/bash
LOGFILE=/etc/keepalived/nginx_state.log
echo "[dault]" >> $LOGFILE
date >> $LOGFILE
給文件賦予執(zhí)行權(quán)限
chmod +x /etc/keepalived/*.sh
Nginx_Backup配置同上
通過(guò)vrrp_script實(shí)現(xiàn)對(duì)集群資源的監(jiān)控(2、開(kāi)發(fā)檢測(cè)nginx存活的shell腳本)
vim /etc/keepalived/check_nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl start nginx
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
then
systemctl stop keepalived
fi
fi
給文件賦予執(zhí)行權(quán)限
chmod +x /etc/keepalived/*.sh
配置keepalived
vim /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
#script "killall -0 nginx"
#script "</dev/tcp/127.0.0.1/80"
#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"
script "/etc/keepalived/check_nginx.sh"
interval 2
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface ens32 //填你對(duì)應(yīng)的網(wǎng)卡名稱
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/fault.sh"
track_script{
chk_nginx
}
virtual_ipaddress {
172.16.90.200/24 dev ens32
}
}
Nginx_Backup配置文件
vrrp_script chk_nginx {
#script "killall -0 nginx"
#script "</dev/tcp/127.0.0.1/80"
#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"
script "/etc/keepalived/check_nginx.sh"
interval 2
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP //改這里喲
interface ens32 //填你對(duì)應(yīng)的網(wǎng)卡名稱
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/fault.sh"
track_script{
chk_nginx
}
virtual_ipaddress {
172.16.90.200/24 dev ens32
}
}
三,項(xiàng)目測(cè)試
重啟主從調(diào)度的nginx和keepalived
[root@nginx_master ~]# systemctl restart nginx keepalived
[root@nginx_backup ~]# systemctl restart nginx keepalived
Master,Backup都正常,只有Master對(duì)外提供服務(wù)
[root@nginx_master ~]# ip a | grep "172.16.90.200"
inet 172.16.90.200/24 scope global ens32
Master宕機(jī),Backup接替Master對(duì)外提供服務(wù)
模擬Master的keepalived服務(wù)器停止
[root@nginx_master ~]# systemctl stop keepalived.service
此時(shí)VIP在Backup上
[root@nginx_backup ~]# ip a | grep "172.16.90.200"
inet 172.16.90.200/24 scope global ens32
在客戶機(jī)上驗(yàn)證是否Backup接管后還能實(shí)現(xiàn)負(fù)載均衡
for ((i=1;i<=10;i++)); do curl 172.16.90.200; done
Master恢復(fù)正常,Master繼續(xù)提供服務(wù),Backup停止服務(wù)
模擬Master的keepalived服務(wù)恢復(fù)正常
[root@nginx_master ~]# systemctl start keepalived.service
此時(shí)VIP在Master上
[root@nginx_master ~]# ip a | grep "172.16.90.200"
inet 172.16.90.200/24 scope global ens32
四,實(shí)現(xiàn)不搶占模式
上述主節(jié)點(diǎn)一宕機(jī),備節(jié)點(diǎn)就會(huì)接管,主節(jié)點(diǎn)修復(fù)好了,又會(huì)重新接管服務(wù)。服務(wù)的切換存在一定的風(fēng)險(xiǎn)和不穩(wěn)定性,為了避免生產(chǎn)中多次網(wǎng)絡(luò)抖動(dòng),要實(shí)現(xiàn)不搶占模式
nopreempt 設(shè)置的是高可用集群中的不搶占功能:設(shè)置 nopreempt可以實(shí)現(xiàn)主節(jié)點(diǎn)故障恢復(fù)后不再切回到主節(jié)點(diǎn),讓服務(wù)一直在備用節(jié)點(diǎn)下工作, 直到備用節(jié)點(diǎn)出現(xiàn)故障才會(huì)進(jìn)行切換。在使用不搶占功能時(shí),在“state” 狀態(tài)為 “BACKUP” 的節(jié)點(diǎn)上設(shè)置,而且這個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)必須高于其他節(jié)點(diǎn)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-648774.html
Nginx_Master上文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-648774.html
vim /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
#script "killall -0 nginx"
#script "</dev/tcp/127.0.0.1/80"
#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"
script "/etc/keepalived/check_nginx.sh"
interval 2
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP //原來(lái)的MASTER改為BACKUP
interface ens32 //填你對(duì)應(yīng)的網(wǎng)卡名稱
virtual_router_id 51
priority 100
nopreept //添加這行
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/fault.sh"
track_script{
chk_nginx
}
virtual_ipaddress {
172.16.90.200/24 dev ens32
}
}
到了這里,關(guān)于web集群學(xué)習(xí):nginx+keepalived實(shí)現(xiàn)負(fù)載均衡高可用性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!