1. 程式人生 > 其它 >部署LVS-DR群集

部署LVS-DR群集

目錄

一、LVS-DR資料包流向分析

為方便進行原理分析,將Client與群集機器放在同一網路中,資料包流經的路線為1-2-3-4

  1、客戶端傳送請求到 Director Server(負載均衡器),請求的資料報文(源IP是CIP,目標IP是VIP)到達核心空間。

  2、Director Server 和 Real Server 在同一網路中,資料通過二層資料鏈路層來傳輸。

  3、核心空間判斷資料包的目標IP是本機VIP,此時IPVS(IP虛擬伺服器)對比資料包請求的服務是否是叢集服務,是叢集服務就重新封裝資料包。修改源MAC地址為 Director Server 的MAC地址,修改目標MAC地址為 Real Server 的MAC地址,源IP地址與目標IP地址沒有改變,然後將資料包傳送給Real Server。

  4、到達 Real Server 的請求報文的MAC地址是自身的MAC地址,就接收此報文。資料包重新封裝報文(源IP地址為VIP,目標IP為CIP),將響應報文通過 lo 介面傳送給物理網絡卡然後向外發出。

  5、Real Server 直接將響應報文傳送到客戶端。

二、DR模式的特點

  1、Director Server 和Real Server 必須在同一個物理網路中。

  2、Real Server 可以使用私有地址,也可以使用公網地址。如果使用公網地址,可以通過網際網路對RIP進行直接訪問。

  3、Director Server 作為群集的訪問入口,但不作為閘道器使用。

  4、所有的請求報文經由 Director Server ,但回覆響應報文不能經過 Director Server。

  5、Real Server 的閘道器不允許指向 Director Server IP,即 Real Server 傳送的資料包不允許經過 Director Server。

  6、Real Server 上的 lo 介面配置 VIP的IP地址。

三、LVS-DR中的ARP問題

  1、在區域網中具有相同的IP地址,勢必會造成各伺服器ARP通訊的紊亂

當ARP廣播發送到LVS-DR叢集時,因為負載均衡器和節點伺服器都是連線到相同的網路上,它們都會接收到ARP廣播

只有前端的負載均衡器進行相應,其他的節點伺服器不應該響應ARP廣播

  2、對節點伺服器進行處理,使其不響應針對VIP的ARP請求

使用虛介面 lo:0承載VIP地址

設定核心引數arp_ignore=1;系統只響應目的IP為本機IP的ARP請求

  3、Real Server 返回報文(源IP是VIP)經路由器轉發,重新封裝報文時,需要先獲取路由器的MAC地址

  傳送ARP請求時,Linux預設使用IP包的源IP地址(即VIP)作為ARP請求包的源IP地址,而不使用傳送介面的IP地址

源IP:VIP、源MAC:Real Server的MAC、目的IP:路由器的IP、目的MAC:?

  4、路由表收到ARP請求後,將更新ARP表項

  原有的VIP對應Director的MAC地址會被更新為VIP對應Real Server 的MAC地址

  5、路由表根據ARP表項,會將新來的請求報文轉發給RealServer,導致Director的VIP失效

  解決方法:對節點伺服器進行處理,設定核心引數arp_announce=2:系統不使用IP包的源地址來設定ARP請求的源地址,而選擇傳送介面的IP地址

  6、解決ARP的兩個問題的設定方法

  修改/etc/sysctl.conf檔案

net.ipv4.conf.lo.arp_ignore = 1  
//防止閘道器路由器傳送ARP廣播時排程器和節點伺服器都進行響應導致ARP快取表紊亂,不對非本地物理網絡卡IP的ARP請求進行響應因為VIP是承載在lo:0
net.ipv4.conf.lo.arp_announce = 2 
//系統不使用響應資料包的源IP地址(VIP)來作為本機進行ARP請求報文的源IP地址而使用傳送報文的物理網絡卡IP地址作為ARP請求報文的源IP地址,這樣可以防止閘道器路由器接收到源IP地址為VIP的ARP請求報文後又更新ARP快取表導致外網再發送請求時,資料包到達不了排程器
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

四、DR模式LVS負載均衡群集部署

DR伺服器:192.168.80.10

Web伺服器1:192.168.80.12

Web伺服器2:192.168.80.13

vip:192.168.80.188

客戶端:192.168.80.200

  1、配置負載排程器(192.168.80.10)

systemctl stop firewalld.service
setenforve 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm

  (1)配置虛擬IP地址(VIP:192.168.80.188)

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0       //若隧道模式,複製為ifcfg-tun10
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.80.188
NETMASK=255.255.255.255

ifup ens33:0
ifconfig ens33:0

  (2)調整proc響應引數

//由於LVS負載排程器和個節點需要共用VIP地址,需要關閉icmp的重定向,不充當路由器
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

  (3)配置負載分配策略

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -C
ipvsadm -A -t 192.168.80.188:80 -s rr
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.12:80 -g      //若隧道模式,-g替換為-i
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.13:80 -g
ipvsadm

ipvsadm -ln      //檢視節點狀態,Route代表DR模式

2、部署共享儲存(NFS伺服器:192.168.80.13)

systemctl stop firewalld.service
setenforce 0

yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet

vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)

systemctl start nfs.service
systemctl start rpcbind.service

  3、配置節點伺服器(192.168.80.100、192.168.80.101)

systemctl stop firewalld.service
setenforce 0

  (1)配置虛擬IP地址(VIP:192.168.80.188)

