1. 程式人生 > >叢集及LVS簡介 LVS-NAT叢集 LVS-DR叢集

叢集及LVS簡介 LVS-NAT叢集 LVS-DR叢集

Top

NSD CLUSTER DAY02

1 案例1:ipvsadm命令用法

1.1 問題

準備一臺Linux伺服器,安裝ipvsadm軟體包,練習使用ipvsadm命令,實現如下功能:

  • 使用命令新增基於TCP一些的叢集服務
  • 在叢集中新增若干臺後端真實伺服器
  • 實現同一客戶端訪問,排程器分配固定伺服器
  • 會使用ipvsadm實現規則的增、刪、改
  • 儲存ipvsadm規則

1.2 方案

安裝ipvsadm軟體包,關於ipvsadm的用法可以參考man ipvsadm資料。

常用ipvsadm命令語法格式如表-1及表-2所示。

表-1 ipvsadm命令選項

表-2 ipvsadm語法案例

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:使用命令增、刪、改LVS叢集規則

1)建立LVS虛擬叢集伺服器(演算法為加權輪詢:wrr)

  1. [[email protected] ~]# yum -y install ipvsadm
  2. [[email protected] ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr
  3. [[email protected] ~]# ipvsadm -Ln
  4. IP Virtual Server version 1.2.1 (size=4096)
  5. Prot LocalAddress:Port Scheduler Flags
  6. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  7. TCP 192.168.4.5:80 wrr

2)為叢集新增若干real server

  1. [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -m -w 1
  2. [[email protected] ~]# 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.4.5:80 wrr
  7. -> 192.168.2.100:80 Masq 1 0 0
  8. [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -m -w 2
  9. [[email protected] ~]# ipvsadm –a -t 192.168.4.5:80 -r 192.168.2.201 -m -w 3
  10. [[email protected] ~]# ipvsadm –a -t 192.168.4.5:80 -r 192.168.2.202 -m -w 4

3)修改叢集伺服器設定(修改排程器演算法,將加權輪詢修改為輪詢)

  1. [[email protected] ~]# ipvsadm -E -t 192.168.4.5:80 -s rr
  2. [[email protected] ~]# 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.4.5:80 rr
  7. -> 192.168.2.100:80 Masq 1 0 0
  8. -> 192.168.2.200:80 Masq 2 0 0
  9. -> 192.168.2.201:80 Masq 2 0 0
  10. -> 192.168.2.202:80 Masq 1 0 0

4)修改read server(使用-g選項,將模式改為DR模式)

  1. [[email protected] ~]# ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.202 -g

5)檢視LVS狀態

  1. [[email protected] ~]# ipvsadm -Ln

6)建立另一個叢集(演算法為最少連線演算法;使用-m選項,設定工作模式為NAT模式)

  1. [[email protected] ~]# ipvsadm -A -t 192.168.4.5:3306 -s lc
  2. [[email protected] ~]# ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.100 -m
  3. [[email protected] ~]# ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.200 -m

6)永久儲存所有規則

  1. [[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

7)清空所有規則

  1. [[email protected] ~]# ipvsadm -C

2 案例2:部署LVS-NAT叢集

2.1 問題

使用LVS實現NAT模式的叢集排程伺服器,為使用者提供Web服務:

  • 叢集對外公網IP地址為192.168.4.5
  • 排程器內網IP地址為192.168.2.5
  • 真實Web伺服器地址分別為192.168.2.100、192.168.2.200
  • 使用加權輪詢排程演算法,真實伺服器權重分別為1和2

2.2 方案

實驗拓撲結構主機配置細節如表-3所示。

表-3

使用4臺虛擬機器,1臺作為Director排程器、2臺作為Real Server、1臺客戶端,拓撲結構如圖-1所示,注意:web1和web2必須配置閘道器地址。

圖-1

2.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:配置基礎環境

1)設定Web伺服器(以web1為例)

  1. [[email protected] ~]# yum -y install httpd
  2. [[email protected] ~]# echo "192.168.2.100" > /var/www/html/index.html

2)啟動Web伺服器軟體

  1. [[email protected] ~]# systemctl restart httpd

