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