天天看點

實戰 | Nginx+keepalived 實作高可用叢集

前言

今天通過兩個實戰案例,帶大家了解

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的系列書籍,期待與你相遇。

繼續閱讀