1. 程式人生 > >Centos7.5 配置 Nginx+Keepalived 搭建高可用負載均衡

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

一、系統要求:
[[email protected] ~]# 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目錄,編輯配置檔案。

[[email protected] ~]# yum -y install keepalived

[[email protected] ~]# yum -y install keepalived

3.1.2 [主] 編輯配置檔案:
[[email protected] ~]# vi /etc/keepalived/keepalived.conf

global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
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
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#如果啟動沒成功,就殺掉keepalive觸發主備切換
service keepalived stop
fi
fi
###################################################
增加監控指令碼的執行許可權,設定keepalived開機啟動

chmod +x /etc/keepalived/ck_ng.sh
systemctl enable keepalived.service

####################################################
四、安裝 Nginx
這裡Nginx當做Server使用,方便檢視VIP漂移後的結果

[[email protected] ~]#rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[[email protected] ~]# yum -y install nginx

4.1 設定Nginx開機啟動。

[[email protected] ~]# systemctl enable nginx.service
[[email protected] ~]# service nginx start

4.2 訪問本機檢視nginx是否正常

[[email protected] ~]#curl -i localhost

4.3 修改nginx的預設啟動頁,標識當前主機的IP地址

[[email protected] ~]#vi /usr/share/nginx/html/index.html

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

4.4 雙機熱備高可用測試:
[[email protected] ~]# service keepalived start

4.5 curl 訪問 VIP:
[[email protected] ~]# curl -i 192.168.10.30
此時返回的為主伺服器的Nginx 預設頁面。

4.6 重啟主伺服器或停止keepalived 服務。
[[email protected] ~]#reboot

[[email protected] ~]#service keepalived stop

4.7 再訪問 VIP 地址
[[email protected] ~]# curl -i 192.168.10.30
這個時候可以看到返回的內容已經變為備份伺服器的nginx預設頁192.168.10.20 說明VIP已經從主伺服器漂移到了備份伺服器。

如果你使用reboot命令重啟了伺服器,過了一會之後再次訪問VIP,發現又返回192.168.10.10 的頁面內容,因為主伺服器已經重啟完成,keepalived啟動之後會重新把vip搶佔回來。

在測試過程中,可以檢視伺服器是否已繫結上vip,使用命令。

[[email protected] ~]ip add

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

結束。