//此地址僅用作傳送Web響應資料包的源地址,並不需要監聽客戶機的訪問請求(改由排程器監聽並分發)。因此使用虛介面 lo:0來承載VIP地址,併為本機新增一條路由記錄,將訪問VIP的資料限制在本地,以避免通訊紊亂
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.80.188
NETMASK=255.255.255.255       //注意:子網掩碼必須全為1

ifup lo:0
ifconfig lo:0
route add -host 192.168.80.188 dev lo:0

vim /etc/rc.local
/sbin/route add -host 192.168.80.188 dev lo:0

chmod +x /etc/rc.d/rc.local

  (2)調整核心的ARP響應引數以阻止更新VIP的MAC地址,避免發生衝突

vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1        //系統只響應目的IP為本地IP的ARP請求
net.ipv4.conf.lo.arp_announce = 2       //系統不使用IP包的源地址來設定ARP請求的源地址,而選擇傳送介面的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

//or
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd

//----192.168.80.100
mount.nfs 192.168.80.13:/opt/kgc /var/www/html
echo 'this is kgc web!' > /var/www/html/index.html

//----192.168.80.101
mount.nfs 192.168.80.13:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html

4、測試LVS群集

在客戶端使用瀏覽器訪問http://192.168.80.188/

五、補充

1、LVS三種工作模式的區別

NAT:通過網路地址轉換實現的虛擬伺服器,大併發訪問時,排程器的效能成為瓶頸

DR:使用路由技術實現虛擬伺服器,節點伺服器需要配置VIP,注意MAC地址廣播

2、LVS排程演算法

輪詢(Round Robin);加權輪詢(Weighted Round Robin);最少連線(Least Connections);加權最少連線(Weighted Least Connections);源地址雜湊值(source hash)

3、LVS排程器常見演算法(均衡策略)

LVS排程器用的排程方法基本分為兩類:

  固定排程演算法:rr、wrr、dh、sh

  rr:輪詢演算法,將請求依次分配給不同的rs節點,即rs節點中均攤分配。適合於rs所有節點處理效能接近的情況。

  wrr:加權輪詢排程,依據不同rs的權值分配任務。權值較高的rs將優先獲得任務,並且分配到的連線數將比權值低的rs更多。相同權值的rs得到相同數目連線數。

  dh:目的地址雜湊排程,以目的地址為關鍵字查詢一個靜態hash表來獲得所需rs。

  sh:源地址雜湊排程,以源地址為關鍵字查詢一個靜態hash表來獲得所需rs。

  動態排程演算法:wlc、lc、lblc

  wlc:加權最小連線數排程,假設各臺rs權值依次為Wi,當前tcp連線數依次為Ti,依次去Ti/Wi為最小的rs作為下一個分配的rs。

  lc:最小連線數排程,IPVS表儲存了所有活動的連線。LB會比較將連線請求傳送到當前連線最少的rs。

  lblc:基於地址的最小連線數排程,將來自同一個目的地址的請求分配給同一臺rs,此時這臺伺服器是尚未滿負荷的。否則就將這個請求分配給連線數最小的rs,並以它作為下一次分配的首先考慮。

4、LVS的工作模式及其工作過程

LVS有三種負載均衡的模式,分別是VS/NAT(nat模式)、VS/DR(路由模式)、VS/TUN(隧道模式)

  VS/NAT(nat模式)

  原理:首先負載均衡器接收到客戶的請求資料包時,根據排程演算法決定將請求傳送給哪個後端的真是伺服器(rs)。然後負載均衡器就把客戶端傳送的請求資料包的目標IP地址及埠改成後端真是伺服器的IP地址(RIP)。真實伺服器響應完請求後,檢視預設路由,把響應後的資料包傳送給負載均衡器,負載均衡器在接收到響應包後,把包的源地址改成虛擬地址(VIP)然後傳送回給客戶端。

  優點:叢集中的伺服器可以使用任何支援TCP/IP的作業系統,只要負載均衡器有一個合法的IP地址。

  缺點:擴充套件性有限,當伺服器節點增長過多時,由於所有的請求和應答都需要經過負載均衡器,因此負載均衡器將成為整個系統的瓶頸。

  VS/DR(路由模式)

  原理:首先負載均衡器接收到客戶的請求資料包時,根據排程演算法決定將請求傳送給哪個後端的真實伺服器(rs)。然後負載均衡器就把客服端傳送的請求資料包的目標MAC地址改成後端真實伺服器的MAC地址(R-MAC)。真實伺服器響應完請求後,檢視預設路由,把響應後的資料包直接傳送給客戶端,不需要經過負載均衡器。

  優點:負載均衡器只負責將請求包分發給後端節點伺服器,而rs將應答包直接發給使用者。所以,減少了負載均衡器的大量資料流動,負載均衡器不再是系統的瓶頸,也能處理很巨大的請求量。

  缺點:需要負載均衡器與真實伺服器都有一塊網絡卡連線到同一物理網段上,必須在同一個區域網環境。

  VS/TUN(隧道模式)

  原理:首先負載均衡器接收到客戶的請求資料包時,根據排程演算法決定將請求傳送給哪個後端的rs。然後負載均衡器就把客戶端傳送的請求報文封裝一層IP隧道(T-IP)轉發到rs。rs響應完請求後,檢視預設路由,把響應後的資料包直接傳送給客服端,不需要經過負載均衡器。

  優點:負載均衡器只負載將請求包分發給後端節點伺服器,而rs將應答包直接發給使用者。所以,減少了負載均衡器的大量資料流動,負載均衡器不再是系統的瓶頸,也能處理很巨大的請求量。

  缺點:隧道模式的rs節點需要合法IP,這種方式需要所有的伺服器支援“IP Tunneling”。