3)關閉防火牆與SELinux

  1. [[email protected] ~]# systmctl stop firewalld
  2. [[email protected] ~]# setenforce 0

步驟三:部署LVS-NAT模式排程器

1)確認排程器的路由轉發功能(如果已經開啟,可以忽略)

  1. [[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
  2. [[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
  3. 1
  4. [[email protected] ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  5. #修改配置檔案,設定永久規則

2)建立叢集伺服器

  1. [[email protected] ~]# yum -y install ipvsadm
  2. [[email protected] ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr

2)新增真實伺服器

  1. [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m
  2. [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 1 -m

3)檢視規則列表,並儲存規則

  1. [[email protected] ~]# ipvsadm -Ln
  2. [[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

步驟四:客戶端測試

客戶端使用curl命令反覆連線http://192.168.4.5,檢視訪問的頁面是否會輪詢到不同的後端真實伺服器。

3 案例3:部署LVS-DR叢集

3.1 問題

使用LVS實現DR模式的叢集排程伺服器,為使用者提供Web服務:

  • 客戶端IP地址為192.168.4.10
  • LVS排程器VIP地址為192.168.4.15
  • LVS排程器DIP地址設定為192.168.4.5
  • 真實Web伺服器地址分別為192.168.4.100、192.168.4.200
  • 使用加權輪詢排程演算法,web1的權重為1,web2的權重為2

說明:

CIP是客戶端的IP地址;

VIP是對客戶端提供服務的IP地址;

RIP是後端伺服器的真實IP地址;

DIP是排程器與後端伺服器通訊的IP地址(VIP必須配置在虛擬介面)。

3.2 方案

使用4臺虛擬機器,1臺作為客戶端、1臺作為Director排程器、2臺作為Real Server,拓撲結構如圖-2所示。實驗拓撲結構主機配置細節如表-4所示。

圖-2

表-4

3.3 步驟

實現此案例需要按照如下步驟進行。

說明:

CIP是客戶端的IP地址;

VIP是對客戶端提供服務的IP地址;

RIP是後端伺服器的真實IP地址;

DIP是排程器與後端伺服器通訊的IP地址(VIP必須配置在虛擬介面)。

步驟一:配置實驗網路環境

1)設定Proxy代理伺服器的VIP和DIP

注意:為了防止衝突,VIP必須要配置在網絡卡的虛擬介面!!!

  1. [[email protected] ~]# cd /etc/sysconfig/network-scripts/
  2. [[email protected] ~]# cp ifcfg-eth0{,:0}
  3. [[email protected] ~]# vim ifcfg-eth0
  4. TYPE=Ethernet
  5. BOOTPROTO=none
  6. NAME=eth0
  7. DEVICE=eth0
  8. ONBOOT=yes
  9. IPADDR=192.168.4.5
  10. PREFIX=24
  11. [[email protected] ~]# vim ifcfg-eth0:0
  12. TYPE=Ethernet
  13. BOOTPROTO=none
  14. DEFROUTE=yes
  15. NAME=eth0:0
  16. DEVICE=eth0:0
  17. ONBOOT=yes
  18. IPADDR=192.168.4.15
  19. PREFIX=24
  20. [[email protected] ~]# systemctl restart network

2)設定Web1伺服器網路引數

  1. [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual \
  2. ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
  3. [[email protected] ~]# nmcli connection up eth0

接下來給web1配置VIP地址。

注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。

  1. [[email protected] ~]# cd /etc/sysconfig/network-scripts/
  2. [[email protected] ~]# cp ifcfg-lo{,:0}
  3. [[email protected]eb1 ~]# vim ifcfg-lo:0
  4. DEVICE=lo:0
  5. IPADDR=192.168.4.15
  6. NETMASK=255.255.255.255
  7. NETWORK=192.168.4.15
  8. BROADCAST=192.168.4.15
  9. ONBOOT=yes
  10. NAME=lo:0

防止地址衝突的問題:

這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突;

sysctl.conf檔案寫入這下面四行的主要目的就是訪問192.168.4.15的資料包,只有排程器會響應,其他主機都不做任何響應,這樣防止地址衝突的問題。

  1. [[email protected] ~]# 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. [[email protected] ~]# sysctl -p

重啟網路服務,設定防火牆與SELinux

  1. [[email protected] ~]# systemctl restart network
  2. [[email protected] ~]# ifconfig
  3. [[email protected] ~]# systemctl stop firewalld
  4. [[email protected] ~]# setenforce 0

3)設定Web2伺服器網路引數

  1. [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual \
  2. ipv4.addresses 192.168.4.200/24 connection.autoconnect yes
  3. [[email protected] ~]# nmcli connection up eth0

接下來給web2配置VIP地址

注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。

  1. [[email protected] ~]# cd /etc/sysconfig/network-scripts/
  2. [[email protected] ~]# cp ifcfg-lo{,:0}
  3. [[email protected] ~]# vim ifcfg-lo:0
  4. DEVICE=lo:0
  5. IPADDR=192.168.4.15
  6. NETMASK=255.255.255.255
  7. NETWORK=192.168.4.15
  8. BROADCAST=192.168.4.15
  9. ONBOOT=yes
  10. NAME=lo:0

防止地址衝突的問題:

這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突;

sysctl.conf檔案寫入這下面四行的主要目的就是訪問192.168.4.15的資料包,只有排程器會響應,其他主機都不做任何響應,這樣防止地址衝突的問題。

  1. [[email protected] ~]# 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. [[email protected] ~]# sysctl -p

重啟網路服務,設定防火牆與SELinux

  1. [[email protected] ~]# systemctl restart network
  2. [[email protected] ~]# ifconfig
  3. [[email protected] ~]# systemctl stop firewalld
  4. [[email protected] ~]# setenforce 0

步驟二:配置後端Web伺服器

1)自定義Web頁面

  1. [[email protected] ~]# yum -y install httpd
  2. [[email protected] ~]# echo "192.168.4.100" > /var/www/html/index.html
  3. [[email protected] ~]# yum -y install httpd
  4. [[email protected] ~]# echo "192.168.4.200" > /var/www/html/index.html

2)啟動Web伺服器軟體

  1. [[email protected] ~]# systemctl restart httpd
  2. [[email protected] ~]# systemctl restart httpd

步驟三:proxy排程器安裝軟體並部署LVS-DR模式排程器

1)安裝軟體(如果已經安裝,此步驟可以忽略)

  1. [[email protected] ~]# yum -y install ipvsadm

2)清理之前實驗的規則,建立新的叢集伺服器規則

  1. [[email protected] ~]# ipvsadm -C #清空所有規則
  2. [[email protected] ~]# ipvsadm -A -t 192.168.4.15:80 -s wrr

3)新增真實伺服器(-g引數設定LVS工作模式為DR模式,-w設定權重)

  1. [[email protected] ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
  2. [[email protected] ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1

4)檢視規則列表,並儲存規則

  1. [[email protected] ~]# ipvsadm -Ln
  2. TCP 192.168.4.15:80 wrr
  3. -> 192.168.4.100:80 Route 1 0 0
  4. -> 192.168.4.200:80 Route 2 0 0
  5. [[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

步驟四:客戶端測試

客戶端使用curl命令反覆連線http://192.168.4.5,檢視訪問的頁面是否會輪詢到不同的後端真實伺服器。

擴充套件知識:預設LVS不帶健康檢查功能,需要自己手動編寫動態檢測指令碼,實現該功能:(參考指令碼如下,僅供參考)

  1. [[email protected] ~]# vim check.sh
  2. #!/bin/bash
  3. VIP=192.168.4.15:80
  4. RIP1=192.168.4.100
  5. RIP2=192.168.4.200
  6. while :
  7. do
  8. for IP in $RIP1 $RIP2
  9. do
  10.      curl -s http://$IP &>/dev/vnull
  11. web_stat=$?
  12.      ipvsadm -Ln | grep -q $IP
  13.      web_in_lvs=$?
  14.      if [ $web_stat -ne 0 -a $web_in_lvs -eq 0 ];then
  15.      ipvsadm -d -t $VIP -r $IP
  16.      elif [ $web_stat -eq 0 -a $web_in_lvs -ne 0 ];then
  17.      ipvsadm -a -t $VIP -r $IP
  18.      fi
  19. done
  20. sleep 1
  21. done