在試驗以前爲了更好理解設置的參數,因此先講解一下命令。html
1、lvs配置文件和命令:web
程序包:ipvsadm(LVS管理工具)算法
配置文件:/etc/sysconfig/ipvsadm-config 【rpm -ql ipvsadm 查詢包的具體列表】vim
-A 在服務器列表中新添加一條新的虛擬服務器記錄後端
-t 表示爲tcp服務centos
-u 表示爲udp服務服務器
-s 使用的調度算法 (rr|wrr|wlc|lc|dh|sh|lblb|lblcr網絡
-a 在服務器裏添加一條新的真是主機記錄負載均衡
-m 說明lvs提供nat工做模式tcp
-g 說明lvs提供直接路由器模式(也是lvs默認的工做模式)
-i 指定lvs工做模式爲隧道模式
-m 真實服務器的權值
-E 編輯內核虛擬服務器表中的一條虛擬服務器記錄
-D 刪除內核虛擬服務器列表中的一條虛擬服務器記錄
-C 清楚內核虛擬服務器中的全部記錄
-R 恢復虛擬服務器全部規則
-e 編輯虛擬服務器記錄中一條真實服務器記錄
-d 刪除虛擬服務器記錄中的某條真實服務器記錄
-L 顯示內核服務器列表
-n 以數字方式顯示地址和端口號
--stats 統計信息
-Z 虛擬服務器記錄器清零
-S –save 保存虛擬服務器規則,輸出爲-R 選項可讀的格式
2、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的處於保持狀態的服務就須要考慮非活動鏈接給服務器的壓力。】
3、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橋接斷掉,否則影響添加的默認路由器工做。
4、基於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配置一個網卡別名。【並只廣播本身】
③在後臺服務器(RS)上配置VIP並只廣播本身。
⑤配置只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求以及在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.
⑥RS2服務器上設置和RS1同樣的配置