前言
今天通過兩個實戰案例,帶大家了解
Nginx+keepalived
如何實作高可用叢集,在學習新知識之前您可以選擇性複習之前的知識點:
給小白的 Nginx 10分鐘入門指南[Nginx編譯安裝及常用指令
](
https://mp.weixin.qq.com/s?__biz=MzI3NzQ4MTE4Mw==&mid=2247484546&idx=1&sn=1e0cc9f63efd08ab6d4fd20cadf948b4&chksm=eb64d732dc135e24b09a5f8170a844c3ffe72de52e30036f941c52966741ea62a645466698e9&token=1752560613&lang=zh_CN&scene=21#wechat_redirect)[Nginx 配置檔案詳解
https://mp.weixin.qq.com/s?__biz=MzI3NzQ4MTE4Mw==&mid=2247484566&idx=1&sn=ca9aca3c9880f676e357b2485c9ecb96&chksm=eb64d726dc135e3095beb47a262fdd42f194f6b1837911ab94c9d631df2dd4a74e9ab9ec0a0f&token=1752560613&lang=zh_CN&scene=21#wechat_redirect) 一文帶你讀懂Nginx反向代理 一文徹底讀懂nginx中的location指令 Nginx負載均衡原理及配置執行個體 Nginx為什麼快到根本停不下來?[Keepalived入門學習
https://mp.weixin.qq.com/s?__biz=MzI3NzQ4MTE4Mw==&mid=2247484956&idx=2&sn=a3ae806f1e32de246cc28adcf3f42771&chksm=eb64d5acdc135cba83b4532ea01ea4a8f99af00b0fbf1593fc314f3c2a7d7c4c0d12a97e1411&token=850336392&lang=zh_CN&scene=21#wechat_redirect) 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的系列書籍,期待與你相遇。