一:DR模式工做流程php
VS-DR:Virtual Server via Direct Routing 直接路由的虛擬服務器linux
VS(virtual server)nginx
VIP: 接收客戶端請求vim
DIP:發送請求給RS的RIP服務器
RS (real server)網絡
RIP:接收請求 ide
VIP:響應請求給客戶端php-fpm
注意:測試
①四個IP都爲公網地址網站
②RS與VS的VIP相同,且都爲公網IP
③當處於同一局域網的LVS的VIP與RS的VIP相同時,能夠經過修改內核參數,使RS的VIP禁止廣播,使其只用來回應用戶請求,且兩VIP不衝突。
④只有局域網間通訊纔用到MAC地址
具體工做流程
(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內 核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至 INPUT鏈
(c) IPVS比對數據包請求的服務是否爲集羣服務,如果,將請求報文 中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改RIP 的MAC地址,而後將數據包發至POSTROUTING鏈。 此時的源IP和 目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標 MAC地址爲RIP的MAC地址
(d) 因爲DS和RS在同一個網絡中,因此是經過二層來傳輸。 POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時 數據包將會發至Real Server。
(e) RS發現請求報文的MAC地址是本身的MAC地址,就接收此報文 。處理完成以後,將響應報文經過lo接口傳送給eth0網卡而後向外發 出。 此時的源IP地址爲VIP,目標IP爲CIP
(f) 響應報文最終送達至客戶端
二:實驗環境
VS一臺:
VIP:172.17.252.1(eth0:0 橋接模式)
RS兩臺:
RS1
RIP:172.17.250.121
VIP:172.17.252.1(lo:0)
RS2
RIP:172.17.250.122
VIP:172.17.252.1(lo:0)
三:實驗前準備
1.確保兩臺RS上都有基於LNMP的測試網站(LNMP網站搭建過程可見博客:http://13172823.blog.51cto.com/13162823/1978924)
2.VS
①安裝ipvsadm管理軟件
[root@vs ~]# yum install ipvsadm -y
②清除防火牆策略並關閉SElinux
[root@vs ~]# iptables -F&&setenforce 0
③檢測內核是否支持ipvs模塊
[root@vs ~]# grep -i -C 10 "ipvs" /boot/config-2.6.32-696.el6.x86_64
四:實驗步驟
※操做環境:VS
1.配置eth0:0爲VIP,並只能廣播本身
ifconfig eth0:0 172.17.252.1 broadcast 172.17.252.1 netmask 255.255.255.255 up
2.配置VIP路由表
route add -host 172.17.252.1 dev eth0:0
3.建立基於80端口的VS,調度方式爲wrr
ipvsadm -A -t 172.17.252.1:80 -s wrr
4.添加RS一、RS2,權重爲1
ipvsadm -a -t 172.17.252.1:80 -r 172.17.250.121:80 -g -w 1
ipvsadm -a -t 172.17.252.1:80 -r 172.17.250.122:80 -g -w 1
5.修改內核配置,開啓VS路由轉發功能
①編輯配置文件
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
②使配置文件生效
sysctl -p
※操做環境:RS一、2
1.配置VIP到 lo:0,且只對本身廣播
ifconfig lo:0 172.17.252.1 broadcast 172.17.252.1 netmask 255.255.255.255 up ifconfig lo:0 172.17.252.1 broadcast 172.17.252.1 netmask 255.255.255.255 up
2.配置lo:0路由
route add -host 172.17.252.1 lo:0
3.只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
4.對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
5.關閉arp應答
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
相關知識點:
「1」:僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,纔給予響應
「2」:必須避免將接口信息向非本網絡進行通告
6.確保RS的nginx、php-fpm、mariadb服務開啓