青蛙學Linux—使用LVS實現負載均衡集羣

從Linux的2.4內核開始,LVS的主要模塊IPVS已經集成在了Linux的內核中,無需再另外安裝。可是要使用IPVS的功能,則須要其餘軟件的配合。常見的有IPVS管理軟件ipvsadmKeepalivedhtml

一、ipvsadm

ipvsadm是IPVS的一個管理工具,用於對IPVS進行配置和管理。ipvsadm能夠在LVS的官網下載到源碼包和RPM包,但因爲LVS官網已好久沒有更新,因此這裏推薦使用YUM安裝ipvsadm,這樣能夠獲取到ipvsadm的新版本。前端

使用如下命令安裝ipvsadm:算法

yum install 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必須安裝ipvsadmsession

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
相關文章
相關標籤/搜索