DR(直接路由)是三種負載均衡模式其中之一,也是使用最多的一種模式,關於該模式的介紹,能夠參考博文:LVS負載均衡羣集詳解。html
DR的工做模式示意圖以下:web
該模式的原理已經在上面連接的博文中寫了下來。如今直接搭建一個基於DR模式的負載均衡羣集。apache
環境以下:vim
在上面這個環境中,須要解決的問題有下面幾點:服務器
一、全部web節點和調度器都配置上VIP:客戶端訪問VIP(羣集的虛擬IP地址)時,如果負載均衡
調度器將請求轉發給web節點,而後由web節點直接去響應客戶端,那麼客戶端在收到ide
數據包後,發現收到的數據包源地址不是200.0.0.254,那麼就會直接丟棄web服務器返回工具
的數據包,爲了解決這一問題,因此須要在全部web節點和調度器的虛接口上配置上200.0.0.254oop
這個地址,而且經過添加一條路由,將訪問VIP的數據限制在本地,以免通訊紊亂。測試
二、解決關於web節點ARP響應的問題:在全部web節點和調度器上配置上200.0.0.254
這個地址後,當client訪問200.0.0.254這個地址時,全部的web節點都有這個地址,因此
都會去進行ARP響應,那麼這樣一來,可能就形成了client略過調度器直接去訪問web節點
了,這樣一來,調度器就沒有存在的意義了,天然也就達不到負載均衡的效果了,因此須要
關閉web節點的部分ARP應答,在廣播200.0.0.254這個地址時,只讓調度器去響應,web
節點不響應該廣播。
三、解決調度器內核自帶的ICMP的重定向優化問題:Linux內核有一個ICMP優化功能,
就是在client第一次訪問調度器時,調度器會將請求轉發給某一個web節點,在這時,Linux
自帶的ICMP優化功能會發現,客戶端能夠直接和web節點通訊,而後就會發送一個數據
包,告訴client,以後全部訪問200.0.0.254的數據包,直接發給那個web節點便可,這樣之
後全部的訪問請求都將直接發送給某一個web節點,而再也不通過調度器,這樣確定也是不可
以的,沒法達到負載均衡的效果了。因此須要關閉Linux內核的ICMP重定向參數響應。
配置過程以下:
1、配置負載調度器(自行配置環境中除VIP之外的IP地址):
一、配置虛擬IP地址(VIP)
[root@LVS network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 #在虛接口配置VIP [root@LVS network-scripts]# vim ifcfg-ens33:0 #改動如下配置項 ............. IPADDR=200.0.0.254 NETMASK=255.255.255.0 #必須寫子網掩碼信息 NAME=ens33:0 #注意改網卡名稱 DEVICE=ens33:0 ONBOOT=yes [root@LVS network-scripts]# systemctl restart network #重啓網卡使更改生效 [root@LVS network-scripts]# ifconfig #查詢相關IP是否配置正確 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 200.0.0.1 netmask 255.255.255.0 broadcast 200.0.0.255 inet6 fe80::2e1e:d068:9c41:c688 prefixlen 64 scopeid 0x20<link> ........................... ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 200.0.0.254 netmask 255.255.255.0 broadcast 200.0.0.255 ether 00:0c:29:77:2c:03 txqueuelen 1000 (Ethernet)
二、調整/proc相應參數:
[root@LVS ~]# vim /etc/sysctl.conf #寫入下面三行 ................ net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 [root@LVS ~]# sysctl -p #刷新一下配置 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
三、配置負載分配策略:
[root@LVS ~]# modprobe ip_vs #加載ip_vs模塊 [root@LVS ~]# yum -y install ipvsadm #安裝ipvsadm工具 [root@LVS ~]# ipvsadm -C #清除原有策略 [root@LVS ~]# ipvsadm -A -t 200.0.0.254:80 -s rr #配置羣集VIP及添加相關節點 [root@LVS ~]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.2:80 -g -w 1 [root@LVS ~]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.3:80 -g -w 1 [root@LVS ~]# ipvsadm-save #保存策略 [root@LVS ~]# ipvsadm-save > /etc/sysconfig/ipvsadm #導出策略備份 [root@LVS ~]# ipvsadm -ln #確認羣集當前策略 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 200.0.0.254:80 rr -> 200.0.0.2:80 Route 1 0 0 -> 200.0.0.3:80 Route 1 0 0
2、配置web節點服務器:
web節點服務器的VIP地址僅用來發送web響應數據包的源地址,並不須要監聽客戶機的訪問請求(由調度器監聽並分發)。所以使用虛接口lo:0來承載VIP地址,並添加一條路由記錄,將訪問VIP的數據包限制在本地。
一、配置虛擬IP地址(VIP):
[root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0 [root@web1 network-scripts]# vim ifcfg-lo:0 #編輯該文件,只保留如下四行,並配置VIP DEVICE=lo:0 IPADDR=200.0.0.254 NETMASK=255.255.255.255 #注意:子網掩碼必須是全爲1。也就是4個255。 ONBOOT=yes [root@LVS network-scripts]# systemctl restart network #重啓網卡使更改生效 [root@LVS network-scripts]# ifconfig #查詢VIP是否配置正確 ............................ lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 200.0.0.254 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback) [root@web1 ~]# route add -host 200.0.0.254 dev lo:0 #添加VIP本地訪問路由記錄 [root@web1 ~]# vim /etc/rc.local #設置開機自動添加這條路由記錄 ................................ /sbin/route add -host 200.0.0.254 dev lo:0
二、調整/proc響應參數:
[root@web1 ~]# vim /etc/sysctl.conf #調整/proc響應參數,寫入下面六行 ................... net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@web1 ~]# sysctl -p #刷新一下 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
三、安裝並啓動httpd服務(可根據需求選擇搭建Nginx仍是apache):
[root@web1 ~]# yum -y install httpd #安裝http服務 [root@web1 ~]# echo 1111111111111 > /var/www/html/index.html #準備測試網頁,等看到負載均衡的效果後,再掛載共享存儲設備。 [root@web1 ~]# systemctl start httpd #啓動http服務 [root@web1 ~]# systemctl enable httpd #設置爲開機自啓動
重複以上三個步驟,配置其餘web節點服務器(我這裏將另外一個web節點的首頁文件改成了:2222222222222222)。
3、client訪問VIP,以便測試LVS羣集:
若訪問到的是同一頁面,在排除配置上錯誤的狀況下,能夠打開多個網頁,或者稍等一會再刷新,由於它可能有一個保持鏈接的時間,因此會存在延遲。
4、配置NFS共享存儲:
測試出羣集效果後,就須要部署共享存儲,以便全部的web節點能夠向客戶機提供一樣的網頁文件,具體配置過程已經寫在了這篇博文的末尾:Centos 7基於NAT(地址轉換)模式的負載均衡配置詳解。