LVS負載均衡群集部署——詳細步驟

2020-09-22 13:00:28

一、群集的含義:

  • Cluster,叢集、群集
  • 由多臺主機構成,但對外只表現為一個整體

二、現代企業網路存在的問題:

  • 網際網路應用中,隨著站點對硬體效能、響應速度、服務穩
  • 定性、資料可靠性等要求越來越高,單臺伺服器力不從心

三、解決方法:

  • 使用價格昂貴的小型機、大型電腦
  • 使用普通伺服器構建服務群集

四、根據群集所針對的目標差異,可分為三種型別:

  • 負載均衡群集
  • 高可用群集
  • 高效能運算群集

1. 負載均衡群集(Load Balance Cluster)

  • 提高應用系統的響應能力、儘可能處理更多的存取請求、
  • 減少延遲為目標,獲得高並行、高負載(LB)的整體效能
  • LB的負載分配依賴於主節點的分流演演算法

    2.高可用群集(High Availability Cluster)

  • 提高應用系統的可靠性、儘可能地減少中斷時間為目標,確保服務的連續性,達到高可用(HA)的容錯效果
  • HA的工作方式包括雙工和主從兩種模式

    3.高效能運算群集(High Performance Computer Cluster)

  • 提高應用系統的CPU運算速度、擴充套件硬體資源和分析能力為目標,獲得相當於大型、超級計算機的高效能運算(HPC)能力
  • 高效能依賴於「分散式運算」、「平行計算」,通過專用硬體和軟體將多個伺服器的CPU、記憶體等資源整合在一起,實現只有大型、超級計算機才具備的計算能力

五、負載均衡的結構

  • 第一層,負載排程器(Load Balancer或Director)
  • 第二層,伺服器池(Server Pool)
  • 第三層,共用儲存(Share Storage)

六、負載均衡的網路架構,有三種常見的

1.NAT模式:

  • 地址轉換Network Address Translation,簡稱NAT模式
  • 類似於防火牆的私有網路結構,負載排程器作為所有伺服器節點的閘道器,即作為客戶機的存取入口,也是各節點回應客戶機的存取出口
  • 伺服器節點使用私有IP地址,與負載排程器位於同一個物理網路,安全性要優於其他兩種方式

2. TUN模式:

  • IP隧道lPTunnel,簡稱TUN模式
  • 採用開放式的網路結構,負載排程器僅作為客戶機的存取入口,各節點通過各自的Internet連線直接回應客戶機,而不再經過負載排程器
  • 伺服器節點分散在網際網路中的不同位置,具有獨立的公網IP地址,通過專用IP隧道與負載排程器相互通訊

3.DR模式

  • 直接路由Direct Routing,簡稱DR模式
  • 採用半開放式的網路結構,與TUN模式的結構類似,但各節點並不是分散在各地,而是與排程器位於同一個物理網路
  • 負載排程器與各節點伺服器通過本地網路連線,不需要建立專用的IP隧道

七、關於LVS虛擬伺服器

  • Linux Virtual Server
  • 針對Linux核心的負載均衡解決方案
  • 1998年5月,由我國的章文嵩博士建立
  • 官方網站: http://www.linuxvirtualserver.org/

八、LVS的負載排程演演算法(4種)

1.輪詢(Round Robin)

  • 將收到的存取請求按照順序輪流分配給群集中的各節點(真實伺服器),均等地對待每一臺伺服器,而不管伺服器實際的連線數和系統負載

2.加權輪詢(Weighted Round Robin)

  • 根據排程器設定的權重值來分發請求,權重值高的節點優先獲得任務,分配的請求數越多
  • 保證效能強的伺服器承擔更多的存取流量

3.最少連線(Least Connections)

  • 根據真實伺服器已建立的連線數進行分配,將收到的存取請求優先分配給連線數最少的節點

4.加權最少連線(Weighted Least Connections)

  • 在伺服器節點的效能差異較大時,可以為真實伺服器自動調整權重效能較高的節點將承擔更大比例的活動連線負載

九、LVS群集建立與管理辦法

  1. 建立虛擬伺服器
  2. 新增、刪除伺服器節點
  3. 檢視群集及節點狀況
  4. 儲存分配的策略

