LVS負載均衡之DR模式
常用的負載均衡開源軟件有nginx、lvs、haproxy,商業的硬件負載均衡設備F5、Netscale。
LVS模式工作在網絡層,且由內核實現負載轉發,效率要比nginx高。
LVS負載均衡包含三種模式:?
- NAT模式(類似路由器,實現外網內網地址映射,負載均衡服務器修改請求包的源以及目的MAC地址和IP地址,發送給實際服務器;負載均衡服務器,修改響應包的源以及目的MAC地址和IP地址,發送給客戶端。請求和響應報文都需要經過負載均衡服務器)?
- TUN模式(IP隧道,負載均衡服務器將外網傳來的數據包封裝在IP隧道中,傳給實際服務器。實際服務器的響應直接發給客戶端,而不需要經過負載均衡服務器。)?
- DR模式(負載均衡服務器和後端的實際服務器擁有相同的虛擬IP地址,負載均衡服務器收到響應包後,修改目的MAC地址發給實際服務器,實際服務器將響應包直接發給客戶端,不需要經過負載均衡服務器)
LVS 的負載均衡算法:
1》輪叫調度 rr
順序輪詢到集群中的真實服務器。
2》加權輪叫 wrr
根據服務器的性能來基於權重分配輪詢的請求。
3》最少鏈接 lc
將網絡請求調度到已建立的鏈接數最少的服務器上。
4》加權最少鏈接 wlc
性能差異較大的情況下。具有較高權重的服務器將承受比較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權重。
5》基於局部性的最少鏈接 lblc
針對目標IP地址的負載均衡,適用於Cache集群系統。
6》帶復制的基於局部性的最少鏈接 lblcr
7》目標地址散列 dh
根據請求的目標IP地址,作為散列鍵從靜態分配的散列表中找到相應的服務器,若該服務器是可用的且無超載則將請求發送到該服務器,否則返回空。
8》源地址散列 sh
根據請求的源IP地址,作為散列鍵從靜態分配的散列表中找到相應的服務器,若該服務器是可用的且無超載則將請求發送到該服務器,否則返回空。
9》源IP端口散列
適用於需要保證來自同一用戶同一業務的請求被分發到同一臺服務器。
10》隨機
適用於集群中各機器性能相當而且無明顯優劣差異的場景。
搭建LVS DR模式負載均衡
其中,負載均衡服務器的IP地址為 10.10.10.100/24 和 10.10.10.120/32(該IP地址是用戶訪問的IP地址), Real Server 1的IP地址為10.10.10.121/24, Real Server 2的IP地址為10.10.10.122/24,三者連接在同一個局域網中,且 RS1和 RS2的虛擬IP地址(可以在lo或者lo:0上設置該IP地址,即本地環回,這樣該虛擬IP只對該機器本身可見,不會暴露在外部造成IP沖突)都設為負載均衡服務器的IP地址 dev-1.?
????這樣外部訪問10.10.10.100時,會訪問到負載均衡服務器,而負載均衡服務器選擇某個實際服務器,比如RS1,然後將包的目的MAC地址修改為RS1的MAC地址,在將包送到局域網上。此時對於請求數據包來說,目的MAC地址為RS1的MAC地址,因此RS1會收到,RS1發現包的目的MAC為自身,且目的IP地址為10.10.10.100,也是自身的一個IP,於是就認為數據包是發到自己的,就開始進行處理。
一、安裝http服務
1、在RS1和RS2上分別安裝httpd服務:yum install httpd -y
2. 修改/etc/httpd/conf/httpd.conf 文件,進行相應的配置。?
3. 啟動httpd服務,並設置防火墻開放80端口
二、配置負載均衡器LB
1、yum install ipvsadm -y
2、設置實際ip和虛擬ip
ifconfig eth0 10.10.10.120/24
ifconfig eth0:0 10.10.10.100 netmask 255.255.255.255 #虛擬IP,暴露給外部
3、設置負載轉發
方式一,通過ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm --set?30 5 60
#vip on load balancer
ipvsadm -A -t 10.10.10.100:80 -s wrr -p 20 #接受轉發協議
ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.121:80 -g -w 1 #增加轉發目的地
ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.122:80 -g -w 1 #增加轉發目的地
ipvsadm -L -n
方式二,通過keepalived
vim /etc/keepalived/keepalived.conf 修改配置文件如下
global_defs {?
???notification_email {?
?????????xxxxxx
???}?
???notification_email_from xxxxxx?
???smtp_server xxxxxx?
???smtp_connection_timeout 30
???router_id LVS_DEVEL? # 設置lvs的id,在一個網絡內應該是唯一的
}?
vrrp_instance VI_1 {?
????state MASTER?? #指定Keepalived的角色,MASTER為主,BACKUP為備?????????
????interface?eth0? #指定Keepalived的角色,MASTER為主,BACKUP為備
????virtual_router_id 51? #虛擬路由編號,主備要一致
????priority 100? #定義優先級,數字越大,優先級越高,主DR必須大於備用DR???
????advert_int 1? #檢查間隔,默認為1s
????authentication {?
????????auth_type PASS?
????????auth_pass 1111?
????}?
????virtual_ipaddress {?
????????10.10.10.100? #定義虛擬IP(VIP)為10.10.10.100,可多設,每行一個
????}?
}?
\# 定義對外提供服務的LVS的VIP以及port
virtual_server 10.10.10.100 80 {?
????delay_loop 6 # 設置健康檢查時間,單位是秒???????????????????
????lb_algo wrr # 設置負載調度的算法為wlc??????????????????
????lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式??
????nat_mask 255.255.255.0???????????????
????persistence_timeout 0?????????
????protocol TCP?????????????????
????real_server 10.10.10.121 80 {? # 指定real server1的IP地址
????????weight 3?? # 配置節點權值,數字越大權重越高?????????????
????????TCP_CHECK {?
????????connect_timeout 10????????
????????nb_get_retry 3?
????????delay_before_retry 3?
????????connect_port 80?
????????}?
????}?
????real_server 10.10.10.122 80 {? # 指定real server2的IP地址
????????weight 3? # 配置節點權值,數字越大權重越高?
????????TCP_CHECK {?
????????connect_timeout 10?
????????nb_get_retry 3?
????????delay_before_retry 3?
????????connect_port 80?
????????}?
?????}?
}
?
啟動keepalived服務
systemctl start keepalived
三、配置Real Server
1、配置網卡:
ifconfig lo:0 10.10.10.100 netmask 255.255.255.255 #即設置虛擬IP地址,該IP地址綁定在環回網卡上,不會對外暴露
2、設置內核參數:
[root@dev-2 lvs]#vim /etc/sysctl.conf
[root@dev-2 lvs]# sysctl -p
net.ipv4.ip_forward = 1 #打開路由轉發
net.ipv4.conf.all.arp_ignore = 1 #只回答目的IP為本網口IP地址的arp包的請求
net.ipv4.conf.all.arp_announce = 2 #對查詢目標使用最適當的本機地址
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
四、使用客戶端測試
此時使用客戶端訪問?http://10.10.10.100, 請求會被轉發到RS1或者RS2上。
LVS負載均衡之DR模式