一、LVS-DR集群介紹
LVS-DR(Linux Virtual Server Director Server)工作模式,是生產環境中最常用的一 種工作模式。
1、LVS-DR 工作原理
LVS-DR 模式,Director Server 作為群集的訪問入口,不作為網關使用,節點 Director Server 與 Real Server 需要在同一個網絡中,返回給客戶端的數據不需要經過 Director Server。為了響應對整個群集的訪問,Director Server 與 Real Server 都需要配置 VIP 地址。
?
2、 數據包流向分析
為方便進行原理分析,將Client與群集機器放在同一網絡中,數據包流經的路線為 1-2-3-4 四步
第一步:客戶端發送請求到 Director Server (負載均衡器),請求的數據報文到達內核空間。
此時請求的數據報文
源 IP —— 客戶端的 IP(CIP)
目標 IP —— VIP
源 MAC —— 客戶端的 MAC
目的 MAC —— Director Server 的 MAC
第二步:內核空間判斷數據包的目標 IP 是本機 VIP,此時 IPVS(IP 虛擬服務器)比對數據包請求的服務是否是集群服務,是集群服務就重新封裝數據包。然后將數據包發送給根據 負載均衡算法選擇的 Real Server。(Director Server 和 Real Server 在同一個網絡中,數據通過二層數據鏈路層來傳輸。)
此時請求的數據報文
源 IP —— 客戶端的 IP
目標 IP —— VIP
源 MAC —— Director Server 的 MAC
目的 MAC —— Real Server 的 MAC
第三步:到達 Real Server 的請求報文的 MAC 地址是自身的 MAC 地址,就接收此報文。數據包重新封裝報文,將響應報文通過 lo 接口傳送給物理網卡然后向外發出。
此時請求的數據報文
源 IP —— VIP
目標 IP —— 客戶端的 IP(CIP)
源 MAC —— Real Server 的 MAC
目的 MAC —— 客戶端的 MAC
第四步:通過交換機和路由器將響應報文傳送到客戶端。客戶端收到回復報文,得到想要的服務,但是不會知道是哪臺服務器處理的。
3、LVS-DR 模式的特點
Director Server 和 Real Server 必須在同一個物理網絡中。
Real Server 可以使用私有地址,也可以使用公網地址。如果使用公網地址,可以通過互聯網對RIP進行直接訪問。
所有的請求報文經由 Director Server,但回復響應報文不能經過 Director Server。
Real Server 的網關不允許指向 Director Server IP,即不允許數據包經過 Director S erver。
Real Server 上的 lo 接口配置 VIP 的 IP 地址。
4、LVS-DR中的ARP問題
4.1 問題一
在LVS-DR負載均衡集群中,負載均衡器與節點服務器都要配置相同的VIP地址,在局域網中具有相同的IP地址。勢必會造成各服務器ARP通信的紊亂
當ARP廣播發送到LVS-DR集群時,因為負載均衡器和節點服務器都是連接到相同的網絡上,它們都會接收到ARP廣播
只有前端的負載均衡器進行響應,其他節點服務器不應該響應ARP廣播
解決方法:
對節點服務器進行處理,使其不響應針對VIP的ARP請求
使用虛接口lo:0承載VIP地址
設置內核參數arp_ ignore=1: 系統只響應目的IP為本地IP的ARP請求
4.2問題二
問題說明:RealServer返回報文(源IP是VIP)經路由器轉發,重新封裝報文時,需要先獲取路由器的MAC地址,發送ARP請求時,Linux默認使用IP包的源IP地址(即VIP)作為ARP請求包中的源IP地址,而不使用發送接口的IP地址,路由器收到ARP請求后,將更新ARP表項,原有的VIP對應Director的MAC地址會被更新為VIP對應RealServer的MAC地址。
路由器根據ARP表項,會將新來的請求報文轉發給RealServer,導致Director的VIP失效
解決方法:
對節點服務器進行處理,設置內核參數arp_announce=2:系統不使用IP包的源地址來設置ARP請求的源地址,而選擇發送接口的IP地址
-----------------DR模式 LVS負載均衡群集部署-----------------------------------
DR 服務器:192.168.50.37? ? ?vip:192.168.50.38
Web 服務器1:192.168.50.56 ? ? ??
Web 服務器2:192.168.50.57 ? ? ? ? ?
客戶端:192.168.50.22? ? ??
二、構建LVS-DR集群
1.配置負載調度器(192.168.50.37 虛擬vip 192.168.50.38)
???1. #關閉防火墻
??????systemctl stop firewalld.service
??????setenforce 0
???2. #安裝ipvsadm工具
??????yum -y install ipvsadm
???3. #配置虛擬IP地址(VIP:192.50.38)
??????cd /etc/sysconfig/network-scripts/
??????cp ifcfg-ens33 ifcfg-ens33:0
??????vim ifcfg-ens33:0
??????#刪除UUID,dns與網關,注意子網
??????NAME=ens33:0
??????DEVICE=ens33:0
??????IPADDR=192.168.50.38
??????NETMASK=255.255.255.255
???4. #重啟網絡服務、啟動網卡
??????systemctl restart network
??????ifup ifcfg-ens33:0
???5. #調整/proc響應參數 ??
??????#對于 DR 群集模式來說,由于 LVS 負載調度器和各節點需要共用 VIP 地址,應該關閉 Linux 內核的重定向參數響應服務器不是一臺路由器,那么它不會發送重定向,所以可以關閉該功能
??????vi /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
???6. #刷新配置
??????sysctl -p
???7. #加載模塊
??????modprobe ip_vs
??????cat /proc/net/ip_vs
???8. #配置負載分配策略,并啟動服務
??????ipvsadm-save >/etc/sysconfig/ipvsadm
??????systemctl start ipvsadm.service
???9. #清空ipvsadm,并做策略
??????##添加真實服務器-a ?指定VIP地址及TCP端口-t ??指定RIP地址及TCP端口 -r 指定DR模式-g
??????ipvsadm -C
??????ipvsadm -A -t 192.168.50.38:80 -s rr
??????ipvsadm -a -t 192.168.50.38:80 -r 192.168.50.56:80 -g
??????ipvsadm -a -t 192.168.50.38:80 -r 192.168.50.57:80 -g
???10. #保存設置
???????ipvsadm
???????ipvsadm -ln
???????ipvsadm-save >/etc/sysconfig/ipvsadm
2.部署共享存儲(NFS服務器:192.168.50.22)
systemctl stop firewalld.service
setenforce 0yum -y install nfs-utils rpcbind
mkdir /opt/lc1 /opt/lc2
chmod 777 /opt/lc1 /opt/lc2vim /etc/exports
/usr/share *(ro,sync)
/opt/lc1 192.168.50.0/24(rw,sync)
/opt/lc2 192.168.50.0/24(rw,sync)systemctl start nfs.service
systemctl start rpcbind.service
3.配置節點服務器(192.168.50.56、192.168.50.57)
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y[root@localhost ~]# systemctl start httpd
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.50.38
NETMASK=255.255.255.255?? ??? ??? ??? ??? ??? ?#注意:子網掩碼必須全為 1
ifup lo:0
ifconfig lo:0
route add -host 192.168.50.38 dev lo:0
[root@localhost network-scripts]# vim /etc/rc.d/rc.local?
/usr/sbin/route add -host 192.168.50.38 dev lo:0
[root@localhost network-scripts]# chmod +x /etc/rc.d/rc.local
[root@localhost network-scripts]# vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1?? ??? ??? ?
net.ipv4.conf.lo.arp_announce = 2?? ??? ?
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@localhost network-scripts]# sysctl -pyum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd--192.168.50.56---
[root@localhost network-scripts]# mount 192.168.50.22:/opt/lc1 /var/www/html/
[root@localhost network-scripts]# echo 'lc is my love 12312' > /var/www/html/index.html--192.168.50.57---
[root@localhost network-scripts]# mount 192.168.50.22:/opt/lc2 /var/www/html/
[root@localhost network-scripts]# echo '1213 my love is lc' > /var/www/html/index.html
4.瀏覽器訪問虛擬ip 192.168.50.38
?