LVS負載均衡器NAT和DR工作模式詳解
在試驗之前為了更好理解設置的參數,所以先講解一下命令。
一、lvs配置文件和命令:
程序包:ipvsadm(LVS管理工具)
配置文件:/etc/sysconfig/ipvsadm-config 【rpm -ql ipvsadm 查詢包的具體列表】
-A 在服務器列表中新添加一條新的虛擬服務器記錄
-t 表示為tcp服務
-u 表示為udp服務
-s 使用的調度算法 (rr|wrr|wlc|lc|dh|sh|lblb|lblcr
-a 在服務器裏添加一條新的真是主機記錄
-m 說明lvs提供nat工作模式
-g 說明lvs提供直接路由器模式(也是lvs默認的工作模式)
-i 指定lvs工作模式為隧道模式
-m 真實服務器的權值
-E 編輯內核虛擬服務器表中的一條虛擬服務器記錄
-D 刪除內核虛擬服務器列表中的一條虛擬服務器記錄
-C 清楚內核虛擬服務器中的所有記錄
-R 恢復虛擬服務器所有規則
-e 編輯虛擬服務器記錄中一條真實服務器記錄
-d 刪除虛擬服務器記錄中的某條真實服務器記錄
-L 顯示內核服務器列表
-n 以數字方式顯示地址和端口號
--stats 統計信息
-Z 虛擬服務器記錄器清零
-S –save 保存虛擬服務器規則,輸出為-R 選項可讀的格式
二、lvs負載均衡調度算法:
(1)靜態
①RR 輪叫調度 【一個接著一個來,平均分配】
②WRR:加權輪叫
③DH:目標地址散列調度 【據請求的目標IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。】
④SH:源地址hash 源【地址散列”調度算法根據請求的源IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空】
(2)動態:
①LC:最少鏈接 【通過用戶請求數和服務器承載的數量,把多余請求數發送到最少的一臺服務器上】
②WLC:加權最少連接 【給服務器不忙的派發任務,同時性能較好的服務器也能勞動更多】
③SED:最短延遲調度 【在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處於無連接狀態。】
④NQ:永不排隊,最小列隊調度。 【需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對於DNS的UDP不需要考慮非活動連接,而httpd的處於保持狀態的服務就需要考慮非活動連接給服務器的壓力。】
三、LVS負載均衡器NAT工作模式。
大概網絡拓撲圖:
詳細說明:
CIP:指客戶端IP
VIP:指負載均衡服務器的虛擬IP
DIP:指負載均衡服務器的真實IP
RS:指後端服務器
RIP:指後端服務器IP
LVS:負載均衡服務器
①當用戶請求到達LVS,此時請求的數據報文會先到達內核空間的PREROUTING鏈,此刻報文源IP為CIP,目標IP為VIP。
②當PREROUTING鏈檢查數據包是訪問自己的,就將數據包發送到INPUT鏈。
③LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包裏面的目的地址及端口沒有在規則裏面,那麽這條數據包將被放行至用戶空間,如果在就修改數據包的目標IP地址為後端服務器IP,然後將數據包發送至POSTROUTING鏈。此刻源IP為CIP,目標地址為RIP
④POSTROUTING鏈通過選路,將數據包發送到後端服務器(RS),後端服務器(RS)對比發現目標是發自己的IP,開始構建響應報文發回給LVS,此刻報文的源地址為RIP,目標地址為CIP。
⑤LVS在響應客戶端錢,此刻會把源地址修改為自己的VIP地址,然後響應給客戶端。此刻報文的源IP為VIP,目標地址為CIP。
具體步驟:
三臺主機,一臺為LVS服務器,兩外兩臺為RS服務器。
centos7.4為LVS服務器,172.17.66.88為虛擬IP(VIP),192.168.11.11為真實IP(DIP)。
centos7和centos7-2為後臺服務器(RS),兩個網段分別為192.168.88.88和192.168.23.23(確保此地址和RS服務器能通)。
①裝包。
命令:yum install ipvsadm
②負載就均衡服務器上配置
命令:ipvsadm -A -t 172.17.66.88:80 -s wrr 【在負載均衡服務器上開一個為80端口的虛擬記錄,並使用wrr調度方式】
命令:ipvsadm -a -t 172.17.66.88:80 -t 192.168.88.88 -m -w 1 【配置web服務器後端RIP為NAT工作方式,權重為1】
命令:ipvsadm -a -t 172.17.66.88:80 -t 192.168.23.23 -m -w 1 【配置web服務器後端RIP為NAT工作方式,權重為1】
③開啟LVS的轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward 【臨時開啟轉發功能】
vim /sysctl.conf
添加net.ipv4.ip_forward=1 sysctl -p 【永久生效】
④添加RS到LVS的默認路由。
命令:route add default gw 192.168.11.11
⑤測試。
在後端兩個服務器(RS)寫兩個測試頁面index.html
以上就實現了負載均衡,由於使用的wrr調度以及權重都是1,所以每次訪問都是輪流。
註意:做該實驗把RS橋接斷掉,不然影響添加的默認路由器工作。
四、基於LVS實現DR工作模式。
這種模式是解決基於NAT模式的弊端,因為NAT模式發送的數據進出都經過LVS服務器,會對LVS造成太大壓力。
大概網絡拓撲圖:
詳細說明:
①當客戶端發送請求到LVS,此時的請求報文會先到內核的PREROUTING鏈。此刻的源IP為CIP,目標IP 為VIP。
②PREROUTING鏈檢查數據包是訪問自己的,就發送到INPUT鏈。
③IPVS對比數據包請求的服務是否在定義的規則裏,如果是就將報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改為RIP的MAC地址,然後將數據包發送到POSTROUTING鏈。此刻的源IP和目標IP都未發送改變,只是修改了源MAC為DIP的MAC,目標MAC為RID的MAC地址。
④由於DS和RS在同一段網段,所以工作在二層。POSTROUTING檢查目標地址為RIS的MAC地址,就將數據包發送到RS。
⑤RS查看MAC地址為自己的MAC地址,就接下包。處理完成後,將響應報文通過lo接口傳送到eth0網卡後發出。此時的源地址為VIP,目標地址為CIP,由此完成了數據的傳輸。
具體步驟:
三臺服務器在同一個網段,一個為lvs服務器【虛擬IP(別名):172.17.252.251;真實IP(DIP):172.17.66.88】,後臺服務器1(RIP):172.17.110.111,後臺服務器2(RIP)172.17.33.34
①由於都在一個網段,多以在LVS配置一個網卡別名。【並只廣播自己】
②配置LVS的虛擬IP(VIP)和真實IP(DIP)。
③在後臺服務器(RS)上配置VIP並只廣播自己。
④設置RIP到本地VIP上的路由記錄,即本地回旋網卡路由。
⑤配置只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求以及在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.
⑥RS2服務器上設置和RS1一樣的配置
⑦測試。
LVS負載均衡器NAT和DR工作模式詳解