Lvs負載均衡羣集

Lvs負載均衡羣集

一、概述:
二、LVS詳解:
三、案例一:搭建LVS 的NAT模式負載均衡集羣;
四、案例二:搭建LVS 的DR模式負載均衡集羣;

一、概述:

概述:Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。我國章文嵩博士在1998年五月創建,默認編譯爲ip_vs內核模塊,而在linux kernel的2.6版本之後kernel是直接支持ipvs的,優勢:LVS承受負載能力高、穩定、佔用服務器資源小,缺點:適配場景、配置較麻煩、不支持節點的健康檢查機制;
官網:http://www.linuxvirtualserver.org/zh/lvs1.html
集羣技術概述:至少包含兩個節點服務器,對外表示爲一個整體,只提供一個訪問入口;
負載均衡(load balance cluster):將整個平臺的負載均衡到多臺單位;
高可用(high availablity cluster):使整個應用平臺擁有容錯能力;
Lvs負載均衡羣集
可伸縮性(Scalability):當服務的負載增長時,系統能被擴展來滿足需求,且不降低服務質量;
高可用性(Availability):儘管部分硬件和軟件會發生故障,整個系統的服務必須是每天24小時每星期7天可用的;
可管理性(Manageability):整個系統可能在物理上很大,但應該容易管理;
價格有效性(Cost-effectiveness):整個系統實現是經濟的、易支付的;
集羣的分層結構:
Lvs負載均衡羣集
第一層:負載調度器(load balancer或director),訪問羣集的唯一入口,對外使用所有服務器共有的VIP(virtual ip)地址,也稱爲羣集IP地址。
第二層:節點層(real server pool),服務器池羣集所提供的應用服務由服務器池承擔,其中的每個節點具有獨立的RIP(real IP真實地址),只處理調度服務器分發過來的客戶機請求。當某個節點暫時失效時,負載調度器的容錯機制會將其隔離,等待錯誤排除以後再重新納入服務器池。
第三層:共享存儲層或數據庫層,共享存儲爲服務器池中的所有節點提供穩定,一致的文件存取服務,確保整個羣集的統一性。

二、LVS詳解:

LVS內核模型:
Lvs負載均衡羣集
調度條件:基於IP(效率最高)、基於端口、基於內容
LVS的三種工作模式:
Lvs負載均衡羣集
1.地址轉換:NAT模式,負載調度器作爲所有服務器的網關,服務器節點使用私有IP地址(隱蔽性高),與負載調度器位於同一個物理網絡,安全性高於其他兩種方式。但是負載調度器是整個架構的瓶頸;
b.IP隧道:TUN模式,採用開放是的網絡結構,負載調度器僅作爲客戶機的訪問入口,個節點通過各自的Internet連接回應客戶機,而不再經過負載調度器。服務器節點分散在互聯網的不同位置,具有獨立的公網IP地址,通過專用的IP隧道與負載調度器互通。安全性低,性能高;
c.直接路由:DR模式,採用半開放式的網絡結構,與TUN模式結構類似,但各節點並不是分散在各地,而是與調度服務器位於同一個物理網絡。負載調度器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道。性能最高,安全性較高;
Lvs負載調度算法:
靜態:
1.輪詢rr:將請求按順序依次分配給各個web節點;
2.加權輪詢wrr:根據web服務器的處理能力,動態調整權重,將請求按照各節點的負載情況進行順序分配;
3.目標地址散列調度dh:根據請求的目標IP地址,作爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
4.源地址 hash:源地址散列”調度算法根據請求的源IP地址,作爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
動態:
1.最小連接Lc:根據web服務器的連接數量,將請求分配給web節點服務器;
2.加權最小連接WLC:根據web服務器的處理能力,動態調整權重,將請求按照各節點的連接數量進行分配,默認;
3.最短延遲調度SED:在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是爲了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閒服務器一直處於無連接狀態。
4.永不排隊/最少隊列調度NQ:無需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閒着,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對於DNS的UDP不需要考慮非活動連接,而httpd的處於保持狀態的服務就需要考慮非活動連接給服務器的壓力。
5.基於局部性的最少鏈接LBLC:基於局部性的最少鏈接”調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。
6.帶複製的基於局部性最少連接LBLCR:帶複製的基於局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按”最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。

三、案例一:搭建LVS 的NAT模式負載均衡集羣;

案例拓撲:
Lvs負載均衡羣集
案例環境:
系統類型

系統類型 IP地址 主機名 所需軟件
Centos 7.4 1708 64bit 192.168.100.101 192.168.3.101 ld.linuxfan.cn ipvsadm、內核模塊ip_vs
Centos 7.4 1708 64bit 192.168.100.102 real1.linuxfan.cn httpd
Centos 7.4 1708 64bit 192.168.100.103 real2.linuxfan.cn httpd
Centos 7.4 1708 64bit 192.168.100.104 real3.linuxfan.cn httpd
win7 192.168.3.150 win7-1

案例步驟:
搭建real server 節點池中的三臺http服務節點(在此只列出一臺配置,其他兩臺相同);
配置LD負載調度器的環境以及安裝軟件程序;
配置LD負載調度服務器的調度服務;
公網客戶端測試訪問集羣;

搭建real server 節點池中的三臺http服務節點(在此只列出一臺配置,其他兩臺相同);

[root@real1 ~]# ip a |grep 192.168.100.102              ##設置ip地址
    inet 192.168.100.102/24 brd 192.168.100.255 scope global eth0   
[root@real1 ~]# ip r |grep 192.168.100.101              ##設置默認網關地址
default via 192.168.100.101 dev eth0 proto static metric 100
[root@real1 ~]# yum -y install httpd
[root@real1 ~]# cat <<END >/var/www/html/index.html
I am real1.linuxfan.cn
END
[root@real1 ~]# systemctl start httpd
[root@real1 ~]# systemctl enable httpd                  ##設置開機自動啓動
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

配置LD負載調度器的環境以及安裝軟件程序;
[root@ld ~]# ip a |grep 101
    inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
    inet 192.168.3.101/24 brd 192.168.3.255 scope global eth1
[root@ld ~]# echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf              ##開啓路由轉發功能,因爲調度器同時承載着網關的角色
[root@ld ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@ld ~]# modprobe ip_vs                             ##加載內核模塊ip_vs
[root@ld ~]# lsmod |grep ip_vs
ip_vs                 141092  0 
nf_conntrack          133387  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

配置LD負載調度服務器的調度服務;
[root@ld ~]# yum -y install ipvsadm                             ##安裝ip_vs模塊的規則編寫工具
[root@ld ~]# systemctl stop ipvsadm                             ##清空內部規則
[root@ld ~]# ipvsadm -A -t 192.168.3.101:80 -s rr                       ##指定集羣的VIP地址(Virtual IP),rr指定輪詢調度算法
[root@ld ~]# ipvsadm -a -t 192.168.3.101:80 -r 192.168.100.102:80 -m -w 1   ##-m表示NAT模式,-w指定權重值
[root@ld ~]# ipvsadm -a -t 192.168.3.101:80 -r 192.168.100.103:80 -m -w 1
[root@ld ~]# ipvsadm -a -t 192.168.3.101:80 -r 192.168.100.104:80 -m -w 1
[root@ld ~]# ipvsadm-save                               ##保存規則
-A -t ld.linuxfan.cn:http -s rr
-a -t ld.linuxfan.cn:http -r 192.168.100.102:http -m -w 1
-a -t ld.linuxfan.cn:http -r 192.168.100.103:http -m -w 1
-a -t ld.linuxfan.cn:http -r 192.168.100.104:http -m -w 1
[root@ld ~]# ipvsadm -L                                 ##查看規則
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  ld.linuxfan.cn:http rr
  -> 192.168.100.102:http         Masq    1      0          0         
  -> 192.168.100.103:http         Masq    1      0          0         
  -> 192.168.100.104:http         Masq    1      0          0

公網客戶端測試訪問集羣;
Lvs負載均衡羣集Lvs負載均衡羣集

四、案例二:搭建LVS 的DR模式負載均衡集羣;

案例拓撲:

Lvs負載均衡羣集

案例環境:

系統類型 IP地址 主機名 所需軟件
Centos 7.4 1708 64bit 192.168.100.101 192.168.3.101 ld.linuxfan.cn ipvsadm、內核模塊ip_vs
Centos 7.4 1708 64bit 192.168.100.102 real1.linuxfan.cn httpd
Centos 7.4 1708 64bit 192.168.100.103 real2.linuxfan.cn httpd
Centos 7.4 1708 64bit 192.168.100.104 real3.linuxfan.cn httpd
win7 192.168.3.150 wan-client 瀏覽器
win7 192.168.100.66 lan-client 瀏覽器
vip 192.168.100.88
Centos 6.5 64bit 192.168.100.100 192.168.3.100 GW iptables

