1. 程式人生 > 其它 >LVS負載均衡群集

LVS負載均衡群集

LVS負載均衡群集

目錄

一、企業群集應用概述

1. 群集的含義

群集,Cluster,也可稱為叢集,是由多臺主機構成,但對外只表現為一個整體,只提供一個訪問入口(域名或IP地址),相當於一臺大型計算機。

2. 企業應用中的問題

網際網路應用中,隨著站點對硬體效能、響應速度、服務穩定性、資料可靠性等要求越來越高,單臺伺服器已經無法滿足負載均衡及高可用的要求。

3. 解決方法

  1. 使用借個昂貴的小型機、大型機
  2. 使用多臺相對廉價的普通伺服器構建服務群集
    通過整合多臺伺服器,使用LVS來達到伺服器的高可用和負載均衡,並以同一個IP地址對外提供相同的服務。
    在企業中常用的一種群集——LVS(Linux Virtual Server,Linux虛擬伺服器)

4. 企業群集的分類

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

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

提高應用系統的響應能力、儘可能處理更多的訪問請求、減少延遲為目標,獲得高併發、高負載(LB)的整體效能。
LB的負載分配依賴於主節點的分流演算法,將來自客戶機的訪問請求分擔給多個伺服器節點,從而緩解整個系統的負載壓力。例如,“DNS輪詢”、“反向代理”等。

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

提高應用系統的可靠性、儘可能地減少中斷時間為目標,確保服務的連續性,達到高可用(HA)的容錯效果。
HA的工作方式包括雙工和主從兩種模式,雙工即所有節點同時線上,主從則只有主節點線上,但當出現故障時從節點能自動切換為主節點。例如,“故障切換”、“雙機熱備”等。

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

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

二、負載均衡群集架構

1. 負載均衡的結構

  1. 第一層,負載排程器(Load Balancer或Director)
    訪問整個群集系統的唯一入口,對外使用所有伺服器公有的VIP地址,也稱為群集IP地址。通常會配置主、備兩胎排程器實現熱備份,當主排程器失效以後能夠平滑替換至備用排程器,確保高可用性。
  2. 第二層,伺服器池(Server Pool)
    群集所提供的應用服務,由伺服器池承擔,其中每個節點具有獨立的RIP地址(真實IP),只處理排程器分發過來的客戶機請求。當某個節點暫時失效時,堵在排程器的容錯機制會將其隔離,等待錯誤排除以後再重新納入伺服器池。
  3. 第三層,共享儲存(Share Storage)
    為伺服器池中的所有節點提供穩定、一致的檔案存取服務,確保整個群集的統一性。共享儲存可以使用NAS裝置,或者提供NFS共享服務的專用伺服器。

2. 負載均衡群集工作模式分析

負載均衡群集是目前企業用的最多的群集型別,群集的負載排程技術有三種工作模式:

  1. 地址轉換
  2. IP隧道
  3. 直接路由

3. NAT模式

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

4. TUN模式

IP隧道(IP Tunnel,簡稱TUN模式),採用開放式的網路結構,負載排程器僅作為客戶機的訪問入口,各節點通過各自的Internet連線直接回應客戶機,而不再經過負載排程器。
伺服器節點分散在網際網路中的不同位置,具有獨立的公網IP地址,通過專用IP隧道與負載排程器通訊。
該方式常用於異地災備。

5. DR模式


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

三、LVS虛擬伺服器

1. Linux Virtual Server

針對Linux核心開發的負載均衡解決方案
1998年5月,由我國的章文嵩博士建立
官方網站:http://www.linuxvirtualserver.org/
LVS實際上相當於基於IP地址的虛擬化應用,為基於IP地址和內容請求分發的負載均衡提出了一種高效的解決方法。

2. LVS的應用

LVS現在已成為Linux核心的一部分,預設編譯為ip_vs模組,必要時能夠自己呼叫。在CentOS 7系統中,以下操作可以手動載入ip_vs模組,並檢視當前系統中ip_vs模組的版本資訊。

