LVS負載均衡羣集——NAT地址轉換模式實戰(可跟做!)

負載均衡羣集(Load Balance Cluster)

以提高應用系統的響應能力、儘可能處理更多的訪問請求、減少延遲爲目標,獲得高併發、高負載(LB)的整體性能LB的負載分配依賴於主節點的分流算法

羣集的負載調度技術有三種工作模式

  1. 地址轉換(本文只介紹NAT模式)
  2. IP隧道
  3. 直接路由

NAT模式

地址轉換 (Network AddressTranslation)

  • 簡稱NAT模式,類似於防火牆的私有網絡結構,負載調度器作爲所有服務器節點的網關,即作爲客戶機的訪問入口,也是各節點回應客戶機的訪問出口
  • 服務器節點使用私有IP地址,與負載調度器位於同一一個物理網絡,安全性要優於其他兩種方式

負載均衡羣集架構

負載均衡的結構

  • 第一層,負載調度器(Load Balancer或Director)
  • 第二層,服務器池(Server Pool)
  • 第三層,共享存儲(Share Storage)

LVS的負載調度算法

輪詢(Round Robin)

將收到的訪問請求按照順序輪流分配給羣集中的各節點(真實服務器)均等地對待每一臺服務器,而不管服務器實際的連接數和系統負載

加權輪詢(Weighted Round Robin)

  • 根據真實服務器的處理能力輪流分配收到的訪問請求,調度器可以自動查詢各節點的負載情況,並動態調整其權重
  • 保證處理能力強的服務器承擔更多的訪問流量

最少連接(Least Connections)

根據真實服務器已建立的連接數進行分配,將收到的訪問請求優先分配給連接數最少的節點

加權最少連接(Weighted Least Connections)

  • 在服務器節點的性能差異較大的情況下,可以爲真實服務器自動調整權重
  • 權重較高的節點將承擔更大比例的活動連接負載

實驗操作

實驗環境

調度服務器(centos7):  
      外(ens36):12.0.0.1
      內(ens33):192.168.200.1
web服務器1(centos7):192.168.200.110
web服務器2(centos7):192.168.200.120
存儲服務器(centos7):192.168.200.130
client客戶端(win10):12.0.0.12

1、驗證存儲服務器是否安裝相關服務

