首頁 > 軟體

centos環境下nginx高可用叢集的搭建指南

2022-07-20 14:03:27

1.概述

nginx單機部署時,一旦宕機就會導致整個服務的不可用,導致雪崩式效應。叢集式部署是解決單點式雪崩效應的有效方案,本文將在centos環境下,結合Keepalived搭建高可用的nginx叢集。

2.CentOS中nginx叢集搭建

2.1 叢集架構圖

當用戶端請求伺服器時,若利用nginx作為代理,則會首先存取nginx伺服器,再通過nginx伺服器轉發到對應的伺服器上。上述架構圖的原理是:nginx-01和nginx-02是兩臺nginx伺服器,其中nginx-01作為主伺服器,通過keepalived與nginx-02形成一個小叢集,同時還可以與nginx-03、nginx-04…nginx-n等多臺伺服器構成叢集。當nginx-01因為某些原因宕機而停止服務時,其它nginx伺服器會選舉一個進行替代,使整個服務保持正常的執行。

2.2 Keepalived

Keepalived是一款基於vrrp協定的高可用叢集軟體,通過虛擬IP(VIP)對外提供服務,能夠實時監控叢集中伺服器的執行狀態並自動進行故障隔離,這些伺服器都啟動著相同的服務,當主伺服器發生故障時,會自動將虛擬IP漂移到備份伺服器,從而實現業務高可用。

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路徑下,找到後替換為如下內容:

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   # (檢測指令碼執行的間隔)2s
	weight 2  #權重,如果這個指令碼檢測為真,伺服器權重+2
}

vrrp_instance VI_1 {
	state MASTER   # 備份伺服器上將MASTER 改為BACKUP
	interface ens33 #網路卡名稱,可檢視對應伺服器的網路卡
	virtual_router_id 51 # 主、備機的virtual_router_id必須相同
	priority 100   #主、備機取不同的優先順序,主機值較大,備份機值較小
	advert_int 1	#每隔1s傳送一次心跳
	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   # (檢測指令碼執行的間隔)2s
	weight 2  #權重,如果這個指令碼檢測為真,伺服器權重+2
}

vrrp_instance VI_1 {
	state MASTER   # 備份伺服器上將MASTER 改為BACKUP
	interface ens33 #網路卡名稱,可檢視對應伺服器的網路卡
	virtual_router_id 51 # 主、備機的virtual_router_id必須相同
	priority 10   #主、備機取不同的優先順序,主機值較大,備份機值較小
	advert_int 1	#每隔1s傳送一次心跳
	authentication {	# 校驗方式, 型別是密碼,密碼1111
        auth type PASS
        auth pass 1111
    }
	virtual_ipaddress { # 虛擬ip
		192.168.200.50 // VRRP H虛擬ip地址
	}
}

2.4.3 編寫nginx監測指令碼

檔案儲存為bash型別,命名為:nginx_check.sh,也可以自定義檔名稱,指令碼內容如下:

#! /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

指令碼可根據喜好來自定義資料夾存放,我這裡存放於/usr/local/src/nginx_check.sh,注意一點的是,指令碼存放的路徑必須與keepalived.conf中設定的指令碼檔案路徑一致。指令碼路徑更改,則keepalived.conf中的路徑也要修改。

2.4.4 啟動keepalived

分別在兩臺伺服器上執行如下指令:

systemctl start keepalived.service

檢視keepalived程序是否執行,

ps -ef|grep keepalived

若執行成功,則會出現以下介面:

2.4.5 啟動nginx

在主伺服器和從伺服器上,分別利用nginx啟動命令啟動nginx服務,在nginx安裝目錄下執行如下指令:

./nginx

2.4.6 測試

1測試方案如下

(1)關閉主伺服器上的nginx

在nginx安裝目錄下執行如下指令:

./nginx -s stop

(2)存取虛擬ip

在外部瀏覽器輸入:

192.168.200.50:80

若能正常彈出nginx歡迎頁面,則表明叢集搭建成功,主伺服器nginx宕機後,從伺服器會代替服務。

3.小結

1.本文利用兩臺伺服器模擬nginx叢集狀態,當nginx master宕機後,從伺服器會代替服務;

2.模擬叢集關鍵三要素:keepalived、監測指令碼、虛擬ip;

3.在某些情況下,需要為指令碼新增可執行許可權,指令如下:

chmod +x /usr/local/src/nginx_check.sh #指令碼地址根據實際情況而定

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環境下nginx高可用叢集搭建的文章就介紹到這了,更多相關nginx高可用叢集搭建內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com