從Linux的2.4內核開始,LVS的主要模塊IPVS已經集成在了Linux的內核中,無需再另外安裝。可是要使用IPVS的功能,則須要其餘軟件的配合。常見的有IPVS管理軟件ipvsadm和Keepalived。html
一、ipvsadm
ipvsadm是IPVS的一個管理工具,用於對IPVS進行配置和管理。ipvsadm能夠在LVS的官網下載到源碼包和RPM包,但因爲LVS官網已好久沒有更新,因此這裏推薦使用YUM安裝ipvsadm,這樣能夠獲取到ipvsadm的新版本。前端
使用如下命令安裝ipvsadm:算法
ipvsadm經常使用參數:shell
- -A:添加一條新的虛擬服務規則
- -E:編輯一條虛擬服務規則
- -D:刪除一條虛擬服務規則
- -C:清除因此的虛擬服務規則
- -R:恢復虛擬服務規則
- -a:在一個虛擬服務中添加一個新的真實服務器(Real Server)
- -e:編輯某個真實服務器
- -d:刪除某個真實服務器
- -L|-l:顯示內核中的虛擬服務規則
- -n:以數字形式顯示IP端口
- -c:顯示IPVS中目前存在的鏈接,能夠用於分析調度狀況
- -Z:將轉發消息的統計清零
- -p:配置持久化時間
- --set tcp|tcpfin|udp:配置tcp|tcpfin|udp的超時時間
- -t|-u:基於TPC|UDP協議的虛擬服務規則
- -g|-m|-i:對應三種負載均衡實現機制DR|NAT|TUN
- -w:配置真實服務器的權重
- -s:配置負載均衡算法
- --timeout:顯示配置的tcp|tcpfin|udp的超時時間
- --stats:顯示歷史轉發消息統計(累加值)
- --rate:顯示轉發速率信息(瞬時值)
使用ipvsadm僅能實現負載均衡,沒法對後端的Real Server進行健康監測,這樣當後端的Real Server出現故障時,ipvsadm沒法將其從服務器組中撤下,致使轉發到該Real Server的請求就失敗。後端
二、Keepalived+LVS實現負載均衡集羣
Keepalived屬於LVS的擴展項目,起初是爲了解決前端LB沒法對後端RS進行健康監測而開發的。Keepalived對後端的RS進行健康監測,在RS發生故障時自動將其剔除,並在其恢復正常後從新將其加入集羣。而Keepalived在引入VRRP以後也可用於高可用集羣,這樣,Keepalived+LVS就能夠實現前端LB的高可用和後端RS的負載均衡。服務器
注意:Keepalived其實是經過ipvsadm來管理和配置IPVS的,因此要使用Keepalived支持LVS必須安裝ipvsadm。session
Keepalived對於LVS的支持是在配置文件中的LVS配置段中實現的。LVS配置段以virtual_server作爲開始標識,分爲virtual_server段、real_server段和健康監測段。負載均衡
2.一、virtual_server段配置
virtual_server用於配置VIP、負載均衡算法、負載均衡機制等。經常使用配置以下:tcp
virtual_server VIP 端口 {
delay_loop 時間
lb_algo 算法
lb_kind 負載均衡實現機制
persistence_timeout 時間
persistence_granularity 子網掩碼
protocol 協議
ha_suspend
sorry_server IP 端口
...
}
- virtual_server:虛擬服務器的開始,後跟VIP和端口
- delay_loop:定義健康檢查的時間間隔,單位爲秒
- lb_algo:定義負載均衡調度算法,值爲rr|wrr|dh|sh|lc|wlc|sed|nq|lblc|lblcr
- lb_kind:定義負載均衡實現的機制,值爲DR|NAT|TUN
- persistence_timeout:會話保持最大無響應超時時間,單位秒。定義該項後,用戶的請求在定義的時間內會發送給同一個RS;當用戶在定義的時間內一直沒有進行操做,則下一次請求將會被髮送到一個新的RS上。適用於動態網頁session共享的環境
- persistence_granularity:配合persistence_timeout使用,經過子網掩碼來定義會話保持對一個IP生效仍是對一組IP生效。默認值爲255.255.255.255,表示單個客戶端分配到一個RS上;255.255.255.0表示客戶端IP所在的整個網段的請求都會分配給同一臺RS
- protocol:定義轉發協議類型,有TCP和UDP兩種可選
- ha_suspend:在LB節點狀態從Master切換到Backup時,不啓用對RS節點的健康檢查
- sorry_server:備用節點,當全部的後端RS失效後啓用該備用節點
2.二、real_server段配置
real_server段位於virtual_server段內,用於配置後端RS。經常使用配置以下:工具
real_server IP 端口 {
weight 數值
inhibit_on_failure
notify_up 腳本
notify_down 腳本
}
- real_server:real_server段開始的標識,後跟RS的真實IP地址和端口
- weight:定義RS的權重
- inhibit_on_failure:在檢測到RS節點故障以後將weight值改成0,而不是從IPVS中刪除
- notify_up:在檢測到RS節點服務處於UP狀態後執行的腳本
- notify_down:在檢測到RS節點服務處於DOWN狀態後執行的腳本
2.三、健康檢測段配置
Keepalived對於後端RS的健康檢查支持多種方式,常見的有HTTP_GET、SSL_GET、TCP_CHECK、MISC_CHECK。健康檢查段位於real_server段內。
2.3.一、TCP_CHECK
TCP_CHECK經過TCP協議鏈接後端RS的指定端口來判斷後端RS是否正常。經常使用配置以下:
TCP_CHECK {
connect_port 端口
connect_timeout 時間
nb_get_retry|retry 次數
delay_before_retry 時間
}
- connect_port:定義進行健康檢查時鏈接的後端RS端口,若是沒有定義,則使用real_server段指定的端口
- connect_timeout:無響應超時時間,單位秒
- nb_get_retry|retry:重試次數。在Keepalived 2.x版本以前使用nb_get_retry,2.x版本以後使用retry
- delay_before_retry:重試間隔時間,單位秒
2.3.二、HTTP_GET|SSL_GET
經過對指定URL計算摘要信息來檢查後端RS是否正常。經常使用配置以下:
HTTP_GET|SSL_GET {
url {
path URI
digest URL摘要信息
status_code HTTP狀態碼
}
bindto IP地址
connect_port 端口
connect_timeout 時間
nb_get_retry|retry 次數
delay_before_retry 時間
}
- url:定義HTTP|SSL檢查時的URL信息,能夠指定多個
- path:定義檢查的詳細URL路徑
- digest:URL的摘要信息,摘要信息可經過genhash工具獲取。例如,獲取192.168.0.80上index.html的摘要信息
genhash -s 192.168.0.80 -p 80 -u /index.html
- status_code:定義HTTP檢查返回正常狀態碼的類型,通常是200
- bindto:定義經過哪臺服務器發送請求對後端RS進行健康檢查
2.3.三、MISC_CHECK
MISC_CHECK健康檢查方式能夠經過執行一個外部程序或腳原本判斷後端RS是否正常。經常使用配置以下:
MISC_CHECK {
misc_path 腳本
misc_timeout 時間
misc_dynamic
}
- misc_path:指定一個外部程序或腳本
- misc_timeout:定義執行腳本的超時時間
- misc_dynamic:動態調整RS節點的權重,前面加!表示不啓用。在啓用該功能後,Keepalived會根據返回碼來動態調整RS節點的權重。若是返回碼爲0,表示健康檢查正常,節點權重不變;若是返回碼爲1,表示健康檢查失敗,Keepalived將調整節點權重爲0;若是返回碼爲2-255之間的任意值,表示健康檢查正常,但Keepalived將會調整節點權重爲返回碼-2