[root@localhost ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.48.el7.x86_64   #已安裝
[root@localhost ~]# rpm -q rpcbind
rpcbind-0.2.0-42.el7.x86_64   #已安裝
[root@localhost ~]# 

2、分別驗證兩臺web服務器是否安裝httpd服務,若沒有,則安裝

第一臺:
[root@localhost ~]# rpm -q httpd
未安裝軟件包 httpd 
[root@localhost ~]# yum install httpd -y
.................//省略安裝過程
[root@localhost ~]#

第二臺:
[root@localhost ~]# rpm -q httpd
未安裝軟件包 httpd 
[root@localhost ~]# yum install httpd -y
.................//省略安裝過程
[root@localhost ~]#

3、驗證調度服務器是否有管理工具,若沒有,則安裝

[root@localhost ~]# rpm -q ipvsadm
未安裝軟件包 ipvsadm 
[root@localhost ~]# yum install ipvsadm -y
.................//省略安裝過程
[root@localhost ~]#

一、配置調度服務器

1、將配置服務器的網絡模式改爲僅主機

2、配置存儲服務器,固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #dhcp改爲static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=09073596-a7cf-404c-a098-28c3ff58c44b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.130   #IP地址
NETMASK=255.255.255.0   #子網掩碼
GATEWAY=192.168.200.1   #網關
[root@localhost ~]# systemctl restart network   #重啓網絡服務
[root@localhost ~]# ifconfig    #查看網卡信息,ip設置成功
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.130  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::5134:22f5:842b:5201  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:0d:f1:75  txqueuelen 1000  (Ethernet)
        RX packets 818  bytes 69866 (68.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 319  bytes 44103 (43.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、關閉防火牆,開啓存儲共享服務

[root@localhost ~]# systemctl stop firewalld.service    #關閉防火牆
[root@localhost ~]# setenforce 0   #關閉增強性安全功能
[root@localhost ~]# 
[root@localhost ~]# systemctl start nfs.service   #開啓nfs服務
[root@localhost ~]# systemctl start rpcbind   #開啓rpcbind服務
[root@localhost ~]# 

4、修改配置文件/etc/exports

[root@localhost ~]# vim /etc/exports
/usr/share *(ro,sync)   #共享目錄給所有用戶,權限制度
/opt/abc/ 192.168.200.0/24(rw,sync)   #共享目錄到固定網段用戶,權限讀寫
/opt/xyz/ 192.168.200.0/24(rw,sync)   #共享目錄到固定網段用戶,權限讀寫

5、創建共享目錄,並授予權限

[root@localhost ~]# cd /opt/
[root@localhost opt]# ls
rh
[root@localhost opt]# mkdir abc xyz   #創建目錄
[root@localhost opt]# ll
總用量 0
drwxr-xr-x. 2 root root 6 11月 26 17:33 abc
drwxr-xr-x. 2 root root 6 3月  26 2015 rh
drwxr-xr-x. 2 root root 6 11月 26 17:33 xyz
[root@localhost opt]# chmod 777 abc xyz   #授權
[root@localhost opt]# ll
總用量 0
drwxrwxrwx. 2 root root 6 11月 26 17:33 abc
drwxr-xr-x. 2 root root 6 3月  26 2015 rh
drwxrwxrwx. 2 root root 6 11月 26 17:33 xyz
[root@localhost opt]# 

6、重新加載配置

[root@localhost opt]# exportfs -rv
exporting 192.168.200.0/24:/opt/xyz
exporting 192.168.200.0/24:/opt/abc
exporting *:/usr/share
[root@localhost opt]# 

二、web服務器1的配置

1、修改web服務器1的網絡模式爲僅主機

2、配置固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #dhcp改爲static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3ceed540-b04c-48d6-a4f7-79951f09ea1d
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.110   #IP地址
NETMASK=255.255.255.0   #子網掩碼
GATEWAY=192.168.200.1   #網關
[root@localhost ~]# systemctl restart network   #重啓網絡服務
[root@localhost ~]# ifconfig    #查看網卡信息,ip設置成功
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.110  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::3e1d:31ba:f66a:6f80  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:27:1c:3f  txqueuelen 1000  (Ethernet)
        RX packets 12581  bytes 15759224 (15.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6118  bytes 501343 (489.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、關閉防火牆,並開啓http服務

[root@localhost ~]# systemctl stop firewalld.service    #關閉防火牆
[root@localhost ~]# setenforce 0   #關閉增強性安全功能 
[root@localhost ~]# systemctl start httpd.service    #開啓http服務
[root@localhost ~]# netstat -ntap | grep 80   #查看端口
tcp6       0      0 :::80                   :::*                    LISTEN      50076/httpd         
[root@localhost ~]# 

4、查看NFS服務共享信息

[root@localhost ~]# showmount -e 192.168.200.130
Export list for 192.168.200.130:
/usr/share *
/opt/xyz   192.168.200.0/24
/opt/abc   192.168.200.0/24
[root@localhost ~]# 

5、掛載NFS的共享目錄,並查看是否掛載成功

[root@localhost ~]# mount.nfs 192.168.200.130:/opt/abc /var/www/html/   #掛載
[root@localhost ~]# df -h   #查看掛載信息
文件系統                  容量  已用  可用 已用% 掛載點
/dev/sda2                  20G  3.4G   17G   17% /
devtmpfs                  898M     0  898M    0% /dev
tmpfs                     912M     0  912M    0% /dev/shm
tmpfs                     912M   18M  895M    2% /run
tmpfs                     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5                  10G   37M   10G    1% /home
/dev/sda1                 6.0G  174M  5.9G    3% /boot
tmpfs                     183M  4.0K  183M    1% /run/user/42
tmpfs                     183M   40K  183M    1% /run/user/0
192.168.200.130:/opt/abc   20G  3.3G   17G   17% /var/www/html   #掛載成功
[root@localhost ~]# 

6、在掛載目錄創建首頁文件,並在存儲服務器,查看是否創建文件成功

web服務器1:
[root@localhost ~]# echo "this is abc web" > /var/www/html/index.html   #創建首頁文件
[root@localhost ~]# 

存儲服務器:
[root@localhost opt]# cd abc/
[root@localhost abc]# ls
index.html    #創建成功
[root@localhost abc]#

三、web服務器2的配置

1、修改web服務器2的網絡模式爲僅主機

2、配置固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #將dhcp改爲static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=8ecd53ce-afdb-46f8-b7ff-b2f428a3bc8f
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.120   #IP地址
NETMASK=255.255.255.0   #子網掩碼
GATEWAY=192.168.200.1   #網關
[root@localhost ~]# systemctl restart network   #重啓網絡服務
[root@localhost ~]# ifconfig    #查看網卡信息,ip設置成功
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.120  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::c776:9d00:618:88f2  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:eb:34:07  txqueuelen 1000  (Ethernet)
        RX packets 13713  bytes 15997026 (15.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5590  bytes 452930 (442.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、關閉防火牆,並開啓http服務

[root@localhost ~]# systemctl stop firewalld.service    #關閉防火牆
[root@localhost ~]# setenforce 0   #關閉增強性安全功能 
[root@localhost ~]# systemctl start httpd.service    #開啓http服務
[root@localhost ~]# netstat -ntap | grep 80   #查看端口
tcp6       0      0 :::80                   :::*                    LISTEN      50572/httpd      
[root@localhost ~]# 

4、查看NFS服務共享信息

[root@localhost ~]# showmount -e 192.168.200.130
Export list for 192.168.200.130:
/usr/share *
/opt/xyz   192.168.200.0/24
/opt/abc   192.168.200.0/24
[root@localhost ~]# 

5、掛載NFS的共享目錄,並查看是否掛載成功

[root@localhost ~]# mount.nfs 192.168.200.130:/opt/xyz /var/www/html/   #掛載
[root@localhost ~]# df -h   #查看掛載信息
文件系統                  容量  已用  可用 已用% 掛載點
/dev/sda2                  20G  3.4G   17G   17% /
devtmpfs                  898M     0  898M    0% /dev
tmpfs                     912M     0  912M    0% /dev/shm
tmpfs                     912M   18M  895M    2% /run
tmpfs                     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5                  10G   37M   10G    1% /home
/dev/sda1                 6.0G  174M  5.9G    3% /boot
tmpfs                     183M  4.0K  183M    1% /run/user/42
tmpfs                     183M   40K  183M    1% /run/user/0
192.168.200.130:/opt/xyz   20G  3.3G   17G   17% /var/www/html   #掛載成功
[root@localhost ~]# 

6、在掛載目錄創建首頁文件,並在存儲服務器,查看是否創建文件成功

web服務器2:
[root@localhost ~]# echo "this is xyz web" > /var/www/html/index.html   #創建首頁文件
[root@localhost ~]# 

存儲服務器:
[root@localhost abc]# cd ../xyz/
[root@localhost xyz]# ls
index.html    #創建成功
[root@localhost xyz]#

四、調度服務器的配置

1、給調度服務器添加一塊網卡,把兩個網卡的網絡模式都改爲僅主機

2、修改ens33網卡配置文件,設置固定IP

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #將dhcp改爲static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c96bc909-188e-ec64-3a96-6a90982b08ad
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.1   #IP地址
NETMASK=255.255.255.0   #子網掩碼

3、修改ens36網卡配置文件,設置固定IP

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36   #複製一份ens33的配置文件作爲ens36配置文件
[root@localhost network-scripts]# vim ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #將dhcp改爲static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36   #ens33改爲ens36,並刪除UUID
DEVICE=ens36   #ens33改爲ens36
ONBOOT=yes
IPADDR=12.0.0.1   #IP地址
NETMASK=255.255.255.0   #子網掩碼

4、重啓網絡服務,檢查IP配置是否成功

[root@localhost network-scripts]# systemctl restart network   #重啓網絡服務
[root@localhost network-scripts]# ifconfig    #查看網卡信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.1  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::28ad:c7f1:25e8:8708  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:95:9b:1b  txqueuelen 1000  (Ethernet)
        RX packets 11757  bytes 12899133 (12.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4731  bytes 325771 (318.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.1  netmask 255.255.255.0  broadcast 12.0.0.255
        inet6 fe80::10ce:358b:94ed:c4e9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:95:9b:25  txqueuelen 1000  (Ethernet)
        RX packets 130  bytes 10117 (9.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 178  bytes 30232 (29.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5、修改配置文件/etc/sysctl.conf

[root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1   #開啓路由功能
[root@localhost ~]# sysctl -p   #重新加載/etc/sysctl.conf中配置
net.ipv4.ip_forward = 1
[root@localhost ~]# 

6、配置NAT轉換

[root@localhost ~]# iptables -t nat -F   #清除nat緩存
[root@localhost ~]# iptables -F   #清除規則
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
#配置NAT轉換
[root@localhost ~]# 

7、開啓ipvsadm服務

[root@localhost ~]# modprobe ip_vs   #啓動模塊
[root@localhost ~]# cat /proc/net/ip_vs   #查看服務信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm   #保存服務配置
[root@localhost ~]# systemctl start ipvsadm.service    #開啓服務
[root@localhost ~]#

8、添加ipvsadm服務腳本,並執行

[root@localhost ~]# cd /opt/   #切換目錄
[root@localhost opt]# vim nat.sh   #編輯腳本
#!/bin/bash
ipvsadm -C   #清除內核虛擬服務器表中的所有記錄
ipvsadm -A -t 12.0.0.1:80 -s rr   #增加一臺新的虛擬服務器
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.110:80 -m   #在虛擬服務器中增加一臺新的真實服務器。
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.120:80 -m   #在虛擬服務器中增加一臺新的真實服務器。
ipvsadm   #開啓服務
[root@localhost opt]# source nat.sh    #執行腳本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http rr
  -> 192.168.200.110:http         Masq    1      0          0         
  -> 192.168.200.120:http         Masq    1      0          0         
[root@localhost opt]# 

ipvsadm相關可選項含義:
-A:在內核的虛擬服務器列表中添加一條新的虛擬服務器記錄。也就是增加一臺新的虛擬服務器。虛擬服務器地址由三元組唯一定義:IP地址,端口號和協議。虛擬服務器也可以由防火牆標記定義。
-C:清除內核虛擬服務器表中的所有記錄。
-a:在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增加一臺新的真實服務器。
-t:說明虛擬服務器提供的是tcp 的服務。
-s:將TCP連接和UDP數據報分配給真實服務器的算法。
-m:使用僞裝(網絡訪問轉換或NAT)。
rr:輪詢,調度器通過”輪詢”調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載。
wrr:加權輪詢,調度器通過”加權輪詢”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。
lc:最少連接,當有新的作業到達時,調度器選擇一個當前作業量較少的真實服務器,並把新到達的作業分配給它。如果集羣系統的真實服務器具有相近的系統性能,採用”最小連接”調度算法可以較好地均衡負載。
wlc:加權最小連接,將更多的作業分配給作業較少且相對於權重較高(Ci / Wi)的服務器。這是默認值。

五、測試負載均衡羣集NAT模式

1、修改win10主機網絡模式爲僅主機

2、修改win10主機IP地址

3、關閉win10主機防火牆

4、用win10主機訪問IP地址:12.0.0.1

5、再次刷新瀏覽器,由於採用輪詢算法,頁面轉到另一個主頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章