1. 程式人生 > 其它 >LVS+NAT模式

LVS+NAT模式

搭建負載均衡叢集:

就是讓多臺伺服器均衡地去承載壓力。實現負載均衡叢集的開源軟體LVS、keepalived、haproxy、Nginx

LVS根據實現方式的不同,主要分為三種類型:NAT模式、IPTunnel(IP隧道)模式、DR模式

NAT模式

這種模式的實現原理很簡單,排程器會把使用者的請求通過預設的iptables規則轉發給後端的真實伺服器。其中排程器有兩個IP,一個是公網IP,一個是內網IP,而真實伺服器只有內網IP。使用者訪問的時候請求的是排程器的公網IP,它會把使用者的請求轉發到真實伺服器的內網IP上。這種模式的好處是節省公網IP,但是排程器會成為一個瓶頸。NAT模式架構如下圖所示:

也需要安裝nginx,可參考上一篇部落格

一 NAT模式LVS搭建

NET模式下,排程器需要有兩個IP,一個公網IP一個內網IP,真實伺服器只需要內網IP。此架構需要準備三臺虛擬機器。三臺虛擬機器的IP分配如下:

排程器dir:192.168.200.95(內網IP,vmware為NAT模式),192.168.100.139(公網IP,vmware僅主機模式)。

真實伺服器rs1:192.168.200.56(內網IP)

真實伺服器rs2:192.168.200.53(內網IP)

首先,真實伺服器rs1(192.168.200.56)和rs2(192.168.200.53)上要把內網的閘道器設定為dir的內網IP(192.168.200.95),否則實驗無法成功。然後,把三臺伺服器上的iptables規則清空並儲存,命令如下:

# iptables -F; iptables -t nat -F; service iptables save         //三臺機器上都要執行

在dir上安裝ipvsadm,這是實現LVS的核心工具:

[root@dir ~]# yum install -y ipvsadm

繼續在dir上編寫一個指令碼

[root@dir ~]# vim /usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 伺服器上開啟路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 
0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意區分網絡卡名字 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens34/send_redirects # director 設定nat防火牆 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE # director設定ipvsadm IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C $IPVSADM -A -t 192.168.100.139:80 -s wlc -p 300 $IPVSADM -a -t 192.168.100.139:80 -r 192.168.200.131:80 -m -w 1 $IPVSADM -a -t 192.168.100.139:80 -r 192.168.200.132:80 -m -w 1

指令碼編寫完成後,直接執行,命令如下:

[root@dir ~]# bash /usr/local/sbin/lvs_nat.sh

下面測試LVS的效果,如果dir上有Nginx伺服器,需要先把它關閉,否則會影響實驗效果:

[root@dir ~]# killall nginx

為了更容易方便區分,分別需要給56、53設定一個預設主頁,命令如下:

[root@rs1 ~]# echo "rs1" > /usr/share/nginx/html/index.html    //56上執行
[root@rs2 ~]# echo "rs2" > /usr/local/nginx/html/index.html    //53上執行

在dir上分別訪問兩個rs,如下所示:

[root@dir ~]# curl 192.168.200.56rs1

[root@dir ~]# curl 192.168.200.53rs2

這樣就區分rs1和rs2,然後直接在dir上訪問dir的外網(192.168.100.139),結果如下:

[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2

連續多次訪問,一直請求在rs2上,是因為指令碼中有設定-p引數,理論上在300秒內會一直請求在rs2上。重新編輯/usr/local/sbin/lvs_nat.sh指令碼把-p引數刪除,然後再次測試,結果如下:

[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs1
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs1
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs1

這樣就做到了均衡訪問。