(1).集群技術的分類
集群技術主要分為三大類:負載均衡(Load Balance)集群,簡稱LB集群;高可用(High Availability)集群,簡稱 HA 集群;高性能計算(High Perfermance Computing)集群,簡稱 HPC 集群。
(2).常見的LB集群實現手段
而常見的LB集群實現手段為:硬件實現的F5負載均衡器;軟件實現的LVS(4層,傳輸層)和Nginx(7層,應用層)。其中,LVS是基於iptables實現(所以使用與iptables類似),由國內開發的開源軟件,其性能優於Nginx,但只能實現4層。
(3).LVS的模式和NAT工作原理
LVS提供了三種包轉發方式:NAT(網絡地址映射)、IP Tunneling(IP隧道)、Direct Rounting(直接路由),分別對應NAT模式、TUN模式、DR模式。不同的轉發方式決定了不同的集群網絡結構。
1)NAT模式介紹
NAT:網絡地址轉換;DNAT:目標地址轉換,改變的是目標地址;SNAT:源地址轉換,改變的是源地址;LVS-NAT:使用SNAT和DNAT完成報文的轉發。
NAT方式可支持任何的操作系統,以及私有網絡,並且只需一個Internet IP地址,但是整個系統的性能受到限制。因為執行NAT每次需要重寫包,有一定的延遲;另外,大部分應用有80%的數據是從服務器流向客戶機,也就是用戶的請求非常短,而服務器的回應非常大,對負載均衡器形成很大壓力,成為了新的瓶頸。
2)TUN模式介紹
director(分發器)分配請求到不同的real server,然后real server處理請求后直接回應給用戶,這樣director負載均衡器僅需處理客戶機與服務器的一半連接。IP Tunneling技術極大地提高了director的調度處理能力,同時也極大地提高了系統能容納的最大節點數,可以超過100個節點。real server可以在任何LAN或WAN上運行,這意味着允許地理上的分布,這在災難恢復中有重要意義。服務器必須擁有正式的IP地址用於與客戶機直接通信,並且所有服務器必須支持IP隧道協議。
3)DR模式介紹(最常用的模式)
與TUN模式類似,負載均衡器僅處理一半的連接,避免了新的性能瓶頸,同樣增加了系統的可伸縮性。Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但由於采用物理層(修改MAC地址)技術,所有服務器都必須在一個物理網段。
4)NAT工作原理
扣了一張大佬的圖,比較詳細。原地址為:https://blog.csdn.net/gui951753/article/details/80316565#LVS_29
客戶端訪問調度器時,調度器通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給后端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
簡單來說可以分為四步:第一步、客戶端請求訪問,源地址:CIP,目標地址:VIP;第二步、請求報文到達負載均衡器,源地址:CIP,目標地址:RIP;第三步、Real Server接收到報文,處理並響應(回頭了),源地址:RIP,目標地址:CIP;第四步、負載均衡器收到報文,根據之前的轉發修改記錄還原報文,源地址VIP,目標地址CIP。
CIP:客戶端的IP;VIP:虛擬IP,對外公網IP,負載均衡器(Director)的外網IP;DIP:負載均衡器(Director)的內網IP,與服務器交互的IP;RIP:真實服務器的IP。
(4).實驗
以下128網段是外網IP,5網段是內網IP
youxi1 192.168.5.101,192.168.128.213 負載均衡器(Director)
youxi2 192.168.5.102(網關為youxi1的內網IP) 真實服務器1
youxi3 192.168.5.103(網關為youxi1的內網IP) 真實服務器2
1)首先在真實服務器youxi2和youxi3上兩台真實服務器上安裝httpd用於測試
[root@youxi2 ~]# yum -y install httpd [root@youxi2 ~]# systemctl start httpd.service [root@youxi2 ~]# echo youxi2 > /var/www/html/index.html [root@youxi3 ~]# yum -y install httpd [root@youxi3 ~]# systemctl start httpd.service [root@youxi3 ~]# echo youxi3 > /var/www/html/index.html
如果是和我一樣使用yum安裝,那么安裝完成后需要將網關改為192.168.5.101。
2)開啟負載均衡器youxi1上的路由轉發功能
[root@youxi1 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 //添加或修改 [root@youxi1 ~]# sysctl -p //重新加載sysctl net.ipv4.ip_forward = 1
3)在負載均衡器youxi1上安裝ipvsadmin,並設置開機自啟
[root@youxi1 ~]# yum -y install ipvsadm [root@youxi1 ~]# systemctl enable ipvsadm.service
之所以現在不啟動,是因為啟動ipvsadm需要/etc/sysconfig/ipvsadm配置文件。
4)在負載均衡器youxi1上使用ipvsadm命令設置規則
注意:ipvsadm保存的時候會使用短域名,所以需要注意/etc/hosts文件里的短域名和IP配對。
[root@youxi1 ~]# ipvsadm -A -t 192.168.128.213:80 -s rr //-A添加虛擬服務器,-t服務器的IP地址和端口,-s指定調度算法 [root@youxi1 ~]# ipvsadm -a -t 192.168.128.213:80 -r 192.168.5.102 -m //-a添加真實服務器,-r真實服務器的IP地址和端口,-m使用NAT模式 [root@youxi1 ~]# ipvsadm -a -t 192.168.128.213:80 -r 192.168.5.103 -m [root@youxi1 ~]# ipvsadm -Ln //-L列出IPVS表,-n顯示IP和端口 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.128.213:80 rr -> 192.168.5.102:80 Masq 1 0 0 -> 192.168.5.103:80 Masq 1 0 0 [root@youxi1 ~]# ipvsadm --save > /etc/sysconfig/ipvsadm //保存,也可以使用ipvsadm -S > /etc/sysconfig/ipvsadm [root@youxi1 ~]# cat /etc/sysconfig/ipvsadm -A -t youxi1:http -s rr -a -t youxi1:http -r youxi2.cn:http -m -w 1 -a -t youxi1:http -r 192.168.5.103:http -m -w 1 [root@youxi1 ~]# systemctl start ipvsadm.service
-s選項能夠調用的算法有rr(表示round-robin,輪詢)、wrr、lc、wlc(加權最小連接)、lblc、lblcr、dh、sh、sed、nq,默認調度的是wlc。
調用算法詳細請看:https://blog.csdn.net/weixin_40470303/article/details/80541639
5)注意,如果防火牆是打開的記得添加端口號
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp success [root@youxi1 ~]# firewall-cmd --reload success [root@youxi2 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp success [root@youxi2 ~]# firewall-cmd --reload success [root@youxi3 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp success [root@youxi3 ~]# firewall-cmd --reload success
6)測試
刷新
如果再刷新又會變為youxi2。
(5).ipvsadm的常用命令
ipvsadm -Ln查看規則,顯示內核虛擬服務器表
[root@youxi1 ~]# 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.128.213:80 rr -> 192.168.5.102:80 Masq 1 0 3 -> 192.168.5.103:80 Masq 1 0 1
ipvsadm -Lnc查看客戶端連接分發器和真實服務器的情況
[root@youxi1 ~]# ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 00:50 SYN_RECV 192.168.128.137:49464 192.168.128.213:80 192.168.5.103:80 TCP 00:50 SYN_RECV 192.168.128.137:49467 192.168.128.213:80 192.168.5.103:80 TCP 00:26 SYN_RECV 192.168.128.137:49433 192.168.128.213:80 192.168.5.103:80 TCP 00:50 SYN_RECV 192.168.128.137:49465 192.168.128.213:80 192.168.5.102:80 TCP 00:26 SYN_RECV 192.168.128.137:49432 192.168.128.213:80 192.168.5.102:80
還有ipvsadm -Ln --stats查看分發情況和ipvsadm -Ln --rate查看速率
[root@youxi1 ~]# ipvsadm -Ln --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 192.168.128.213:80 23 8807 782 627655 38778 -> 192.168.5.102:80 11 5357 524 404849 26620 -> 192.168.5.103:80 12 3450 258 222806 12158 [root@youxi1 ~]# ipvsadm -Ln --rate IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 192.168.128.213:80 0 0 0 0 0 -> 192.168.5.102:80 0 0 0 0 0 -> 192.168.5.103:80 0 0 0 0 0
ipvsadm -Z清空當前虛擬服務器計數器(連接數等信息);ipvsadm -C清空所有規則。
(6).擴展:ipvsadm選項
-A --add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增加一台新的虛擬服務器。 -E --edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。 -D --delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。 -C --clear 清除內核虛擬服務器表中的所有記錄。 -R --restore 恢復虛擬服務器規則 -S --save 保存虛擬服務器規則,輸出為-R 選項可讀的格式 -a --add-server 在內核虛擬服務器表的一條記錄里添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增加一台新的真實服務器 -e --edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄 -d --delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄 -L|-l --list 顯示內核虛擬服務器表 -Z --zero 虛擬服務表計數器清零(清空當前的連接數量等) --set tcp tcpfin udp 設置連接超時值 --start-daemon 啟動同步守護進程。他后面可以是master 或backup,用來說明LVS Router 是master 或是backup。在這個功能上也可以采用keepalived的VRRP 功能。 --stop-daemon 停止同步守護進程 -h --help 顯示幫助信息 其他的選項: -t --tcp-service service-address 說明虛擬服務器提供的是tcp 的服務[vip:port] or [real-server-ip:port] -u --udp-service service-address 說明虛擬服務器提供的是udp 的服務[vip:port] or [real-server-ip:port] -f --fwmark-service fwmark 說明是經過iptables 標記過的服務類型。 -s --scheduler scheduler 使用的調度算法,有這樣幾個選項rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默認的調度算法是: wlc. -p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,將被同一台真實的服務器處理。timeout 的默認值為300 秒。 -M --netmask netmask persistent granularity mask -r --real-server server-address 真實的服務器[Real-Server:port] -g --gatewaying 指定LVS 的工作模式為直接路由模式(也是LVS 默認的模式) -i --ipip 指定LVS 的工作模式為隧道模式 -m --masquerading 指定LVS 的工作模式為NAT 模式 -w --weight weight 真實服務器的權值 --mcast-interface interface 指定組播的同步接口 -c --connection 顯示LVS 目前的連接 如:ipvsadm -L -c --timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout --daemon 顯示同步守護進程狀態 --stats 顯示統計信息 --rate 顯示速率信息 --sort 對虛擬服務器和真實服務器排序輸出 --numeric -n 輸出IP 地址和端口的數字形式