LVS+Keepalived實現負載平衡,lvskeepalived
Lvs是由國防大學章文嵩博士發起的一個開源項目,用來實現伺服器之間的負載平衡。全名為linux virtual server
軟體包圍ipvsadm.tar.gz 隨著企業的規模擴大,伺服器的訪問越來越大。這時候只有兩個方案解決伺服器的負載能力。
1: 向上擴充伺服器的硬體設定。購買昂貴的機器來承擔日益繁重的效能要求。
2: 增加伺服器的數量,以叢集的方式來提高伺服器的效能。
第二種方式最好的辦法就是使用lvs來進行負載平衡。
lvs負載平衡的三種模式: NAT(network add translation), DR(Direct Route) 和TUN模式
第一種模式NAT:這種模式使用地址轉換來進行負載平衡,工作在網路層。所有的請求都經過lvs來進行地址轉換,realserver的網關指向lvs伺服器,所有的應答由lvs來回送。這樣導致lvs的壓力非常大,在realserver達到十台時會出現網路瓶頸。 所有的realserver和lvs在一個內網中。
第二種模式DR: 這種模式工作在資料連結層,在進行ARP時,只有lvs伺服器對其相應,然後網關將請求送達至lvs伺服器,lvs伺服器再通過調度演算法發送至realserver,在響應請求時,不需要經過Lvs伺服器直接響應用戶端,這樣大大提高了速率和減輕了Lvs伺服器的壓力。
keepalived是工作在lvs之上的,所謂的工作在之上,是keepalived通過自身的模組通過設定檔調用ipvsadm命令對LVS進行配置,實現負載平衡。keepalived和LVS是完全不是同一個概念,它們是獨立互不影響的完成自己的工作的,lvs通過負載平衡實現對伺服器的高擴充性,keepalived通過自身的子進程對lvs進行健全狀態檢查實現LVS的高可用性(即防止LVS崩潰和,發送主從伺服器的健康狀態和通知切換主從lvs)。
keepalived有三個進程,VRRP協議子進程,healthcheck子進程和WatchDog父進程。
VRRP協議子進程負責實現VRRP協議及主從之間的通訊,healthcheck負責檢查LVS和HTTP的健康狀態,
WatchDog進程管理兩個子進程。Keepalived的模組都相對獨立,可以實現不同複雜的功能,其中就有對LVS
進行配置的模組。
keepalived.conf設定檔詳解:
global_defs{
router_id 50 用來標示主從的地區
} 進行全域配置。
vrrp_instance vrrp_name {
state MASTER 表示主伺服器
interface eth0 在eth0監控
virtual_router_id 50 地區標示號
priority 50 主從優先順序 ,主大於從
advert_int 2 主從互相探測是否工作時間的間隔
authentication{} 主從互相驗證配置
virtual_server{
10.0.0.113 配置lvs的VIP(虛擬IP)
}
}用來對lvs主從伺服器進行配置的地區,使用vrrp組播方式
virtual_server 10.0.0.114 3 80 {
lb_algo rr 使用的調度演算法是rr
lb_kind DR 使用的負載平衡模式為DR模式
persistence_timeout 3 測試realserver存活逾時時間間隔為3秒
protocol TCP lvs與realserver之間的通訊使用的協議為TCP協議
real_server 10.0.0.2 80{
weight 1 真實伺服器調度所佔權重
TCP_CHECK{
connect_timeout 3 連線逾時時間
connect_port 80
nb_get_retry 3
}
} 配置realserver
} 配置對應的虛擬IP伺服器
查看Linux系統的服務和連接埠對應的設定檔為 /etc/servers檔案
設定系統的umask 使用命令umask 或者在設定檔 /etc/profile中設定。
對於linux叢集,nginx,lvs,keepalived這三個軟體都可以實現負載平衡,怎選擇?
汗,你先看看nginx ,lvs,keepalived都幹嘛的。
叢集不是把機器連一塊就算叢集了..
lvs 與 keepalived的有什不同
呵呵,這個問題也困擾我一陣子,今天上午查了很多資料才搞清楚:1. ipvsadm(LVS)有負載平衡機制,目前支援8中均衡演算法。2. keepalived除了健全狀態檢查以外,也具備負載平衡功能。現在他的健全狀態檢查功能用的比較多,其負載平衡能力被大部分人忽略了。3. lvs+keepalived這種架構下,完全可以使用keepalived來均衡負載(ipvsadm這個組件也需要裝上,只是為了便於管理叢集)。