LVS搭建負載均衡集群(一)——NAT模式


(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 地址和端口的數字形式

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM