1.keepalived VRRP 介紹
keepalived是什么?
?????????keepalived是集群管理中保證集群高可用的一個(gè)服務(wù)軟件,用來(lái)防止單點(diǎn)故障。
keepalived工作原理
? ? ? ????keepalived是以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP全稱Virtual Router 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。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個(gè)模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)以及全局配置文件的加載和解析。check負(fù)責(zé)健康檢查,包括常見的各種檢查方式。vrrp模塊是來(lái)實(shí)現(xiàn)VRRP協(xié)議的。
腦裂? split? barin:
Keepalived的BACKUP主機(jī)在收不到MASTER主機(jī)報(bào)文后就會(huì)切換成為master,如果是它們之間的通信線路出現(xiàn)問(wèn)題,無(wú)法接收到彼此的組播通知,但是兩個(gè)節(jié)點(diǎn)實(shí)際都處于正常工作狀態(tài),這時(shí)兩個(gè)節(jié)點(diǎn)均為master強(qiáng)行綁定虛擬IP,導(dǎo)致不可預(yù)料的后果,這就是腦裂。
關(guān)于腦裂問(wèn)題的解決方法:
- 添加更多的檢測(cè)手段,比如冗余的心跳線(兩塊網(wǎng)卡做健康監(jiān)測(cè)),ping對(duì)方等等。盡量減少"裂腦"發(fā)生機(jī)會(huì)。(指標(biāo)不治本,只是提高了檢測(cè)到的概率);
- 設(shè)置仲裁機(jī)制。兩方都不可靠,那就依賴第三方。比如啟用共享磁盤鎖,ping網(wǎng)關(guān)等。(針對(duì)不同的手段還需具體分析);
- 爆頭,將master停掉。然后檢查機(jī)器之間的防火墻。網(wǎng)絡(luò)之間的通信。
2.Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡
通過(guò)Nginx的upstream實(shí)現(xiàn)負(fù)載均衡
proxy-master:? ? ? ? 192.168.134.165
proxy-slave:? ? ? ? 192.168.134.166
real-server1:? ? ? ? 192.168.134.163????????
real-server2:? ? ? ? 192.168.134.164
VIP? ? ? ? ? ? ? ? ? ? ? ? 192.168.1345.160
2.1準(zhǔn)備工作
- 關(guān)閉四臺(tái)機(jī)器上的防火墻和selinux
systemctl stop firewalld
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux //關(guān)閉selinux,重啟生效
- 在四臺(tái)機(jī)器上安裝nginx
[root@proxy-master ~]# cd /etc/yum.repos.d/
[root@proxy-master yum.repos.d]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@proxy-master ~]# yum install yum-utils -y
[root@proxy-master ~]# yum install nginx -y
[root@proxy-master ~]# systemctl start nginx
2.2兩臺(tái)服務(wù)器做代理
proxy-master:192.168.134.165和proxy-slave:192.168.134.166做代理。
在兩臺(tái)代理機(jī)器上都配置:
[root@master ~]# vim /etc/nginx/conf.d/default.conf
upstream aren {
server 192.168.134.163:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.134.164:80 weight=1 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
root /usr/share/nginx/html;
location /{
proxy_pass http://aren;
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Forwarded-For $remote_addr;
}
[root@master ~]# nginx -s reload
2.3在兩臺(tái)Keepalived實(shí)現(xiàn)調(diào)度器HA
注:主/備調(diào)度器均能夠?qū)崿F(xiàn)正常調(diào)度
1. 主/備調(diào)度器安裝軟件
主:
[root@proxy-master ~]# yum install -y keepalived
[root@proxy-slave ~]# yum install -y keepalived
[root@proxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak ##備份
! Configuration File for keepalived
global_defs {
router_id directory1
}
vrrp_instance VI_1 {
state MASTER #定義為主
interface ens33 #VIP綁定接口
virtual_router_id 80 #整個(gè)集群的調(diào)度器一致
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123
}
virtual_ipaddress {
192.168.134.160/24 #VIP
}
}
備:
[root@proxy-slave ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@proxy-slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id directory2 #
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 80
priority 50 #back的優(yōu)先級(jí)為50 (小于master)
advert_int 1
authentication {
auth_type PASS
auth_pass 123
}
virtual_ipaddress {
192.168.134.160/24
}
}
?此時(shí)可以看到VIP在master上:
2.4在real-server上寫入測(cè)試頁(yè)面
[root@server03 ~]# echo "lvs-RS1" > /usr/share/nginx/html/index.html
[root@server03 ~]# systemctl start nginx
[root@server04 ~]# echo "lvs-RS2" > /usr/share/nginx/html/index.html
[root@server04 ~]# systemctl start nginx
2.5測(cè)試
- 當(dāng)我們關(guān)閉master上的keepalived可以發(fā)現(xiàn)VIP會(huì)轉(zhuǎn)移到slave上,這就實(shí)現(xiàn)了高可用(當(dāng)master掛掉后slave會(huì)頂替master繼續(xù)提供服務(wù))
##關(guān)閉master的nginx 和 keepalived
[root@master ~]# systemctl stop keepalived
- 查看slave,可以發(fā)現(xiàn)VIP在slave上。
- ?訪問(wèn)VIP(192.168.134.160)可以訪問(wèn)到。
?3.解決nginx故障
- 可以解決心跳故障keepalived但不能解決Nginx服務(wù)故障。這是我們要添加對(duì)nginx健康檢查。(兩臺(tái)都設(shè)置)
思路:
讓Keepalived以一定時(shí)間間隔執(zhí)行一個(gè)外部腳本,腳本的功能是當(dāng)Nginx失敗,則關(guān)閉本機(jī)的Keepalived
[root@proxy-master ~]# vim /etc/keepalived/check_nginx_status.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stop
systemctl stop keepalived
fi
- ?keepalived使用script
! Configuration File for keepalived
global_defs {
router_id directory1
}
vrrp_script check {
script "/etc/keepalived/check-nginx.sh"
interval 5 #每5秒檢測(cè)一次
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123
}
virtual_ipaddress {
192.168.134.160/24
}
track_script {
check
}
}
- ?測(cè)試
關(guān)閉master上的nginx服務(wù),過(guò)5秒后會(huì)檢測(cè)到nginx掛掉,隨后會(huì)關(guān)閉master上的keepalived;并且VIP會(huì)轉(zhuǎn)移到slave上面,讓slave繼續(xù)提供服務(wù)。
master:
?slave:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-741729.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741729.html
到了這里,關(guān)于Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!