案例步驟:
搭建real server 節點池中的三臺http服務節點(在此只列出一臺配置,其他兩臺相同);
設置負載調度器上的VIP地址;
調整負載調度器的響應參數;
配置負載調度器負載分配策略;
配置real server節點池內節點服務器的網絡參數(在此只列出一臺配置,其他兩臺相同);
內網客戶端訪問測試集羣;
在GW服務器上設置iptables的DNAT規則;
外網客戶端訪問測試集羣;
測試LVS是否支持節點的健康檢查功能;

搭建real server 節點池中的三臺http服務節點(在此只列出一臺配置,其他兩臺相同);

[root@real1 ~]# ip a |grep 192.168.100.102              ##設置ip地址
    inet 192.168.100.102/24 brd 192.168.100.255 scope global eth0   
[root@real1 ~]# ip r |grep 192.168.100.100              ##設置默認網關地址
default via 192.168.100.100 dev eth0 proto static metric 100
[root@real1 ~]# yum -y install httpd
[root@real1 ~]# cat <<END >/var/www/html/index.html
I am real1.linuxfan.cn
END
[root@real1 ~]# systemctl start httpd
[root@real1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

設置負載調度器上的VIP地址;
[root@ld ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.100.101
PREFIX=24
GATEWAY=192.168.100.100
DNS1=192.168.100.100 
[root@ld ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
[root@ld ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.100.88
PREFIX=24
GATEWAY=192.168.100.100
DNS1=192.168.100.100
[root@ld ~]# systemctl restart network
[root@ld ~]# ip a |grep 192.168.100
    inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.88/24 brd 192.168.100.255 scope global secondary eth0:0

調整負載調度器的響應參數;
[root@ld ~]# vi /etc/sysctl.conf                        ##最後添加
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
:wq
註解:
禁止轉發重定向報文
禁止默認轉發重定向報文
禁止eth0網卡轉發重定向報文
[root@ld ~]# sysctl -p

配置負載調度器負載分配策略;

[root@ld ~]# modprobe ip_vs
[root@ld ~]# lsmod |grep ip_vs
ip_vs_rr               12600  1 
ip_vs                 141092  3 ip_vs_rr
nf_conntrack          133387  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
[root@ld ~]# yum -y install ipvsadm
[root@ld ~]# ipvsadm --clear
[root@ld ~]# systemctl stop ipvsadm
[root@ld ~]# ipvsadm -L 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@ld ~]# ipvsadm -A -t 192.168.100.88:80 -s rr
[root@ld ~]# ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.102:80 -g -w 1  ##表示DR模式
[root@ld ~]# ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.103:80 -g -w 1
[root@ld ~]# ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.104:80 -g -w 1
[root@ld ~]# ipvsadm-save 
-A -t ld.linuxfan.cn:http -s rr
-a -t ld.linuxfan.cn:http -r 192.168.100.102:http -g -w 1
-a -t ld.linuxfan.cn:http -r 192.168.100.103:http -g -w 1
-a -t ld.linuxfan.cn:http -r 192.168.100.104:http -g -w 1
[root@ld ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  ld.linuxfan.cn:http rr
  -> 192.168.100.102:http         Route   1      0          0         
  -> 192.168.100.103:http         Route   1      0          0         
  -> 192.168.100.104:http         Route   1      0          0

配置real server節點池內節點服務器的網絡參數(在此只列出一臺配置,其他兩臺相同);

[root@real1 ~]# cat <<END >/etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.88
NETMASK=255.255.255.255
ONBOOT=yes
NAME=lo:0
END
[root@ real1 ~]# systemctl restart network
[root@real1 ~]# ip a |grep 88
    inet 192.168.100.88/32 brd 192.168.100.88 scope global lo:0

內網客戶端訪問測試集羣;

Lvs負載均衡羣集

Lvs負載均衡羣集
Lvs負載均衡羣集Lvs負載均衡羣集

在GW服務器上設置iptables的DNAT規則;

[root@GW ~]# iptables -t nat -A PREROUTING -i eth1 -d 192.168.3.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.88
[root@ GW ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            192.168.3.100       tcp dpt:80 to:192.168.100.88 
...

外網客戶端訪問測試集羣;
Lvs負載均衡羣集Lvs負載均衡羣集

測試LVS是否支持節點的健康檢查功能;

[root@real1 ~]# ifconfig lo:0 down              ##斷開real1的lo:0的網卡,使其脫離集羣
[root@real1 ~]# ip a |grep 192.168.100.
    inet 192.168.100.102/24 brd 192.168.100.255 scope global eth0

客戶端訪問集羣測試:

Lvs負載均衡羣集

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章