十、實驗設計

  1. 載入ip_vs模組,安裝ipvsadm工具
  2. 開啟路由轉發
  3. 新建LVS虛擬伺服器並新增節點伺服器
  4. 搭建NFS共用儲存服務
    4.1 介紹nfs
    ① Network File System,網路檔案系統依賴於RPC(遠端過程呼叫)
    ② 需安裝nfs-utils、rpcbind軟體包
    ③ 系統服務: nfs、rpcbind
    ④ 共用組態檔:/etc/exports
    4.2 使用NFS釋出共用資源
    ① 安裝nfs-utils、rpcbind軟體包
    ② 設定共用目錄
    ③ 啟動NFS服務程式
    ④ 檢視本機發布的NFS共用目錄
    4.3.在客戶機中存取NFS共用資源
    ① 安裝rpcbind軟體包,並啟動rpcbind服務
    ② 手動掛載NFS共用目錄
    ③ fstab自動掛載設定
  5. 設定節點伺服器
    5.1 建立測試網站
    5.2 掛載NFS共用儲存
    5.3 建立測試網頁
  6. 儲存規則並測試

實驗拓撲

在這裡插入圖片描述

1.搭建排程器

[root@localhost network-scripts]# nmcli connection  //檢視UUID號,繫結網路卡
NAME               UUID                                TYPE      DEVICE 
ens33           	    e700afd3-d9d3-4e75-ba0f-1c472d256ce8   ethernet   ens33  
virbr0            	ec8ec847-c505-4e0a-ac6c-a9d1131d768c   bridge     virbr0 
Wired connection 1 	032bc5ee-d4a0-3374-a2a1-8b3079c39070  ethernet   ens36  
[root@localhost network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 20.0.0.11  netmask 255.255.255.0  broadcast 20.0.0.255
		……省略部分
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.11  netmask 255.255.255.0  broadcast 192.168.30.255
        ……省略部分
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -v   //檢視ipvsadm資訊
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
[root@localhost ~]# modprobe ip_vs   //載入ip_vs功能,確認核心對ip_vs的支援
[root@localhost ~]# cat /proc/net/ip_vs   //檢視資訊
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
###############建立虛擬伺服器規則################################
[root@localhost ~]# ipvsadm -A -t 20.0.0.11:80 -s rr
##############新增Web伺服器節點規則##############################
[root@localhost ~]# ipvsadm -a -t 20.0.0.11:80 -r 192.168.30.22 -m -w 1
[root@localhost ~]# ipvsadm -a -t 20.0.0.11:80 -r 192.168.30.33 -m -w 1
##############儲存規則,並記錄到/opt/ipvsadm檔案中###############
[root@localhost ~]# ipvsadm-save > /opt/ipvsadm
[root@localhost ~]# cat /opt/ipvsadm 
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.30.22:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.30.33:http -g -w 1
###############做路由轉發####################################
[root@localhost ~]# vi /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p //檢視轉發資訊
net.ipv4.ip_forward = 1

#################如果有iptables防火牆,需要做SNAT##############
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens33 -j SNAT --to-source 20.0.0.11
#########################################.#######################

2.搭建伺服器池

2.1設定WEB1

[root@mysql2 ~]# ifconfig   //檢視ip
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.22  netmask 255.255.255.0  broadcast 192.168.30.255
[root@mysql2 ~]# route -n   //檢視路由表,看是否設定閘道器
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.30.11   0.0.0.0         UG    100    0        0 ens33
192.168.30.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@localhost ~]# yum -y install nfs-utils  //使用showmount需要安裝這個工具
[root@localhost ~]# showmount -e 192.168.30.44  //檢視共用狀況
Export list for 192.168.30.44:
/opt/web2 192.168.30.0/24
/opt/web1 192.168.30.0/24
[root@mysql2 ~]# yum -y install httpd  //安裝httpd
[root@mysql2 ~]# systemctl start httpd
[root@mysql2 ~]# systemctl enable httpd

2.2設定WEB2

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.33  netmask 255.255.255.0  broadcast 192.168.30.255
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.30.11   0.0.0.0         UG    100    0        0 ens33
192.168.30.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.30.44   //若檢視不到,可能是nfs伺服器釋出失敗,去nfs伺服器再次釋出一下:exportsfs
Export list for 192.168.30.44:
/opt/web2 192.168.30.0/24
/opt/web1 192.168.30.0/24
[root@mysql2 ~]# yum -y install httpd
[root@mysql2 ~]# systemctl start httpd
[root@mysql2 ~]# systemctl enable httpd

