1.一、環境介紹linux
本實驗用三臺虛擬機完成,一臺虛擬機模擬lvs調度器,兩塊網卡,一塊模擬公網一塊模擬私網,公網地址192.168.0.201/24,私網地址192.168.4.130/24,另外兩臺虛擬機分別模擬一臺後端web服務器。IP地址分別爲192.168.4.128/24,192.168.4.129/24,兩臺web服務器經過私網地址和調度服務器鏈接,此例一權重輪訓方式爲例。經過訪問192.168.0.201達到輪訓兩臺web服務器。若是兩臺web服務器的資源是同樣的就能夠達到web服務器的負載均衡。web
1.二、環境準備算法
兩臺web服務器起web服務,配置默認首頁,首頁內容分別爲二者的IP地址。這裏不詳細介紹。vim
配置三臺服務器的IP地址。後端
配置命令:centos
lvs服務器: 服務器
1 nmcli connection modi ens34 ipv4.method manual ipv4.addresses 192.168.4.130/24 ipv4.gateway 192.168.4.2 ipv4.dns 114.114.114.114 connection.autoconnect yes 2 nmcli connection up ens34 3 nmcli connection modi ens33 ipv4.method manual ipv4.addresses 192.168.0.201/24 ipv4.gateway 192.168.4.2 ipv4.dns 114.114.114.114 connection.autoconnect yes 4 nmcli connection up ens33
web服務器:網絡
1 nmcli connection modi ens34 ipv4.method manual ipv4.addresses 192.168.4.128/24 ipv4.gateway 192.168.4.130 ipv4.dns 114.114.114.114 connection.autoconnect yes #這裏網關必須是lvs服務器內網的IP地址 2 nmcli connection up ens34
1 nmcli connection modi ens34 ipv4.method manual ipv4.addresses 192.168.4.129/24 ipv4.gateway 192.168.4.130 ipv4.dns 114.114.114.114 connection.autoconnect yes #這裏網關必須是lvs服務器內網的IP地址 2 nmcli connection up ens34
1.三、配置lvs調度服務器負載均衡
1.3.一、安裝ipvsadm工具curl
lvs是linux內置的功能模塊,是集成在內核中的,可是須要ipvsadm工具來傳遞命令給內核才能使用。
命令:
1 yum -y install ipvsadm
1.3.二、配置調度器
[root@client ~]# ipvsadm -A -t 192.168.0.201:80 -s wrr [root@client ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.201:80 wrr [root@client ~]# ipvsadm -a -t 192.168.0.201:80 -r 192.168.4.128 -w 2 -m [root@client ~]# ipvsadm -a -t 192.168.0.201:80 -r 192.168.4.129 -w 1 -m [root@client ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.201:80 wrr -> 192.168.4.128:80 Masq 2 0 0
-> 192.168.4.129:80 Masq 1 0 0 [root@client ~]#
1.3.三、測試負載均衡
測試成功,兩臺web服務器經過訪問192.168.0.201,實際訪問的是192.168.4.128和192.168.4.129,且是加權輪訓,128的權重是2,訪問時輪訓2次後,訪問另外一臺web,因此纔出現上述結果。
使用LVS實現DR模式的集羣調度服務器,爲用戶提供Web服務:
說明:
CIP是客戶端的IP地址;
VIP是對客戶端提供服務的IP地址;
RIP是後端服務器的真實IP地址;
DIP是調度器與後端服務器通訊的IP地址(VIP必須配置在虛擬接口)。
使用4臺虛擬機,1臺做爲客戶端、1臺做爲Director調度器、2臺做爲Real Server,拓撲結構如圖-2所示。實驗拓撲結構主機配置細節如表-4所示。
實現此案例須要按照以下步驟進行。
說明:
CIP是客戶端的IP地址;
VIP是對客戶端提供服務的IP地址;
RIP是後端服務器的真實IP地址;
DIP是調度器與後端服務器通訊的IP地址(VIP必須配置在虛擬接口)。
步驟一:配置實驗網絡環境
注意:爲了防止衝突,VIP必需要配置在網卡的虛擬接口。
重啓網卡,可是重啓網卡後可能不生效,須要將另外一個網卡管理程序關掉(通常在rhel7和centos7以上的版本中會出現這種狀況)
命令:
1 nmcli connect modif ens33 ipv4.method manual ipv4.address 192.168.0.19/24 ipv4.gateway 192.168.0.1 ipv4.dns 114.114.114.114 connection.autoconnect yes 2 nmcli connect up ens3
接下來給web1配置VIP地址。
注意:這裏的子網掩碼必須是32(也就是全255),網絡地址與IP地址同樣,廣播地址與IP地址也同樣。
配置完web1的VIP後先不急着重啓網卡,由於直接重啓會發生地址衝突的狀況,由於同一個網絡中存在多個VIP,會形成網絡中地址衝突。
防止地址衝突的問題:
這裏由於web1也配置與代理同樣的VIP地址,默認確定會出現地址衝突;
sysctl.conf文件寫入這下面四行的主要目的就是訪問192.168.0.202的數據包,只有調度器會響應,其餘主機都不作任何響應,這樣防止地址衝突的問題。
1 vim /etc/sysctl.conf 2 #手動寫入以下4行內容 3 net.ipv4.conf.all.arp_ignore = 1
4 net.ipv4.conf.lo.arp_ignore = 1
5 net.ipv4.conf.lo.arp_announce = 2
6 net.ipv4.conf.all.arp_announce = 2
7 #當有arp廣播問誰是192.168.4.15時,本機忽略該ARP廣播,不作任何迴應 8 #本機不要向外宣告本身的lo迴環地址是192.168.4.15
9 sysctl -p #這條命令會讓/etc/sysctl.conf當即生效,或者直接重啓服務器
重啓網卡後查看網卡,會發現出現一個虛擬網卡ens33:0
配置步驟和配置web1的步驟同樣,只須要把RIP的地址改成192.168.0.127.這裏不作詳細介紹,按照web1 的配置步驟就能夠。
httpd,安裝配置啓服務,這裏不作介紹,2臺web服務器的主頁分別是192.168.4.128和192.168.4.129.
1 [root@proxy ~]# ipvsadm -C #清空全部規則 2 [root@proxy ~]# ipvsadm -A -t 192.168.0.202:80 -s wrr
[root@proxy ~]# ipvsadm -a -t 192.168.0.202:80 -r 192.168.0.19 -g -w 1 [root@proxy ~]# ipvsadm -a -t 192.168.0.202:80 -r 192.168.0.127 -g -w 2
1 [root@client network-scripts]# ipvsadm -e -t 192.168.0.202:80 -r 192.168.0.127 -w 2 -g 2 [root@client network-scripts]# ipvsadm -Ln 3 IP Virtual Server version 1.2.1 (size=4096) 4 Prot LocalAddress:Port Scheduler Flags 5 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 6 TCP 192.168.0.202:80 rr 7 -> 192.168.0.19:80 Route 1 0 0
8 -> 192.168.0.127:80 Route 2 0 0
9 [root@client network-scripts]#
在客戶端192.168.0.6上使用curl命令反覆鏈接http://192.168.0.202,查看訪問的頁面是否會輪詢到不一樣的後端真實服務器。