[root@localhost ~]# modprobe ip_vs
#確認核心對LVS的支援
[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

3. LVS的負載排程演算法

(1)輪詢(Round Robin)

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

(2)加權輪詢(Weighted Round Robin)

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

(3)最少連線(Last Connections)

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

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

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

4. ipvsadm工具

(1)ipvsadm工具的功能

LVS群集建立與管理:

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

(2)ipvsadm工具選項

常用選項 說明
-A 新增虛擬伺服器
-D 刪除整個虛擬伺服器
-s 指定負載排程演算法(輪詢:rr、加權輪詢:wrr、最少連線:lc、加權最少連線:wlc)
-a 表示新增真實伺服器(節點伺服器)
-d 刪除某一個節點
-t 指定VIP地址及TCP埠
-r 指定RIP地址及TCP埠
-m 表示使用nat群集模式
-g 表示使用DR模式
-i 表示使用TUN模式
-w 設定權重(權重為0時表示暫停節點)
-p 60 表示保持長連線60秒
-l 列表檢視LVS虛擬伺服器(預設為檢視所有)
-n 以數字形式顯示地址、埠等資訊,常與“-l”選項組合使用

四、LVS-NAT部署實戰

1. 案例環境

LVS排程器作為Web伺服器池的閘道器,LVS兩塊網絡卡,分別連線內外網,使用輪詢(rr)排程演算法。

2. 伺服器IP配置

負載排程器:內閘道器ens33:192.168.122.10;外閘道器ens36:12.0.0.10
Web節點伺服器1:192.168.122.100
Web節點伺服器2:192.168.122.101
NFS伺服器:192.168.122.88
客戶端:12.0.0.88

3. 部署共享儲存(NFS伺服器192.168.122.88)

[root@nfs_server ~]# systemctl stop firewalld.service 
[root@nfs_server ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@nfs_server ~]# setenforce 0
[root@nfs_server ~]# yum install -y nfs-utils rpcbind
[root@nfs_server ~]# systemctl start rpcbind.service
[root@nfs_server ~]# systemctl start nfs.service
[root@nfs_server ~]# systemctl enable rpcbind.service
[root@nfs_server ~]# systemctl enable nfs.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs_server ~]# mkdir /opt/test1 /opt/test2
[root@nfs_server ~]# chmod 777 /opt/test1 /opt/test2
[root@nfs_server ~]# echo "This is test1 web" > /opt/test1/index.html
[root@nfs_server ~]# echo "This is test2 web" > /opt/test2/index.html
[root@nfs_server ~]# vim /etc/exports
[root@nfs_server ~]# vim /etc/exports

/usr/share *(ro,sync)
/opt/test1 192.168.122.0/24(rw,sync)
/opt/test2 192.168.122.0/24(rw,sync)

[root@nfs_server ~]# exportfs -rv
#釋出共享
exporting 192.168.122.0/24:/opt/test2
exporting 192.168.122.0/24:/opt/test1
exporting *:/usr/share
[root@nfs_server ~]# showmount -e
Export list for nfs_server:
/usr/share *
/opt/test2 192.168.122.0/24
/opt/test1 192.168.122.0/24

4. 配置節點伺服器(192.168.122.100/192.168.122.101)

web_server1(192.168.122.100)

[root@web_server1 ~]# systemctl stop firewalld
[root@web_server1 ~]# systemctl disable firewalld
[root@web_server1 ~]# setenforce 0
setenforce: SELinux is disabled
[root@web_server1 ~]# yum install -y httpd
[root@web_server1 ~]# systemctl start httpd
[root@web_server1 ~]# yum install -y nfs-utils rpcbind
[root@web_server1 ~]# systemctl start rpcbind
[root@web_server1 ~]# systemctl enable rpcbind
[root@web_server1 ~]# mount.nfs 192.168.122.88:/opt/test1 /var/www/html
[root@web_server1 ~]# vim /etc/fstab
#末行寫入,設定自動掛載
192.168.122.88:/opt/test1                 /var/www/html           nfs     defaults,netdev 0 0

web_server2(192.168.122.101)

[root@web_server2 ~]# systemctl stop firewalld
[root@web_server2 ~]# systemctl disable firewalld
[root@web_server2 ~]# setenforce 0
setenforce: SELinux is disabled
[root@web_server2 ~]# yum install -y httpd
[root@web_server2 ~]# systemctl start httpd
[root@web_server2 ~]# yum install -y nfs-utils rpcbind
[root@web_server2 ~]# systemctl start rpcbind
[root@web_server2 ~]# systemctl enable rpcbind
[root@web_server2 ~]# mount.nfs 192.168.122.88:/opt/test2 /var/www/html
[root@web_server1 ~]# vim /etc/fstab
#末行寫入,設定自動掛載
192.168.122.88:/opt/test2                 /var/www/html           nfs     defaults,netdev 0 0

5. 配置負載排程器(內閘道器ens33:192.168.122.10;外閘道器ens36:12.0.0.10)

[root@director ~]# systemctl stop firewalld
[root@director ~]# systemctl disable firewalld
[root@director ~]# setenforce 0
setenforce: SELinux is disabled

(1)配置SNAT轉發規則

[root@director ~]# vim /etc/sysctl.conf
#末行寫入
net.ipv4.ip_forward = 1
[root@director ~]# sysctl -p
net.ipv4.ip_forward = 1

或

[root@director ~]# echo '1' > /proc/sys/net/ipv4/ip_forward
[root@director ~]# sysctl -p
net.ipv4.ip_forward = 1

[root@director ~]# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o ens36 -j SNAT --to-source 12.0.0.10

(2)載入LVS核心模組

[root@director ~]# modprobe ip_vs
#載入ip_vs模組
[root@director ~]# cat /proc/net/ip_vs
#檢視ip_vs版本資訊
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@director ~]# for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs | grep -o "^[^.]*");do echo $1; /sbin/modinfo -F filename $1 > /dev/null 2>&1 && /sbin/modprobe $1;done 

