1.負(fù)載均衡的類(lèi)型
負(fù)載均衡可以采用硬件設(shè)備(例如常常聽(tīng)見(jiàn)的F5),也可以采用軟件負(fù)載
商用硬件負(fù)載設(shè)備成本通常較高(一臺(tái)幾十萬(wàn)甚至上百萬(wàn)),所以一般情況下會(huì)采用軟件負(fù)載.
軟件負(fù)載解決的兩個(gè)核心問(wèn)題是:選誰(shuí)、轉(zhuǎn)發(fā),其中最著名的是lvs .
2.lvs 是什么?
英文全稱(chēng)是Linux Virtual Server,即Linux 虛擬服務(wù)器
Linux2.4內(nèi)核以后,LVS已經(jīng)是 Linux標(biāo)準(zhǔn)內(nèi)核的一部分
可以將請(qǐng)求分發(fā)給后端真實(shí)服務(wù)器處理
提供了多種調(diào)度算法
輪詢(xún)調(diào)度(Round-RobinScheduling)
加權(quán)輪詢(xún)調(diào)度(WeightedRound-Robin Scheduling)
最小連接調(diào)度(Least-ConnectionScheduling)
加權(quán)最小連接調(diào)度(WeightedLeast-Connection Scheduling)
基于局部性的最少鏈接(Locality-BasedLeast Connections Scheduling)
目標(biāo)地址散列調(diào)度(DestinationHashing Scheduling)
源地址散列調(diào)度(SourceHashing Scheduling)
最短預(yù)期延時(shí)調(diào)度(ShortestExpected Delay Scheduling)
不排 隊(duì) 調(diào) 度 ( Never Queue Scheduling )對(duì)應(yīng):rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
有三種轉(zhuǎn)發(fā)規(guī)則
NAT:簡(jiǎn)單理解,就是數(shù)據(jù)進(jìn)出都通過(guò)LVS,性能不是很好。
TUNL:簡(jiǎn)單理解:隧道
DR:最高效的負(fù)載均衡規(guī)則
3.lvs 的體系結(jié)構(gòu)
最前端的負(fù)載均衡層,用Load Balancer 表示
中間的服務(wù)器集群層,用Server Array 表示
最底端的數(shù)據(jù)共享存儲(chǔ)層,用Shared Storage 表示
在用戶(hù)看來(lái),所有的內(nèi)部應(yīng)用都是透明的,用戶(hù)只是在使用一個(gè)虛擬服務(wù)器提供的高性能服務(wù)
4.keepAlived 是什么?
因?yàn)樗械恼?qǐng)求都要經(jīng)過(guò)負(fù)載均衡,所以負(fù)載均衡必然是非常重要,不能掛掉,說(shuō)白了就是要 keep the lvs alived。
提供的功能就是可以配置2 臺(tái)LVS,一臺(tái)主機(jī),一臺(tái)備機(jī)。并且檢測(cè)任何一個(gè)節(jié)點(diǎn)是否還活著。
(1)定義
keepalived是集群管理中保證集群高可用的一個(gè)服務(wù)軟件,其功能類(lèi)似于heartbeat,用來(lái)防止單點(diǎn)故障。
(2)工作原理
將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)master和多個(gè)backup,master上面有一個(gè)對(duì)外提供服務(wù)的
vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會(huì)發(fā)組播,當(dāng)backup收不到vrrp包時(shí)就認(rèn)為master宕掉了,
這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)來(lái)選舉一個(gè)backup當(dāng)master。這樣的話(huà)就可以保證路由器的高可用了。
(3)VPPR協(xié)議
keepalived是以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP全稱(chēng)VirtualRouter Redundancy Protocol,即虛擬路由冗余協(xié)議。
虛擬路由冗余協(xié)議,可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)
master和多個(gè)backup,master上面有一個(gè)對(duì)外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master
會(huì)發(fā)組播,當(dāng)backup收不到vrrp包時(shí)就認(rèn)為master宕掉了,這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)來(lái)選舉一個(gè)backup當(dāng)master
5.lvs 的優(yōu)點(diǎn)?
抗負(fù)載能力強(qiáng),因?yàn)閘vs 工作方式的邏輯是非常之簡(jiǎn)單,而且工作在網(wǎng)絡(luò)4 層僅做請(qǐng)求分發(fā)之用,沒(méi)有流量,所以在效率上基本不需要太過(guò)考慮。
有完整的雙機(jī)熱備方案,當(dāng)節(jié)點(diǎn)出現(xiàn)故障時(shí),lvs會(huì)自動(dòng)判別,所以系統(tǒng)整體是非常穩(wěn)定的。
基本上能支持所有應(yīng)用,因?yàn)閘vs 工作在 4層,所以它可以對(duì)幾乎所有應(yīng)用做負(fù)載均衡,包括http、數(shù)據(jù)庫(kù)等等。
6.lvs 負(fù)載均衡機(jī)制
lvs是四層負(fù)載均衡,也就是說(shuō)建立在OSI 模型的第四層——傳輸層之上
傳輸層上有TCP/UDP,lvs支持 TCP/UDP的負(fù)載均衡
因?yàn)長(zhǎng)VS 是四層負(fù)載均衡,因此它相對(duì)于其它高層負(fù)載均衡的解決辦法,比如 DNS 域名輪流解析、應(yīng)用層負(fù)載的調(diào)度、客戶(hù)端的調(diào)度等,它的效率是非常高的
lvs的轉(zhuǎn)發(fā)可以通過(guò)修改 IP地址實(shí)現(xiàn)(NAT模式)
lvs的轉(zhuǎn)發(fā)還可以通過(guò)修改直接路由實(shí)現(xiàn)(DR模式)
7.lvs 與 nginx對(duì)比?
負(fù)載度 lvs 優(yōu)于nginx
穩(wěn)定度 lvs 優(yōu)于nginx
服務(wù)器性能要求lvs 優(yōu)于 nginx
網(wǎng)絡(luò)層數(shù)的效率lvs 優(yōu)于 nginx
功能多少 nginx 優(yōu)于lvs
各個(gè)軟件及其版本信息如下:
軟件
版本
Centos系統(tǒng)
Nginx1.16.0
LVSipvsadm-1.27-7.el7.x86_64
Keepalivedkeepalived.x86_64 0:1.3.5-8.el7_6
節(jié)點(diǎn)分配及角色如下:
節(jié)點(diǎn)
192.192.192..154 lvs master
192.192.192..155 lvs slave
192.192.192..150 nginx1
192.192.192..151 nginx2
同時(shí)特別注意這里設(shè)置的VIP地址為:192.192.192..100,VIP也即虛擬的IP地址,即當(dāng)外部請(qǐng)求所訪問(wèn)的IP地址.
基于上述的環(huán)境,部署的架構(gòu)如下:
特別注意:
由于是采用DR模式,也即當(dāng)用戶(hù)請(qǐng)求發(fā)送到VIP時(shí),LVS會(huì)根據(jù)所設(shè)置的負(fù)載均衡算法將請(qǐng)求轉(zhuǎn)發(fā)到具體的Nginx服務(wù)器(RealServer)上,而當(dāng)具體的Nginx服務(wù)器處理完后是直接將結(jié)果返回給用戶(hù)。所以在具體的Nginx服務(wù)器是要設(shè)置回環(huán)的IP,即在lo網(wǎng)卡上設(shè)置VIP的地址。
(1)首先在lvsmaster節(jié)點(diǎn)和slave節(jié)點(diǎn)關(guān)閉防火墻以及安裝lvs和keepalived
關(guān)閉lvsmaster和slave節(jié)點(diǎn)上的訪火墻:
systemctlstop firewalld
systemctldisable firewalld
yuminstall ipvsadm
yuminstall keepalived
(2)在nginx1和nginx2節(jié)點(diǎn)上安裝nginx:
#添加nginx的yum源
rpm-ivhhttp://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安裝
yuminstall nginx
安裝完成nginx后,編輯其默認(rèn)頁(yè)面,加上特定的信息,這樣才能判斷請(qǐng)求到底是哪個(gè)nginx處理的,即:
vi/usr/share/nginx/html/index.html
對(duì)于nginx1加上150字樣,nginx2加上151字樣,即:
當(dāng)直接訪問(wèn)nginx1時(shí),效果為:當(dāng)直接訪問(wèn)nginx2時(shí),效果為
(3)在lvsmaster節(jié)點(diǎn)和lvsslave節(jié)點(diǎn)配置keepalived信息:
首先配置lvsmaster節(jié)點(diǎn):
編輯如下文件:
[root@c6-yz-htsb-sc01~]# cat /etc/keepalived/keepalived.conf
!Configuration File for keepalived
#全局配置
global_defs{
#郵件通知信息
# notification_email {
#定義收件人
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
#定義發(fā)件人
# notification_email_from Alexandre.Cassen@firewall.loc
#SMTP服務(wù)器地址
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
#路由器標(biāo)識(shí),一般不用改,也可以寫(xiě)成每個(gè)主機(jī)自己的主機(jī)名
router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
#定義用于實(shí)例執(zhí)行的腳本內(nèi)容,比如可以在線(xiàn)降低優(yōu)先級(jí),用于強(qiáng)制切換
vrrp_scriptchk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
#一個(gè)vrrp_instance就是定義一個(gè)虛擬路由器的,實(shí)例名稱(chēng)
vrrp_instanceVI_1 {
#定義初始狀態(tài),可以是MASTER或者BACKUP
state MASTER
#工作接口,通告選舉使用哪個(gè)接口進(jìn)行
interface eth0
#虛擬路由ID,如果是一組虛擬路由就定義一個(gè)ID,如果是多組就要定義多個(gè),而且這個(gè)虛擬
#ID還是虛擬MAC最后一段地址的信息,取值范圍0-255
virtual_router_id 51
#如果你上面定義了MASTER,這里的優(yōu)先級(jí)就需要定義的比其他的高
priority 100
#通告頻率,單位為秒
advert_int 1
mcast_src_ip=134.134.134.154
#通信認(rèn)證機(jī)制,這里是明文認(rèn)證還有一種是加密認(rèn)證
authentication {
auth_type PASS
auth_pass 1111
}
#設(shè)置虛擬VIP地址,一般就設(shè)置一個(gè),在LVS中這個(gè)就是為L(zhǎng)VS主機(jī)設(shè)置VIP的,這樣你就不用自己手動(dòng)設(shè)置了
virtual_ipaddress {
#IP/掩碼 dev配置在哪個(gè)網(wǎng)卡
134.134.134.163
}
#追蹤腳本,通常用于去執(zhí)行上面的vrrp_script定義的腳本內(nèi)容
track_script {
chk_nginx
}
}
#定義LVS集群服務(wù),可以是IP+PORT;也可以是fwmark數(shù)字,也就是防火墻規(guī)則
#所以通過(guò)這里就可以看出來(lái)keepalive天生就是為ipvs而設(shè)計(jì)的
virtual_server134.134.134.163 80 {
delay_loop 6
# 算法
lb_algo rr
# LVS的模式
lb_kind DR
#子網(wǎng)掩碼,這個(gè)掩碼是VIP的掩碼
nat_mask 255.255.255.0
#持久連接超時(shí)時(shí)間
persistence_timeout 50
#定義協(xié)議
protocol TCP
#后端應(yīng)用服務(wù)器 IPPORT
real_server 134.134.134.154 80 {
# 權(quán)重
weight 1
# 針對(duì)應(yīng)用服務(wù)器做健康檢查的方法
TCP_CHECK {
# 連接超時(shí)時(shí)間
connect_timeout 3
# 嘗試次數(shù)
nb_get_retry 3
# 每次嘗試之間間隔幾秒
delay_before_retry 3
}
}
nginx進(jìn)程檢測(cè)腳本:
#!/bin/bash
A=`ps-C nginx --no-header | wc -l`
if [$A -eq 0 ];then
/usr/sbin/nginx #嘗試重新啟動(dòng)nginx
sleep 2 #睡眠2秒
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived #啟動(dòng)失敗,將keepalived服務(wù)殺死。將vip漂移到其它備份節(jié)點(diǎn)
fi
分別啟動(dòng)lvsmaster和slave的keepalived,并且設(shè)置為開(kāi)機(jī)自啟動(dòng):
systemctlstart keepalived
systemctlenable keepalived
此時(shí)在lvsmaster節(jié)點(diǎn)查看IP地址情況:
ip a
在nginx服務(wù)器上設(shè)置回環(huán)IP:
由于服務(wù)器重啟后設(shè)置的回環(huán)IP會(huì)失效,所以將設(shè)置的內(nèi)容放在腳本lvs-rs.sh中,內(nèi)容如下:
#!/bin/bash
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-w net.ipv4.ip_forward=1
ifconfiglo:0 134.134.134.163 broadcast 134.134.134.163 netmask255.255.255.255 up
routeadd -host 134.134.134.163 dev lo:0
執(zhí)行后,查看IP信息,可以在lo網(wǎng)卡中看到VIP的信息,即:
END
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/129964.html
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20