DR模式是lvs集羣中三種負載均衡模式的其中一種,那麼上一篇中我寫啦關於NAT模式的搭建與原理,爲何還要有DR模式與IP隧道模式呢?html
首先咱們來看3張圖。LVS/NAT模式以下圖:linux
LVS/IP隧道模式,以下圖:nginx
LVS/DR模式,以下圖。web
上面三張圖來自:http://www.linuxvirtualserver.org/zh/lvs3.html ,此文也正式是官方詳細描述LVS集羣中實現的三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR)的工做原理,以及它們的優缺點的文章,推薦你們要詳細看看。算法
這裏我簡述總結下他們的路由方式以及作一個區別:服務器
VS/NAT模式:客戶機-->請求分發服務器-->Real Server-->請求分發服務器--->客戶機。網絡
VS/DR模式:客戶機-->請求分發服務器-->Real Server-->客戶機。架構
VS/TUN模式:客戶機-->請求分發服務器-->Real Server-->客戶機。負載均衡
由此能夠看出,NAT模式的請求分發服務器會成爲這個模式的瓶頸所在,由於全部請求與響應走要通過他轉發。那麼IP隧道模式與DR模式的區別在於,DR模式與IP隧道模式相比,DR模式沒有IP封裝的開銷,但因爲採用物理層(修改MAC地址)技術,全部服務器都必須在同一個物力網段中。ide
首先我先上個人總體搭建機器的架構圖上來,以便更直觀的搭建與理解。
首先配置分發器這臺機器,操做很簡單,跟着作就能夠啦。
[root@localhost network-scripts]# ifconfig eth0:1 172.18.8.6 netmask 255.255.255.255 --此接口只是臨時生效,下面須要配置的是永久生效 [root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1
[root@localhost network-scripts]# cat ifcfg-eth0:1 TYPE="Ethernet" BOOTPROTO="static" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" NAME="eth0:1" DEVICE="eth0:1" ONBOOT="yes" IPADDR="172.18.8.6" NETMASK="225.225.225.0" HWADDR="00:0c:29:af:ff:3a"
[root@localhost network-scripts]# ipvsadm -A -t 172.18.8.6:80 -s rr [root@localhost network-scripts]# ipvsadm -a -t 172.18.8.6:80 -r 172.18.8.5 -g [root@localhost network-scripts]# ipvsadm -a -t 172.18.8.6:80 -r 172.18.8.4 -g
到此,分發器這臺機器就配置完成啦。
而後配置Real Server
[root@localhost ~]# ifconfig lo:1 172.18.8.6 netmask 255.255.255.255 [root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@localhost network-scripts]# cat ifcfg-lo:1 CE=lo:1 IPADDR=272.18.8.6 NETMASK=255.255.255.255 # If you're having problems with gated making 127.0.0.0/8 a martian, # # you can change this to something else (255.255.255.255, for example) ONBOOT=yes NAME=loopback
[root@localhost network-scripts]# echo "1">"/proc/sys/net/ipv4/conf/eno16777736/arp_ignore" [root@localhost network-scripts]# echo "2">"/proc/sys/net/ipv4/conf/eno16777736/arp_announce" [root@localhost network-scripts]# cat /etc/sysctl.conf # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5). net.ipv4.conf.eno16777736.arp_ignore=1 net.ipv4.conf.eno16777736.arp_announce=2
[root@localhost network-scripts]# /usr/sbin/nginx
直接聯通realserver,沒問題,以下。
訪問分發器ip,作到啦輪詢效果,以下。
arp響應限制arp_ignore:
arp響應限制arp_announce:對網絡接口上,本地IP地址的發出的,ARP迴應,做出相應級別的限制: 肯定不一樣程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口
在dr模式中咱們的realserver配置arp_ignore爲1:意思是否是eno16777736所在ip的請求,我不與應答。arp_announce爲2:意思是我不對外公佈我有出來eno16777736所在ip以外的任何ip,避免主動宣告ip使arp廣播包發送過來,作出應答。
接下來是你們最喜歡的總結內容啦,內容有二,以下:
一、但願能關注我其餘的文章。
二、博客裏面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流羣,咱們一塊兒學習探討。