lvs,keepalived做HA
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
一,簡介
LVS(Linux Virtual Server),可用來實現(xiàn)LINUX下的簡單負載均衡。
LVS工作在TCP/IP協(xié)議的四層,其轉發(fā)是依賴于四層協(xié)議的特征進行轉發(fā)的,由
于其轉發(fā)要依賴于協(xié)議的特征進行轉發(fā),因此需要在內核的TCP/IP協(xié)議棧進行過濾篩
選,而這樣的過濾轉發(fā)規(guī)則可由管理員對內核進行定義。
LVS在內核空間中工作的是“ipvs”,而在用戶空間中工作的,用來定義集群服
務規(guī)則的是“ipvsadm”。
?三種負載均衡轉發(fā)的機制
1:NAT(Network Address Translation)網(wǎng)絡地址翻譯技術。
當用戶請求到達調度器時,調度器將改寫請求的地址為真實Server地址。在服
務器端處理后,需要再次經(jīng)過負載調度器將報文的源地址和源端口改成虛擬IP地址和
相應端口,然后把數(shù)據(jù)發(fā)送給用戶,完成整個負載調度過程。
2:TUN(IP Tunneling)IP隧道技術
調度器采用IP隧道技術將用戶請求轉發(fā)到某個Real Server,而這個Real
Server將直接響應用戶的請求,不再經(jīng)過調度器。
3:DR(Direct Routing)直接路由技術
DR通過改寫請求報文的MAC地址,將請求發(fā)送到真實Server,而真實Server將響應直
接返回給客戶,比TUN少了IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,
但是要求調度器與真實服務器在同一物理網(wǎng)段上
n 負載調度的算法
1:rr(Round Robin )輪循,這種算法平等地對待每一臺真實服務器,而不管服務器上實際
的負載狀況和連接狀態(tài)
2:wrr(Weighted Round Robin )加權輪循,根據(jù)真實服務器的不同處理能力來調度請求
3:lc(Least Connections )最少連接,動態(tài)地將請求調度到已建立的鏈接數(shù)最少的服務器
4:wlc(Weighted Least Connections )加權最少連接,每個服務節(jié)點可以用相應的權值表
示其處理能力,較高權值的服務器將承受較大比例的活動連接負載
5:dh(Destination hashing )目標地址Hash,根據(jù)請求的目標IP,作為散列鍵從靜態(tài)分配
的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否
則返回空
6:SH(Source hashing)源地址hash,根據(jù)請求的源IP,作為散列鍵從靜態(tài)分配的散列表找
出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空
7:SED(Shortest Expected Delay)最短期望的延遲,基于wlc算法,計算每個真實服務器的
請求延遲,把請求轉發(fā)給最短延遲的服務器
8:NQ(Never Queue)最少排隊,某臺真實服務器沒有連接時,就直接轉發(fā)過去
9:LBLC(Locality-Based Least-Connection)基于局部的最少連接,根據(jù)請求的目標IP,找
出該地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發(fā)送到該服務器;
若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接”
的原則選出一個可用的服務器,將請求發(fā)送到該服務器
10:LBLCR(Locality-Based Least-Connection with replication Scheduling)帶復制的基
于局部最少連接,它與LBLC算法的不同之處是它要維護從一個目標IP到一組服務器的映
射,而LBLC是維護從一個目標IP到一臺服務器的映射。根據(jù)請求的目標IP,找出該目標IP
對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超
載,將請求發(fā)送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中另外選
出一臺服務器,將該服務器加入到服務器組中,將請求發(fā)送到該服務器
二,簡介
LVS+Keepalived是一個常見的組合,使用LVS來實現(xiàn)負載均衡,使用Keepalived來實
現(xiàn)HA。
由于Keepalived是基于LVS的,因此這兩部分功能,都可以通過Keepalived來實現(xiàn),
配置也基本上在Keepalived上配置。
??配置Keepalived.conf
(1)全局配置和VRRPD的配置跟以前是一樣的,只需要添加LVS的配置就可以了。
(2)主服務器和備用服務器的配置是一樣的。
(3)LVS+DR模式中,只支持IP的轉發(fā),不支持端口轉發(fā),也就是說virtual_server和
real_server的配置節(jié)點中端口必須一樣
virtual_server 192.168.1.77 8080 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.201 8080 {
weight 3
#TCP_CHECK {
# connect_timeout 10
# nb_get_retry 3
# delay_before_retry 3
# connect_port 80
#}
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
真實服務器上的配置
真實服務器上需要對VIP進行綁定,并進行路由設置等一系列操作,這里整理為一個
腳本供參考:lvs_real.sh:
#!/bin/sh
VIP=192.168.1.77
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start tunl port"
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
stop)
echo " stop tunl port"
ifconfig lo:0 down
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
n 說明
1:基本的使用方法:sh lvs_real.sh start,如果沒有權限的話,需要授權
2:VIP被綁定在環(huán)回接口lo:0上,其廣播地址是其本身,子網(wǎng)掩碼是
255.255.255.255。采用這種可變長掩碼方式可以避免IP地址沖突
3:echo “1”,echo “2” 這段的作用是抑制ARP(地址廣播協(xié)議)廣播
轉載于:https://my.oschina.net/u/2540936/blog/661863
總結
以上是生活随笔為你收集整理的lvs,keepalived做HA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php加密总结
- 下一篇: [PHP] Laravel常见报错总结(