常見負載均衡軟件有:LVS、Nginx、Haproxy
LVS:
1). 基於4層網絡協議,幾乎無流量產生,這個特點也決定這幾個負載均衡軟件裏負載能力最強,內存、CPU佔用資源也低。
2). 應用範圍廣,不僅對Web服務做負載均衡,而且可結合其他應用做負載,如LVS+MySQL負載均衡。
3). 配置簡單, 可配置東西較少。
4). 無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。
5). 有個虛IP概念。
Nginx:
1). 基於7層網絡協議,對Http應用做分流策略,如配置域名。
2). 高負載、穩定。支持上萬高併發。負載能力小於LVS。
3). 安裝配置簡單,支持的正則比Haproxy豐富。且對網絡穩定性的依賴非常小。
4). 可通過端口檢測到服務器內部的故障,如根據服務器處理網頁返回的狀態碼、超時等,把返回錯誤的請求重新提交到另一個節點。
5). 作Web服務器。
6). 反向代理\負載均衡。
Haproxy:
1). 支持虛擬主機,可工作在4層、7層。
2). 負載均衡效率上來講Haproxy比Nginx更出色,在併發處理上也是優於Nginx。
3). 能夠補充Nginx的一些缺點,如支持Session的保持,Cookie的引導。同時支持通過獲取指定的url來檢測後端服務器的狀態。
4). 支持負載均衡策略較多。如roundrobin簡單輪詢、leastconn最少服務器連接數、static-rr權重輪詢、uri哈希、sourceIP哈希、url_param請求的URL參數等。
LVS 是一個開源的軟件,可實現 Linux平臺下的負載均衡。LVS 是 Linux Virtual Server 的縮寫,意思是 Linux 虛擬服務器。 Linux 內核2.4版本後,LVS 已經是 Linux 內核標準的一部分。
LVS主要工作是提供調度算法,把客戶端請求按照需求調度在Real Server上,Keepalived 主要工作是提供 LVS 控制器的一個冗餘,並且對Real Server做健康檢查,發現Real Server故障,就把它從 LVS 集羣中剔除,Real Server只負責提供服務。如LVS+Keepalived+Nginx模式,Nginx作爲Real Server。
LVS轉發模式
VS/NAT(Virtual Server via Network Address Translation):通過網絡地址轉換,調度器重寫請求報文的目標地址,請求到後端Real Server,後端Real Server的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。客戶請求哪裏來從哪兒返回。
VS/TUN(Virtual Server via IP Tunneling):在使用上面的NAT 技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報文通過 IP 隧道轉發至Real Server,而Real Server將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,採用 VS/TUN 技術後,集羣系統的最大吞吐量可提高 10 倍。
VS/DR (Virtual Server via Direct Routing):VS/DR 通過改寫請求報文的 MAC 地址,將請求發送到Real Server,而後端的Real Server將響應直接返回給客戶。同 VS/TUN 技術一樣,VS/DR 技術可極大地提高集羣系統的伸縮性。後面就按此VS/DR模式作爲操作例子。
OS環境:CentOS7
1). 在20、21上安裝ipvsadm和keepalived軟件
yum -y install ipvsadm
yum -y install keepalived
啓動keepalived服務
systemctl start keepalived.service
使用配置LVS的時候,不能直接配置內核中的ipvs,需使用ipvs的管理工具ipvsadm進行管理。用於查看lvs轉發及代理情況的工具。
2).修改keepalived配置文件
20的Master配置文件如下:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@localhost
}
notification_email_from root@localhost
router_id LVS_01 #表示運行keepalived服務器的一個標識,發郵件時顯示在郵件主題的信息
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色Master
interface ens192 #網卡,ip a查看
virtual_router_id 100 #虛擬路由標識,主備兩個節點的設置必須一樣,以指明各個節點屬於同一VRRP組
priority 100 #定義優先級,Master的priority要高於slave
advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位秒
authentication { #設置驗證類型和密碼
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.20.1.99/24 dev ens192 #設置VIP
}
}
virtual_server 10.20.1.99 443 { #設置虛擬服務器,需指定虛擬IP地址和服務端口
delay_loop 3 #健康時間檢查,單位秒
lb_algo rr #負載均衡調度算法wlc|rr
lb_kind DR #設置LVS實現負載均衡機制,有NAT、TUN、DR三個模式
persistence_timeout 50 #會話保持時間,單位秒。此選項對動態網頁是非常有用
protocol TCP #指定轉發協議類型,有TCP和UDP
real_server 10.20.1.22 443 { #Real Server服務器,這裏爲Nginx服務器
weight 1 #設置權重
TCP_CHECK { #設置檢查方式,可以設置HTTP_GET | SSL_GET
connect_port 443 #檢測Real Server的偵聽端口
connect_timeout 5 #超時時間,單位秒。如果在這個時間內無返回,則說明一次監測失敗
retry 3 #設置多少次監測失敗,就判斷這個Real Server死掉
delay_before_retry 3 #重試間隔
}
}
real_server 10.20.1.23 443 {
weight 1
TCP_CHECK {
connect_port 443
connect_timeout 5
retry 3
delay_before_retry 3
}
}
}
21的slave的/etc/keepalived/keepalived.conf配置,需更改state Backup和修改priority的值小於master的priority。
Master服務器上查看IP,VIP在Master上。
ipvsadm命令查看規則。
3). Real Server配置
因爲VS/DR模式,在後端Real Server即Nginx服務器上配置腳本。配置兩臺Nginx服務器上爲迴環地址lo:0綁定VIP地址、ARP廣播。
vim /opt/scripts/lvs_rs.sh
#!/bin/bash
vip=10.20.1.99
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null
在22、23服務器上分別執行。
4). 測試LVS+Keepalived高可用羣集
客戶端的瀏覽器中,能夠通過LVS+Keepalived羣集的VIP地址漂移(10.20.1.99)正常訪問web,驗證羣集構建成功。
先在20Master上將keepalived.service服務器關閉,查看IP情況:
發現VIP沒了。
然後在21Slave上查看VIP是否漂移過來了:
發現VIP已經來到Slave上了。
這時,將20Master上將keepalived.service服務又重新啓動,VIP後回來了。