centos環(huán)境下nginx高可用集群的搭建指南
1.概述
nginx單機部署時,一旦宕機就會導致整個服務的不可用,導致雪崩式效應。集群式部署是解決單點式雪崩效應的有效方案,本文將在centos環(huán)境下,結合Keepalived搭建高可用的nginx集群。
2.CentOS中nginx集群搭建
2.1 集群架構圖
當客戶端請求服務器時,若利用nginx作為代理,則會首先訪問nginx服務器,再通過nginx服務器轉發(fā)到對應的服務器上。上述架構圖的原理是:nginx-01和nginx-02是兩臺nginx服務器,其中nginx-01作為主服務器,通過keepalived與nginx-02形成一個小集群,同時還可以與nginx-03、nginx-04…nginx-n等多臺服務器構成集群。當nginx-01因為某些原因宕機而停止服務時,其它nginx服務器會選舉一個進行替代,使整個服務保持正常的運行。
2.2 Keepalived
Keepalived是一款基于vrrp協(xié)議的高可用集群軟件,通過虛擬IP(VIP)對外提供服務,能夠實時監(jiān)控集群中服務器的運行狀態(tài)并自動進行故障隔離,這些服務器都啟動著相同的服務,當主服務器發(fā)生故障時,會自動將虛擬IP漂移到備份服務器,從而實現(xiàn)業(yè)務高可用。
2.3 集群搭建準備
1.需要兩臺nginx服務器
2.需要keepalived
3.需要虛擬ip
2.4 集群搭建
2.4.1 安裝keepalived
分別在了兩臺虛擬機上,利用yum指令安裝keepalived,指令如下:
yum install keepalived
可以利用下述指令確認是否安裝成功,成功的話則會顯示版本號,具體如下:
rpm -q -a keepalived
若非特別指定安裝目錄,則在centos的安裝路徑如下:
/etc/keepalived
2.4.2 配置keepalived.conf
由于是主從配置,在主服務器中,找到keepalived.conf的文件,進行替換,該文件存儲于/etc/keepalived路徑下,找到后替換為如下內(nèi)容:
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.129 smtp_connect_timeout 30 router_id LVS_DEVEL # LVS_DEVEL這字段在/etc/hosts文件中看;通過它訪問到主機 } vrrp_script chk_http_ port { script "/usr/local/src/nginx_check.sh" interval 2 # (檢測腳本執(zhí)行的間隔)2s weight 2 #權重,如果這個腳本檢測為真,服務器權重+2 } vrrp_instance VI_1 { state MASTER # 備份服務器上將MASTER 改為BACKUP interface ens33 #網(wǎng)卡名稱,可查看對應服務器的網(wǎng)卡 virtual_router_id 51 # 主、備機的virtual_router_id必須相同 priority 100 #主、備機取不同的優(yōu)先級,主機值較大,備份機值較小 advert_int 1 #每隔1s發(fā)送一次心跳 authentication { # 校驗方式, 類型是密碼,密碼1111 auth type PASS auth pass 1111 } virtual_ipaddress { # 虛擬ip 192.168.200.50 // VRRP H虛擬ip地址 } }
備份服務器的keepalived.conf替換為:
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.129 smtp_connect_timeout 30 router_id LVS_DEVEL # LVS_DEVEL這字段在/etc/hosts文件中看;通過它訪問到主機 } vrrp_script chk_http_ port { script "/usr/local/src/nginx_check.sh" interval 2 # (檢測腳本執(zhí)行的間隔)2s weight 2 #權重,如果這個腳本檢測為真,服務器權重+2 } vrrp_instance VI_1 { state MASTER # 備份服務器上將MASTER 改為BACKUP interface ens33 #網(wǎng)卡名稱,可查看對應服務器的網(wǎng)卡 virtual_router_id 51 # 主、備機的virtual_router_id必須相同 priority 10 #主、備機取不同的優(yōu)先級,主機值較大,備份機值較小 advert_int 1 #每隔1s發(fā)送一次心跳 authentication { # 校驗方式, 類型是密碼,密碼1111 auth type PASS auth pass 1111 } virtual_ipaddress { # 虛擬ip 192.168.200.50 // VRRP H虛擬ip地址 } }
2.4.3 編寫nginx監(jiān)測腳本
文件保存為bash類型,命名為:nginx_check.sh,也可以自定義文件名稱,腳本內(nèi)容如下:
#! /bin/bash A=`ps -C nginx -no-header | wc - 1` if [ $A -eq 0];then /usr/local/nginx/sbin/nginx sleep 2 if [`ps -C nginx --no-header| wc -1` -eq 0 ];then killall keepalived fi fi
腳本可根據(jù)喜好來自定義文件夾存放,我這里存放于/usr/local/src/nginx_check.sh,注意一點的是,腳本存放的路徑必須與keepalived.conf中配置的腳本文件路徑一致。腳本路徑更改,則keepalived.conf中的路徑也要修改。
2.4.4 啟動keepalived
分別在兩臺服務器上執(zhí)行如下指令:
systemctl start keepalived.service
查看keepalived進程是否運行,
ps -ef|grep keepalived
若運行成功,則會出現(xiàn)以下界面:
2.4.5 啟動nginx
在主服務器和從服務器上,分別利用nginx啟動命令啟動nginx服務,在nginx安裝目錄下執(zhí)行如下指令:
./nginx
2.4.6 測試
1測試方案如下
(1)關閉主服務器上的nginx
在nginx安裝目錄下執(zhí)行如下指令:
./nginx -s stop
(2)訪問虛擬ip
在外部瀏覽器輸入:
192.168.200.50:80
若能正常彈出nginx歡迎頁面,則表明集群搭建成功,主服務器nginx宕機后,從服務器會代替服務。
3.小結
1.本文利用兩臺服務器模擬nginx集群狀態(tài),當nginx master宕機后,從服務器會代替服務;
2.模擬集群關鍵三要素:keepalived、監(jiān)測腳本、虛擬ip;
3.在某些情況下,需要為腳本添加可執(zhí)行權限,指令如下:
chmod +x /usr/local/src/nginx_check.sh #腳本地址根據(jù)實際情況而定
4.參考文獻
1.https://www.bilibili.com/video/BV1zJ411w7SV?t=85&p=1
2.https://juejin.cn/post/6844903956192182285
3.https://juejin.cn/post/6844903929738854413
4.https://juejin.cn/post/6844903585449246733
總結
到此這篇關于centos環(huán)境下nginx高可用集群搭建的文章就介紹到這了,更多相關nginx高可用集群搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
nginx 配置靜態(tài)緩存及靜態(tài)緩存文件沒有生成的問題及解決方案
這篇文章主要介紹了nginx 配置靜態(tài)緩存及靜態(tài)緩存文件沒有生成的問題及解決方案,本文分步驟結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-11-11Nginx端口被占用的解決方案(systemctl restart nginx失敗)
ginx (engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器,它也是一種輕量級的Web服務器,可以作為獨立的服務器部署網(wǎng)站(類似Tomcat),本文給大家介紹了NGINX啟動報錯,端口被占用解決方案,需要的朋友可以參考下2024-10-10nginx?rewrite?用法如何使用rewrite去除URL中的特定參數(shù)
日常服務中經(jīng)常會用Nginx做一層代理轉發(fā),把Nginx當做前置機,這篇文章主要介紹了nginx?rewrite?用法如何使用rewrite去除URL中的特定參數(shù),需要的朋友可以參考下2024-02-02