(3)安裝ipvsadm管理工具

[root@director ~]# yum install -y ipvsadm
#啟動服務前需儲存負載分配策略
#ipvsadm-save > /etc/sysconfig/ipvsadm
#或者ipvsadm --save > /etc/sysconfig/ipvsadm
[root@director ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@director ~]# systemctl start ipvsadm

(4)配置負載分配策略(NAT模式只要在伺服器上配置,節點伺服器不需要特殊配置)

[root@director ~]# ipvsadm -C
#清除原有策略
[root@director ~]# ipvsadm -A -t 12.0.0.10:80 -s rr
[root@director ~]# ipvsadm -a -t 12.0.0.10:80 -r 192.168.122.100:80 -m -w 1
[root@director ~]# ipvsadm -a -t 12.0.0.10:80 -r 192.168.122.101:80 -m -w 1
[root@director ~]# ipvsadm
#啟用策略
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.10:http rr
  -> 192.168.122.100:http         Masq    1      0          0         
  -> 192.168.122.101:http         Masq    1      0          0   
[root@director ~]# ipvsadm -ln
#檢視節點狀態,Masq代表NAT模式
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.10:80 rr
  -> 192.168.122.100:80           Masq    1      0          0         
  -> 192.168.122.101:80           Masq    1      0          0        
[root@director ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
#儲存策略

其他操作方法

ipvsadm -d -t 12.0.0.10:80 -r 192.168.122.100:80
#刪除群集中某一節點伺服器
ipvsadm -D -t 12.0.0.10:80
#刪除整個虛擬伺服器
systemctl stop ipvsadm
#停止服務(清除策略)
systemctl start ipvsadm
#啟動服務(重建規則)
ipvsadm-restore < /etc/sysconfig/ipvsadm
#恢復LVS策略

6. 訪問測試

在一臺IP為12.0.0.88的客戶機使用瀏覽器訪問 http://12.0.0.10/ ,不斷重新整理瀏覽器測試負載均衡效果,重新整理間隔需長點。