叢集及LVS簡介 LVS-NAT叢集 LVS-DR叢集
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)
- [[email protected] ~]# yum -y install ipvsadm
- [[email protected] ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr
- [[email protected] ~]# 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.4.5:80 wrr
2)為叢集新增若干real server
- [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -m -w 1
- [[email protected] ~]# 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.4.5:80 wrr
- -> 192.168.2.100:80 Masq 1 0 0
- [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -m -w 2
- [[email protected] ~]# ipvsadm –a -t 192.168.4.5:80 -r 192.168.2.201 -m -w 3
- [[email protected] ~]# ipvsadm –a -t 192.168.4.5:80 -r 192.168.2.202 -m -w 4
3)修改叢集伺服器設定(修改排程器演算法,將加權輪詢修改為輪詢)
- [[email protected] ~]# ipvsadm -E -t 192.168.4.5:80 -s rr
- [[email protected] ~]# 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.4.5:80 rr
- -> 192.168.2.100:80 Masq 1 0 0
- -> 192.168.2.200:80 Masq 2 0 0
- -> 192.168.2.201:80 Masq 2 0 0
- -> 192.168.2.202:80 Masq 1 0 0
4)修改read server(使用-g選項,將模式改為DR模式)
- [[email protected] ~]# ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.202 -g
5)檢視LVS狀態
- [[email protected] ~]# ipvsadm -Ln
6)建立另一個叢集(演算法為最少連線演算法;使用-m選項,設定工作模式為NAT模式)
- [[email protected] ~]# ipvsadm -A -t 192.168.4.5:3306 -s lc
- [[email protected] ~]# ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.100 -m
- [[email protected] ~]# ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.200 -m
6)永久儲存所有規則
- [[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
7)清空所有規則
- [[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為例)
- [[email protected] ~]# yum -y install httpd
- [[email protected] ~]# echo "192.168.2.100" > /var/www/html/index.html
2)啟動Web伺服器軟體
- [[email protected] ~]# systemctl restart httpd
3)關閉防火牆與SELinux
- [[email protected] ~]# systmctl stop firewalld
- [[email protected] ~]# setenforce 0
步驟三:部署LVS-NAT模式排程器
1)確認排程器的路由轉發功能(如果已經開啟,可以忽略)
- [[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
- [[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
- 1
- [[email protected] ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
- #修改配置檔案,設定永久規則
2)建立叢集伺服器
- [[email protected] ~]# yum -y install ipvsadm
- [[email protected] ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr
2)新增真實伺服器
- [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m
- [[email protected] ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 1 -m
3)檢視規則列表,並儲存規則
- [[email protected] ~]# ipvsadm -Ln
- [[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必須要配置在網絡卡的虛擬介面!!!
- [[email protected] ~]# cd /etc/sysconfig/network-scripts/
- [[email protected] ~]# cp ifcfg-eth0{,:0}
- [[email protected] ~]# vim ifcfg-eth0
- TYPE=Ethernet
- BOOTPROTO=none
- NAME=eth0
- DEVICE=eth0
- ONBOOT=yes
- IPADDR=192.168.4.5
- PREFIX=24
- [[email protected] ~]# vim ifcfg-eth0:0
- TYPE=Ethernet
- BOOTPROTO=none
- DEFROUTE=yes
- NAME=eth0:0
- DEVICE=eth0:0
- ONBOOT=yes
- IPADDR=192.168.4.15
- PREFIX=24
- [[email protected] ~]# systemctl restart network
2)設定Web1伺服器網路引數
- [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual \
- ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
- [[email protected] ~]# nmcli connection up eth0
接下來給web1配置VIP地址。
注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。
- [[email protected] ~]# cd /etc/sysconfig/network-scripts/
- [[email protected] ~]# cp ifcfg-lo{,:0}
- [[email protected]eb1 ~]# vim ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.4.15
- NETMASK=255.255.255.255
- NETWORK=192.168.4.15
- BROADCAST=192.168.4.15
- ONBOOT=yes
- NAME=lo:0
防止地址衝突的問題:
這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突;
sysctl.conf檔案寫入這下面四行的主要目的就是訪問192.168.4.15的資料包,只有排程器會響應,其他主機都不做任何響應,這樣防止地址衝突的問題。
- [[email protected] ~]# vim /etc/sysctl.conf
- #手動寫入如下4行內容
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- net.ipv4.conf.all.arp_announce = 2
- #當有arp廣播問誰是192.168.4.15時,本機忽略該ARP廣播,不做任何迴應
- #本機不要向外宣告自己的lo迴環地址是192.168.4.15
- [[email protected] ~]# sysctl -p
重啟網路服務,設定防火牆與SELinux
- [[email protected] ~]# systemctl restart network
- [[email protected] ~]# ifconfig
- [[email protected] ~]# systemctl stop firewalld
- [[email protected] ~]# setenforce 0
3)設定Web2伺服器網路引數
- [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual \
- ipv4.addresses 192.168.4.200/24 connection.autoconnect yes
- [[email protected] ~]# nmcli connection up eth0
接下來給web2配置VIP地址
注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。
- [[email protected] ~]# cd /etc/sysconfig/network-scripts/
- [[email protected] ~]# cp ifcfg-lo{,:0}
- [[email protected] ~]# vim ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.4.15
- NETMASK=255.255.255.255
- NETWORK=192.168.4.15
- BROADCAST=192.168.4.15
- ONBOOT=yes
- NAME=lo:0
防止地址衝突的問題:
這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突;
sysctl.conf檔案寫入這下面四行的主要目的就是訪問192.168.4.15的資料包,只有排程器會響應,其他主機都不做任何響應,這樣防止地址衝突的問題。
- [[email protected] ~]# vim /etc/sysctl.conf
- #手動寫入如下4行內容
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- net.ipv4.conf.all.arp_announce = 2
- #當有arp廣播問誰是192.168.4.15時,本機忽略該ARP廣播,不做任何迴應
- #本機不要向外宣告自己的lo迴環地址是192.168.4.15
- [[email protected] ~]# sysctl -p
重啟網路服務,設定防火牆與SELinux
- [[email protected] ~]# systemctl restart network
- [[email protected] ~]# ifconfig
- [[email protected] ~]# systemctl stop firewalld
- [[email protected] ~]# setenforce 0
步驟二:配置後端Web伺服器
1)自定義Web頁面
- [[email protected] ~]# yum -y install httpd
- [[email protected] ~]# echo "192.168.4.100" > /var/www/html/index.html
- [[email protected] ~]# yum -y install httpd
- [[email protected] ~]# echo "192.168.4.200" > /var/www/html/index.html
2)啟動Web伺服器軟體
- [[email protected] ~]# systemctl restart httpd
- [[email protected] ~]# systemctl restart httpd
步驟三:proxy排程器安裝軟體並部署LVS-DR模式排程器
1)安裝軟體(如果已經安裝,此步驟可以忽略)
- [[email protected] ~]# yum -y install ipvsadm
2)清理之前實驗的規則,建立新的叢集伺服器規則
- [[email protected] ~]# ipvsadm -C #清空所有規則
- [[email protected] ~]# ipvsadm -A -t 192.168.4.15:80 -s wrr
3)新增真實伺服器(-g引數設定LVS工作模式為DR模式,-w設定權重)
- [[email protected] ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
- [[email protected] ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1
4)檢視規則列表,並儲存規則
- [[email protected] ~]# ipvsadm -Ln
- TCP 192.168.4.15:80 wrr
- -> 192.168.4.100:80 Route 1 0 0
- -> 192.168.4.200:80 Route 2 0 0
- [[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
步驟四:客戶端測試
客戶端使用curl命令反覆連線http://192.168.4.5,檢視訪問的頁面是否會輪詢到不同的後端真實伺服器。
擴充套件知識:預設LVS不帶健康檢查功能,需要自己手動編寫動態檢測指令碼,實現該功能:(參考指令碼如下,僅供參考)
- [[email protected] ~]# vim check.sh
- #!/bin/bash
- VIP=192.168.4.15:80
- RIP1=192.168.4.100
- RIP2=192.168.4.200
- while :
- do
- for IP in $RIP1 $RIP2
- do
- curl -s http://$IP &>/dev/vnull
- web_stat=$?
- ipvsadm -Ln | grep -q $IP
- web_in_lvs=$?
- if [ $web_stat -ne 0 -a $web_in_lvs -eq 0 ];then
- ipvsadm -d -t $VIP -r $IP
- elif [ $web_stat -eq 0 -a $web_in_lvs -ne 0 ];then
- ipvsadm -a -t $VIP -r $IP
- fi
- done
- sleep 1
- done