前言
今天通過兩個實戰案例,帶大家理解Nginx+keepalived
如何實現高可用集群,在學習新知識之前您可以選擇性複習之前的知識點:
Nginx+Keepalived 高可用集群(主從模式)
集群架構圖
注意:Keepalived服務器同樣是nginx負載均衡器。
1、準備四臺機器
本實驗系統均使用Centos 7.5,在所有節點進行以下操作:
// 查看操作系統
[root@LB-01 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
//關閉並禁用防火牆
[root@LB-01 ~]# systemctl stop firewalld
[root@LB-01 ~]# systemctl disable firewalld
//關閉selinux
[root@LB-01 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
[root@LB-01 ~]# setenforce 0
//安裝nginx
yum -y install nginx
若提示,無安裝包,則需要安裝epel擴展源:
yum -y install epel-release
2、配置後端web服務器
2.1)修改web01節點網站根目錄默認文件
[root@web01 ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html
2.2)修改web02節點網站根目錄默認文件
[root@web01 ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html
通過nginx主配置文件,可以看出nginx網站根目錄文件默認是:
/usr/share/nginx
,如下:
2.3)啟動nginx服務
//web01
[root@web01 ~]# systemctl start nginx
//web02
[root@web02 ~]# systemctl start nginx
2.4)驗證
主機web01和web02已配置成web服務器
3、配置LB服務器
LB服務器需同時部署nginx和Keepalived服務,以下操作均在兩臺LB
節點執行:
3.1)配置nginx反向代理服務
編輯nginx主配置文件:`/etc/nginx/nginx.conf`
啟動nginx服務;驗證效果:
訪問LB01:
訪問LB02:
如圖所示,LB01和LB02均可輪詢訪問後端web節點,即表示nginx LB集群搭建成功。
3.2)配置Keepalived服務
(1)安裝Keepalived
yum -y install keepalived
(2)配置Keepalived服務
這裡直接提供LB01與LB02兩者配置文件差異對比,方便讀者閱讀:
vim /etc/keepalived/keepalived.con
(3)誰是主Keepalived?
通過上圖得知,LB01優先級高於LB02,因此VIP綁定在LB01上:
[root@LB-01 ~]# ip a | grep 192.168.1.110
inet 192.168.1.110/24 scope global secondary eth0:1
4、域名解析
由於不是真實環境,域名使用www.test.com
用作測試,所以www.test.com的解析只能在客戶機hosts文件設置。具體步驟如下:
打開:
C:\Windows\System32\drivers\etc\hosts
在末尾添加:
192.168.1.110 www.test.com
注意:這裡的IP指定的是浮動IP,即通過客戶端通過VIP訪問web業務
5、測試驗證
關閉LB01節點的keepalived服務。再次訪問:
發現已然可以通過域名進行訪問,只是此時VIP已綁定在LB02上,如下所示:
[root@LB-02 ~]# ip a | grep 192.168.1.110
inet 192.168.1.110/24 scope global secondary eth0:1
[root@LB-02 ~]#
到此,Nginx+Keepalived 高可用集群(主從)就搭建完成了。
Nginx+Keepalived 高可用集群(雙主模式)
將keepalived做成雙主模式,其實很簡單,就是再配置一段新的vrrp_instance(實例)規則。
集群架構圖:
說明:還按照上面的環境繼續做實驗,只是修改LB節點上面的keepalived服務的配置文件即可。
此時LB-01節點既為Keepalived的主節點也為備節點,LB-02節點同樣既為Keepalived的主節點也為備節點。
LB-01節點默認的主節點VIP(192.168.1.110),LB-02節點默認的主節點VIP(192.168.1.210)
1、配置 LB-01 節點
增加一段vrrp_instance VI_2實例規則:
vim /etc/keepalived/keepalived.conf
2、配置 LB02 節點
vim /etc/keepalived/keepalived.conf
3、重啟Keepalived服務
//LB-01
[root@LB-01 ~]# systemctl restart keepalived
//LB-02
[root@LB-02 ~]# systemctl restart keepalived
4、查看VIP綁定情況
//LB-01
[root@LB-01 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq
inet 192.168.1.31/24 brd 10.43.1.255 scope global eth0
inet 192.168.1.110/24 scope global secondary eth0:1
//LB-02
[root@LB-02 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq
inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0
inet 192.168.1.210/24 scope global secondary eth0:2
5、高可靠驗證
停止LB-01節點的keepalived再次測試
此時VIP都綁定在LB-02上
[root@LB-02 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq
inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0
inet 192.168.1.110/24 scope global secondary eth0:1
inet 192.168.1.210/24 scope global secondary eth0:2
測試可以發現我們訪問keepalived中配置的兩個VIP都可以正常調度,當我們停止任意一臺keepalived節點,同樣還是正常訪問;到此,nginx+keepalived+高可用集群(雙主模式)就搭建完成了。
編寫Nginx Web服務的守護腳本
以上實驗測試有一個問題就是,我們是用Nginx做負載均衡分發請求的數據包的。如果主節點的Keepalived服務正常運行,而Nginx運行異常,那麼將會出現Nginx負載均衡服務失靈,無法切換到Nginx負載均衡器02上,後端的Web服務器無法收到請求。所以,我們應該要檢測Nginx的服務是否正常運行,如果不是正常運行,應該停掉Keepalived的服務,這樣才能自動切換到備節點上。
我們可以通過檢測80端口是否開啟來判定Nginx的運行情況,2秒鐘檢測一次,腳本如下:
#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
/etc/init.d/keepalived stop
fi
sleep 2
done
結語
歡迎關注微信公眾號『開源Linux
』,專注於分享Linux/Unix相關內容,包括Linux運維、Linux系統開發、網絡編程、以及虛擬化和雲計算等技術乾貨。後臺回覆『學習
』,送你一套學習Linux的系列書籍,期待與你相遇。