3.搭建共用儲存

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.44  netmask 255.255.255.0  broadcast 192.168.30.255
        inet6 fe80::a52a:406e:6512:1c66  prefixlen 64  scopeid 0x20<link>
[root@localhost ~]# route -n   //檢視路由表,看閘道器
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.30.11   0.0.0.0         UG    100    0        0 ens33
192.168.30.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@localhost ~]# rpm -q nfs-utils  //檢視nfs是否安裝
nfs-utils-1.3.0-0.61.el7.x86_64
[root@localhost ~]# rpm -q rpcbind  //檢視rpcbind是否安裝
rpcbind-0.2.0-47.el7.x86_64
[root@localhost ~]# yum -y install nfs-utils  //確實安裝了
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package 1:nfs-utils-1.3.0-0.61.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]# yum -y install rpcbind
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package rpcbind-0.2.0-47.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# vi /etc/exports
/opt/web1 192.168.30.0/24(rw,sync)
/opt/web2 192.168.30.0/24(rw,sync)
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/web2 192.168.30.0/24
/opt/web1 192.168.30.0/24
[root@localhost web2]# exportfs -vr
exporting 192.168.30.0/24:/opt/web2
exporting 192.168.30.0/24:/opt/web1
[root@localhost ~]# mkdir /opt/web1/ /opt/web1/
[root@localhost ~]# vi /opt/web1/index.html
<html>
<title>I'm Web1</title>
<body><h1>I'm Web1</h1></body>
<img src="web1.jpg" />
</html>
[root@localhost ~]# vi /opt/web2/index.html
<html>
<title>I'm Web2</title>
<body><h1>I'm Web2</h1></body>
<img src="web2.png" />
</html>

4.測試共用儲存

登入http://192.168.30.22,測試正常
在這裡插入圖片描述
登入http://192.168.30.33,測試正常
在這裡插入圖片描述

5.測試輪詢

登入http://20.0.0.11,發現輪流從web1和web2伺服器中讀取資料,第一次存取是web1,間隔1分鐘重新整理(因為存在快取),存取的就是web2。輪詢正常
在這裡插入圖片描述
在這裡插入圖片描述

-----常用命令的解釋如下: ------

LVS的負載排程演演算法有四種最常用的:輪詢演演算法(rr)、加權輪詢(wrr)、最少輪詢(Ic)、加權最少輪詢(wlc)

1)建立虛擬伺服器(注意:NAT模式要兩塊網路卡,排程器的地址是外網口地址)

群集的VIP地址為20.0.0.11,針對TCP 80埠提供負載分流服務,使用的輪詢排程演演算法。對於負載均衡排程器來說,VIP必須是本機實際已啟用的IP地址
ipvsadm -A -t 20.0.0.11:80 -s rr //選項"-A"表示新增虛擬伺服器,"-t"用來指定VIP地址及TCP埠,"-S"用來指定負載排程演演算法——rr、wrr、lc、wlc 。

2)新增伺服器節點

ipvsadm -a -t 20.0.0.11:80 -r 192.168.80.33:80 -m
ipvsadm -a -t 20.0.0.11:80 -r 192.168.80.44:80 -m
//選項"-a"表示新增真實伺服器,」-t」用來指定VIP地址及TCP埠,"-r"用來指定RIP地址及TCP埠,"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN橫式)
{-m引數後面還可以跟-w的引數,這裡沒有做的"-w"用來設定權重(權重為0時表示暫停節點)}

3)刪除伺服器節點

ipvsadm -d -r 192.168.30.22:8o -t 20.0.0.11:80 //需要從伺服器池中刪除某一個節點時,使用選項"-d"」。執行刪除操作必須指定目標物件,包括節點地址、虛擬IP地址。如上所示的操作將會刪除LVS群集20.0.0.11中的節點192.168.30.22

若需要刪除整個虛擬伺服器時,使用選項-D並指定虛擬IP地址即可,無需要指定節點。例如:「ipvsadm -D -t 20.0.0.11:80",則刪除此虛擬服務囂。
ipvsadm -L //檢視節點狀態,加個"-n"將以數位形式顯示地址、埠資訊

4)備份與還原規則

ipvsadm-save > /etc/sysconfig/ipvsadm1/儲存策略
使用匯出/匯入工具ipvsadm-save/ipvsadm-restore可以儲存、恢復LVS策略,方法類似於iptables的規則的匯出、匯入
(可以利用ipvsadm-restore < /dev/null 來清空所有規則)