LVS+Keepalive 实现负载均衡高可用集群
一、LVS 介紹
? ? ? ? 目前LVS已經(jīng)被集成到Linux內(nèi)核模塊中。LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務(wù)器,該項目在Linux內(nèi)核中實現(xiàn)了基于IP的數(shù)據(jù)請求負(fù)載均衡調(diào)度方案,終端互聯(lián)網(wǎng)用戶從外部訪問公司的外部負(fù)載均衡服務(wù)器,終端用戶的Web請求會發(fā)送給LVS調(diào)度器,調(diào)度器根據(jù)自己預(yù)設(shè)的算法決定將該請求發(fā)送給后端的某臺Web服務(wù)器,比如,輪詢算法可以將外部的請求平均分發(fā)給后端的所有服務(wù)器,終端用戶訪問LVS調(diào)度器雖然會被轉(zhuǎn)發(fā)到后端真實的服務(wù)器,但如果真實服務(wù)器連接的是相同的存儲,提供的服務(wù)也是相同的服務(wù),最終用戶不管是訪問哪臺真實服務(wù)器,得到的服務(wù)內(nèi)容都是一樣的,整個集群對用戶而言都是透明的。最后根據(jù)LVS工作模式的不同,真實服務(wù)器會選擇不同的方式將用戶需要的數(shù)據(jù)發(fā)送到終端用戶,LVS工作模式分為NAT模式、TUN模式、以及DR模式。
二、LVS集群搭建
(1)環(huán)境搭建:client --> DR -->RS --client
LVS無需安裝
安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive
ipvsadm是通過命令行管理,而keepalive讀取配置文件管理
| 主機(jī)名 | 主機(jī)IP | 備注 |
| server1 | 172.25.1.1 | 1.這里使用的是redhat7.6系統(tǒng) 2.防火墻和selinux都關(guān)閉 3.server2、3的作為RS機(jī)子http訪問結(jié)果為主機(jī)名 4.server1 作為DR機(jī) 下載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網(wǎng)卡綁定VIP地址(高可用)
ip addr add 172.25.1.100/24 dev eth0(4) 添加虛擬服務(wù)以及將其關(guān)聯(lián)到真實服務(wù)器上去
ipvsadm -A -t 172.25.1.100:80 -s rr # 添加虛擬服務(wù) ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.2:80 -g #將虛擬服務(wù)關(guān)聯(lián)到真實服務(wù)上 ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g#LVS默認(rèn)無80端口,需另外添加新的虛擬IP記錄(5)?查看配置結(jié)果
(6)web服務(wù)器配置
給兩臺服務(wù)器上的網(wǎng)卡綁定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響應(yīng)(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查看策略?
實驗效果:實現(xiàn)負(fù)載均衡
arp解析查看?
arp詳解
01.ARP協(xié)議,全稱"Address Resolut ion Protocol",中文名是地址解析協(xié)議,使用ARP協(xié)議可實現(xiàn)通過IP地址獲得對應(yīng)主機(jī)的物理地址(MAC地址)
?ARP協(xié)議要求通信的主機(jī)雙方必須在同一個物理網(wǎng)段(即局域網(wǎng)環(huán)境)!
02.為了提高IP轉(zhuǎn)換MAC的效率,系統(tǒng)會將解析結(jié)果保存下來,這個結(jié)果叫做ARP緩存
三、LVS集群的工作模式
DR直接路由模式
client --> DR -->RS --client
DR模式是通過改寫請求報文的目標(biāo)MAC地址,將請求發(fā)送給真實服務(wù)器的,而真實服務(wù)器響應(yīng)后的處理結(jié)果直接返回給客戶端用戶。
DR技術(shù)可極大地提高集群系統(tǒng)的伸縮性,但要求調(diào)度器與真實服務(wù)器RS都有一塊物理網(wǎng)卡連在同一物理網(wǎng)段上,即必須在同一局域網(wǎng)(VLAN)環(huán)境。
NAT模式
client --> vs --> rs --> vs --> client
通過網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器重寫請求報文的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請求分派給后端的真實服務(wù)器,真實服務(wù)器的響應(yīng)報文處理之后,返回時必須通過調(diào)度器,經(jīng)過調(diào)度器時報文的源地址被重寫,再返回給客戶,完成整個副在調(diào)度過程。
TUN 工作模式(隧道工作模式)
客戶請求包封裝在一個IP tunnel里面,然后發(fā)送給RS節(jié)點服務(wù)器,節(jié)點服務(wù)器接收到之后解開IP tunnel后,進(jìn)行響應(yīng)處理。并且直接把包通過自己的外網(wǎng)地址發(fā)送給客戶不用經(jīng)過LB服務(wù)器
不足:
1、RS配置復(fù)雜(IPIP模塊)
2、RS上綁定VIP,風(fēng)險比較大
FULLNAT(系統(tǒng)不自帶)
LVS的DR和NAT模式要求RS和LVS在同一VLAN 中,導(dǎo)致部署成本過高,TUNNEL模式雖然可以跨vlan,但RealServer 上需要部署ipip隧道模塊等,網(wǎng)絡(luò)拓?fù)渖闲枰B通外網(wǎng),教為復(fù)雜,不易運維,
為解決上述問題,開發(fā)出FULLNAT,該模式和NAT模式的區(qū)別是:數(shù)據(jù)包進(jìn)入時,除了做DNAT,還做SNAT(用戶ip-->內(nèi)網(wǎng)ip),從而實現(xiàn)lvs-真實服務(wù)器之間可以跨vlan通訊,真實服務(wù)器需要連接內(nèi)網(wǎng)。類似于地鐵站多個閘機(jī)。
四、Keepalive+LVS實現(xiàn)
Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節(jié)點進(jìn)行健康檢查的功能,另一方面也可實現(xiàn)系統(tǒng)網(wǎng)絡(luò)服務(wù)的高可用功能。
(1)在server1和server4上安裝Keepalive?
[root@server1 ~]# yum install keepalived -y [root@server4 ~]# yum install ipvsadm keepalived -y(2)編寫keepalived.conf配置文件
server1
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from keepalive@localhostsmtp_server 127.0.0.1 smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0 }vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.1.100} }virtual_server 172.25.1.100 80 {delay_loop 6lb_algo rrlb_kind DR#persistence_timeout 50protocol TCPreal_server 172.25.1.2 80 {weight 1TCP_CHECK{connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.25.1.3 80 {weight 1TCP_CHECK{connect_timeout 3nb_get_retry 3delay_before_retry 3}} }server4
(3)開啟keepalived服務(wù)
systemctl start keepalived.service查看vip
查看LVS狀態(tài)
?keepalive健康檢查功能
delay_loop 隔多長時間做一次健康檢測,單位為秒?
connect_timeout ?連接超時時間,單位為秒
nb_get_retry ?檢測失敗后的重試次數(shù),如果達(dá)到重試次數(shù)仍然失敗,將后端從服務(wù)器池中移除。
delay_before_retry ?失敗重試的間隔時間,單位為秒
測試:
注意:因為虛擬的ip重啟之后就會失效,故須加入開機(jī)啟動項rc.local文件并賦予其可執(zhí)行權(quán)限
?
?
?
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的LVS+Keepalive 实现负载均衡高可用集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible中的角色使用
- 下一篇: HAProxy实现负载均衡及高可用集群(