LVS+Keepalive 實現負載均衡高可用叢集
一、LVS 介紹
目前LVS已經被整合到Linux核心模組中。LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器,該專案在Linux核心中實現了基於IP的資料請求負載均衡排程方案,終端網際網路使用者從外部訪問公司的外部負載均衡伺服器,終端使用者的Web請求會傳送給LVS排程器,排程器根據自己預設的演算法決定將該請求傳送給後端的某臺Web伺服器,比如,輪詢演算法可以將外部的請求平均分發給後端的所有伺服器,終端使用者訪問LVS排程器雖然會被轉發到後端真實的伺服器,但如果真實伺服器連線的是相同的儲存,提供的服務也是相同的服務,終端使用者不管是訪問哪臺真實伺服器,得到的服務內容都是一樣的,整個叢集對使用者而言都是透明的。最後根據LVS工作模式的不同,真實伺服器會選擇不同的方式將使用者需要的資料傳送到終端使用者,LVS工作模式分為NAT模式、TUN模式、以及DR模式。
二、LVS叢集搭建
(1)環境搭建:client --> DR -->RS --client
LVS無需安裝
安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive
ipvsadm是通過命令列管理,而keepalive讀取配置檔案管理
主機名 | 主機IP | 備註 |
server1 | 172.25.1.1 | 1.這裡使用的是redhat7.6系統 2.防火牆和selinux都關閉 3.server2、3的作為RS機子http訪問結果為主機名 4.server1 作為DR機 下載ipvsam 5.server1 新增虛擬ip地址(VIP) 172.25.1.100 |
server2 | 172.25.1.2 | |
server3 | 172.25.1.3 | |
server4 | 172.25.1.4 |
(2)安裝ipvsam管理工具
yum install ipvsadm -y
(3) 在server1 eth0網路卡繫結VIP地址(高可用)
ip addr add 172.25.1.100/24 dev eth0
(4) 新增虛擬服務以及將其關聯到真實伺服器上去
ipvsadm -A -t 172.25.1.100:80 -s rr # 新增虛擬服務
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.2:80 -g #將虛擬服務關聯到真實服務上
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g
#LVS預設無80埠,需另外新增新的虛擬IP記錄
(5) 檢視配置結果
(6)web伺服器配置
給兩臺伺服器上的網路卡繫結VIP地址
[root@server2 ~]# ip addr add 172.25.1.100/32 dev eth0
[root@server3 ~]# ip addr add 172.25.1.100/32 dev eth0
抑制ARP響應(noarp)
作用使得
yum install arptables.x86_64 -y
[root@server2 html]# arptables -A INPUT -d 172.25.1.100 -j DROP
[root@server2 html]# arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.2
[root@server3 html]# arptables -A INPUT -d 172.25.1.100 -j DROP
[root@server3 html]# arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.3
檢視策略
實驗效果:實現負載均衡
arp解析檢視
arp詳解
01.ARP協議,全稱"Address Resolut ion Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的實體地址(MAC地址)
ARP協議要求通訊的主機雙方必須在同一個物理網段(即區域網環境)!
02.為了提高IP轉換MAC的效率,系統會將解析結果儲存下來,這個結果叫做ARP快取
三、LVS叢集的工作模式
DR直接路由模式
client --> DR -->RS --client
DR模式是通過改寫請求報文的目標MAC地址,將請求傳送給真實伺服器的,而真實伺服器響應後的處理結果直接返回給客戶端使用者。
DR技術可極大地提高叢集系統的伸縮性,但要求排程器與真實伺服器RS都有一塊物理網路卡連在同一物理網段上,即必須在同一區域網(VLAN)環境。
NAT模式
client --> vs --> rs --> vs --> client
通過網路地址轉換,排程器重寫請求報文的目標地址,根據預設的排程演算法,將請求分派給後端的真實伺服器,真實伺服器的響應報文處理之後,返回時必須通過排程器,經過排程器時報文的源地址被重寫,再返回給客戶,完成整個副在排程過程。
TUN 工作模式(隧道工作模式)
客戶請求包封裝在一個IP tunnel裡面,然後傳送給RS節點伺服器,節點伺服器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址傳送給客戶不用經過LB伺服器
不足:
1、RS配置複雜(IPIP模組)
2、RS上繫結VIP,風險比較大
FULLNAT(系統不自帶)
LVS的DR和NAT模式要求RS和LVS在同一VLAN 中,導致部署成本過高,TUNNEL模式雖然可以跨vlan,但RealServer 上需要部署ipip隧道模組等,網路拓撲上需要連通外網,教為複雜,不易運維,
為解決上述問題,開發出FULLNAT,該模式和NAT模式的區別是:資料包進入時,除了做DNAT,還做SNAT(使用者ip-->內網ip),從而實現lvs-真實伺服器之間可以跨vlan通訊,真實伺服器需要連線內網。類似於地鐵站多個閘機。
四、Keepalive+LVS實現
Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實現系統網路服務的高可用功能。
(1)在server1和server4上安裝Keepalive
[root@server1 ~]# yum install keepalived -y
[root@server4 ~]# yum install ipvsadm keepalived -y
(2)編寫keepalived.conf配置檔案
server1
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalive@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.1.100
}
}
virtual_server 172.25.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.1.2 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.1.3 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
server4
(3)開啟keepalived服務
systemctl start keepalived.service
檢視vip
檢視LVS狀態
keepalive健康檢查功能
delay_loop 隔多長時間做一次健康檢測,單位為秒
connect_timeout 連線超時時間,單位為秒
nb_get_retry 檢測失敗後的重試次數,如果達到重試次數仍然失敗,將後端從伺服器池中移除。
delay_before_retry 失敗重試的間隔時間,單位為秒
測試:
注意:因為虛擬的ip重啟之後就會失效,故須加入開機啟動項rc.local檔案並賦予其可執行許可權
相關文章
- Haproxy+Keepalived高可用負載均衡叢集負載
- Keepalived實現Nginx負載均衡高可用Nginx負載
- orleans叢集及負載均衡實現負載
- 3.RabbitMQ高階叢集搭建(Haproxy負載均衡、Keepalived高可用)MQ負載
- RabbitMQ(四):使用Docker構建RabbitMQ高可用負載均衡叢集MQDocker負載
- LVS+Keepalived 實現高可用負載均衡負載
- haporxy+keepalived實現負載均衡+高可用負載
- 負載均衡叢集負載
- keepalived+haproxy實現mysql負載均衡高可用MySql負載
- keepalived高可用負載均衡負載
- Nginx負載均衡高可用Nginx負載
- CentOS7 實現 Keepalived + Nginx 實現高可用 Web 負載均衡CentOSNginxWeb負載
- dubbo叢集和負載均衡負載
- Nginx實現請求的負載均衡 + keepalived實現Nginx的高可用Nginx負載
- haproxy(單機)+mysql叢集負載均衡MySql負載
- 【Nginx】如何實現Nginx的高可用負載均衡?看完我也會了!!Nginx負載
- nginx反向大理和負載均衡以及高可用Nginx負載
- Mycat 雙主雙從-負載均衡-高可用負載
- 淺談達夢DSC叢集以及負載均衡實現與驗證負載
- kubernetes叢集內排程與負載均衡負載
- 負載均衡 - MQTT Broker 叢集詳解(一)負載MQQT
- windows NLB+ARR實現Web負載均衡高可用/可伸縮的方法WindowsWeb負載
- 11、redis使用ruby實現叢集高可用Redis
- Dapr + .NET Core實戰(十一)單機Dapr叢集負載均衡負載
- 叢集,lvs負載均衡的四種工作模式負載模式
- Nginx 高階篇(三)負載均衡的實現Nginx負載
- GRPC 負載均衡實現RPC負載
- Ribbon實現負載均衡負載
- nginx實現負載均衡Nginx負載
- docker初體驗:docker部署nginx負載均衡叢集DockerNginx負載
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- linux搭建LVS+keepalive+nginx實現叢集高效能負載均衡配置詳解LinuxNginx負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- PostgreSQL repmgr高可用叢集+keepalived高可用SQL
- (15) SpringCloud-使用Eureka叢集搭建實現高可用SpringGCCloud
- (13) SpringCloud-使用Eureka叢集搭建實現高可用SpringGCCloud
- 構建MHA實現MySQL高可用叢集架構MySql架構
- Keepalived+Nginx+Tomcat配置高可用負載均衡系統示例NginxTomcat負載