天天看點

Centos7.5 配置 Nginx+Keepalived 搭建高可用負載均衡

一、系統要求:

[root@linux-node1 ~]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

二、IP 位址規劃:

主機名 IP VIP

linux-node1 192.168.10.10 192.168.10.30

linux-node1 192.168.10.20

三、安裝部署:

3.1 安裝Keepalived(兩台伺服器步驟相同,隻有細微的配置差别):

3.1.1 建立etc下的keepalived目錄,編輯配置檔案。

[root@linux-node1 ~]# yum -y install keepalived

[root@linux-node2 ~]# yum -y install keepalived

3.1.2 [主] 編輯配置檔案:

[root@linux-node1 ~]# vi /etc/keepalived/keepalived.conf

global_defs {

notification_email {br/>[email protected]

}

notification_email_from Keepalived@localhost

smtp_server [email protected]

smtp_connect_timeout 30

router_id 192.168.0.70

#配置vrrp_script,主要用于健康檢查,以及檢查失敗後執行的動作。

vrrp_script chk_nginx {

#健康檢查腳本,當腳本傳回值不為0時認為失敗

script "/etc/keepalived/ck_ng.sh"

#檢查頻率,以下配置每2秒檢查1次

interval 2

#當檢查失敗後,将vrrp_instance的priority減小5

weight -5

#連續監測失敗3次,才認為真的健康檢查失敗。并調整優先級

fall 3

#連續監測2次成功,就認為成功。但不調整優先級

rise 2

#定義對外提供服務的VIP vrrp_instance配置

vrrp_instance VI_1 {

#指定vrrp_instance的初始狀态,是MASTER還是BackUP主要還是看優先級。

state MASTER

#指定vrrp_instance綁定的網卡,最終會通過指定的網卡宣告VIP

interface eth0

#發送心跳包的源IP,可使用綁定的網卡IP,也可以使用本伺服器上的其他IP

mcast_src_ip 192.168.10.10

#相當于VRID,用于在一個網内區分多點傳播,需要多點傳播域内内唯一。

virtual_router_id 55

#本機的優先級,VRID相同的機器中,優先級最高的會被選舉為MASTER

priority 100

#心跳間隔,下面配置,MASTER會每隔1秒發送一個封包高職組内其他機器,自己還活着。

advert_int 1

#定義主從的驗證方式以及密碼,一般使用PASS(最長8位,超過了隻會識别前8位作為密碼)

authentication {

auth_type PASS

auth_pass 123456

#VIP

virtual_ipaddress {

192.168.10.30/24

#本vrrp_instance所引用的腳本配置,名稱就是vrrp_script 定義的容器名

track_script {

chk_nginx

#狀态切換,使用上述配置發送郵件通知

smtp_alert

#################################################

3.1.3 BACKUP伺服器的配置需要幾處修改:

state MASTER改為 state BACKUP

mcast_src_ip 192.168.10.20改為backup伺服器實際的IP mcast_src_ip 192.168.10.30

priority 100改為priority 99

添加Nginx監控腳本,監控Nginx的運作狀态,如果發現異常并不能重新開機成功則關閉Keepalived,讓VIP漂移到備份伺服器.

vi /etc/keepalived/ck_ng.sh

配置内容如下:

#!/bin/bash

#檢查nginx程序是否存在

counter=$(ps -C nginx --no-heading|wc -l)

if [ "${counter}" = "0" ]; then

#嘗試啟動一次nginx,停止5秒後再次檢測

service nginx start

sleep 5

#如果啟動沒成功,就殺掉keepalive觸發主備切換

service keepalived stop

fi

###################################################

增加監控腳本的執行權限,設定keepalived開機啟動

chmod +x /etc/keepalived/ck_ng.sh

systemctl enable keepalived.service

####################################################

四、安裝 Nginx

這裡Nginx當做Server使用,友善檢視VIP漂移後的結果

[root@linux-node1 ~]#rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

[root@linux-node1 ~]# yum -y install nginx

4.1 設定Nginx開機啟動。

[root@linux-node1 ~]# systemctl enable nginx.service

[root@linux-node1 ~]# service nginx start

4.2 通路本機檢視nginx是否正常

[root@linux-node1 ~]#curl -i localhost

4.3 修改nginx的預設啟動頁,辨別目前主機的IP位址

[root@linux-node1 ~]#vi /usr/share/nginx/html/index.html

在Welcome to nginx!後加上IP位址192.168.10.10 ,儲存後再次通路本機檢視是否已經更改.另一台伺服器是同樣的步驟。

4.4 雙機熱備高可用測試:

[root@linux-node1 ~]# service keepalived start

4.5 curl 通路 VIP:

[root@linux-node1 ~]# curl -i 192.168.10.30

此時傳回的為主伺服器的Nginx 預設頁面。

4.6 重新開機主伺服器或停止keepalived 服務。

[root@linux-node1 ~]#reboot

[root@linux-node1 ~]#service keepalived stop

4.7 再通路 VIP 位址

[root@linux-node2 ~]# curl -i 192.168.10.30

這個時候可以看到傳回的内容已經變為備份伺服器的nginx預設頁192.168.10.20 說明VIP已經從主伺服器漂移到了備份伺服器。

如果你使用reboot指令重新開機了伺服器,過了一會之後再次通路VIP,發現又傳回192.168.10.10 的頁面内容,因為主伺服器已經重新開機完成,keepalived啟動之後會重新把vip搶占回來。

在測試過程中,可以檢視伺服器是否已綁定上vip,使用指令。

[root@linux-node1 ~]ip add

結束。

繼續閱讀