1、NAT模式拓撲及工作原理在一組伺服器前有一個調度器,它們是通過Switch/HUB相連接的。這些伺服器提供相同的網路服務、相同的內容,即不管請求被髮送到哪一臺伺服器,執行結果是一樣的。服務的內容可以複製到每台伺服器的本地硬碟上,可以通過網路文件系統(如NFS)共用,也 可以通過一個分散式文件系統... ...
1、NAT模式拓撲及工作原理
在一組伺服器前有一個調度器,它們是通過Switch/HUB相連接的。這些伺服器提供相同的網路服務、相同的內容,即不管請求被髮送到哪一臺伺服器,執行結果是一樣的。服務的內容可以複製到每台伺服器的本地硬碟上,可以通過網路文件系統(如NFS)共用,也 可以通過一個分散式文件系統來提供。
客戶通過Virtual IP Address(虛擬服務的IP地址)訪問網路服務時,請求報文到達調度器,調度器根據連接調度演算法從一組真實伺服器中選出一臺伺服器,將報文的目標地址 Virtual IP Address改寫成選定伺服器的地址,報文的目標埠改寫成選定伺服器的相應埠,最後將修改後的報文發送給選出的伺服器。同時,調度器在連接Hash 表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定伺服器的地址和埠,進行同樣的改寫操作,並將報文傳給原選定的伺服器。當來自真實伺服器的響應報文經過調度器時,調度器將報文的源地址和源埠改為Virtual IP Address和相應的埠,再把報文發給用戶。我們在連接上引入一個狀態機,不同的報文會使得連接處於不同的狀態,不同的狀態有不同的超時值。在TCP 連接中,根據標準的TCP有限狀態機進行狀態遷移;在UDP中,我們只設置一個UDP狀態。不同狀態的超時值是可以設置的,在預設情況下,SYN狀態的超 時為1分鐘,ESTABLISHED狀態的超時為15分鐘,FIN狀態的超時為1分鐘;UDP狀態的超時為5分鐘。當連接終止或超時,調度器將這個連接從 連接Hash表中刪除。
這樣,客戶所看到的只是在Virtual IP Address上提供的服務,而伺服器集群的結構對用戶是透明的。對改寫後的報文,應用增量調整Checksum的演算法調整TCP Checksum的值,避免了掃描整個報文來計算Checksum的開銷。
2、調度演算法種類
輪叫(Round Robin)
加權輪叫(Weighted Round Robin)
最少鏈接(Least Connections)
加權最少鏈接(Weighted Least Connections)
基於局部性的最少鏈接(Locality-Based Least Connections)
帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication)
目標地址散列(Destination Hashing )
源地址散列(Source Hashing)
最短期望延遲(Shortest Expected Delay)
無須隊列等待(Never Queue)
3、案例實施
實驗目的:
所有客戶端訪問IP地址為202.103.106.5埠為80的流量都被負載均衡地調度的真實伺服器 172.16.0.2:80和172.16.0.3:80上
輪叫(Round Robin),輪詢演算法,第一個給2,第二個給3,第三個給2,第四個給3
本次試驗機器:Centos Linux 8.1.1911
1、地址配置(先安裝軟體)
172.16.0.0/24 所在網卡為僅主機;
202.103.106.0/24 所在網卡為NAT;
調度器需要雙網卡。
註意:real server NAT模式下,網關需指向調度器內部地址,也就是圖中的172.16.0.1。
2、關閉防火牆及selinux
各虛擬機都執行,真實環境需要真實對待,做實驗的話就都關閉。
vim /etc/selinux/config
修改SELINUX=permissive
setenforce 0
關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
3、時鐘同步
所有real server 同步調度器的時間。
配置參考
Chronyd同步時間(Server/Client)配置
4、軟體安裝
查看內核模塊
modprobe ip_vs
lsmod | grep ip_vs
安裝管理工具
yum install ipvsadm
real server 安裝httpd服務
real server 1
[root@node1 ~]# echo "this is real server node1" >> /var/www/html/index.html [root@node1 ~]# systemctl start httpd [root@node1 ~]# systemctl enable httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [root@node1 ~]#
real server 2
[root@node2 ~]# echo "this is real server node2" >> /etc/httpd/index.html [root@node2 ~]# systemctl start httpd [root@node2 ~]# systemctl enable httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [root@node2 ~]#
4、配置調度器
查看幫助
man ipvsadm
SYNOPSIS ipvsadm -A|E virtual-service [-s scheduler] [-p [timeout]] [-M netmask] [-b sched-flags] ipvsadm -D virtual-service ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e virtual-service -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] ipvsadm -d virtual-service -r server-address ipvsadm -L|l [virtual-service] [options] ipvsadm -Z [virtual-service] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [daemon-options] [--syncid syncid] ipvsadm --stop-daemon state ipvsadm -h
這個在添加和修改時少一個參數 ,老版本有噢。
-t|u|f
-t: TCP協議
-u: UDP協議
添加一個集群服務
ipvsadm -A -t 202.103.106.5:80 -s rr
添加real server
ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.2:80 -m
ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.3:80 -m
查看
[root@filesystem ~]# ipvsadm -l -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 202.103.106.5:80 rr -> 172.16.0.2:80 Masq 1 0 0 -> 172.16.0.3:80 Masq 1 0 0 [root@filesystem ~]#
規則保存
[root@filesystem ~]# ipvsadm-save > /root/ipvsadm.bak [root@filesystem ~]# cat ipvsadm.bak -A -t filesystem.server.com:http -s rr -a -t filesystem.server.com:http -r 172.16.0.2:http -m -w 1 -a -t filesystem.server.com:http -r 172.16.0.3:http -m -w 1 [root@filesystem ~]#
規則導入
[root@filesystem ~]# ipvsadm -C # -C 是清空規則的意思 [root@filesystem ~]# ipvsadm -R < ipvsadm.bak [root@filesystem ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP filesystem:http rr -> 172.16.0.2:http Masq 1 0 0 -> 172.16.0.3:http Masq 1 0 0 [root@filesystem ~]#
5、測試
從圖中我們可以看到,訪問我們的調度器(也就是對外提供服務的地址,在內部真實伺服器上來回切換。實現負載分擔)
這樣,客戶認為是從202.103.106.5:80服務得到正確的響應,而不會知道該請求是伺服器172.16.0.2還是伺服器172.16.0.3處理的。
讀書和健身總有一個在路上