Keepalived搭建nginx高可用的實(shí)現(xiàn)
一、環(huán)境準(zhǔn)備
兩臺(tái)裝有 nginx 的 CentOS 虛擬機(jī)。
[root@nginx1 ~]# echo "192.168.40.81 say Hello" > /usr/local/nginx/html/index.html [root@nginx2 ~]# echo "192.168.40.82 say Hello" > /usr/local/nginx/html/index.html
二、原理
Keepalived 為我們后端服務(wù)器組虛擬出一組 VIP,該 VIP 只能由優(yōu)先級(jí)最高的一臺(tái)服務(wù)器持有??蛻舳嗽L問(wèn),就只訪問(wèn) VIP。
當(dāng)主服務(wù)器掛掉之后,Keepalived 自動(dòng)幫我們把 VIP 漂移到 BACKUP 服務(wù)器。以此來(lái)保證服務(wù)的高可用。
Keepalived 通過(guò)檢測(cè)服務(wù)器上的 Keepalived 進(jìn)程的存活狀態(tài),來(lái)判斷服務(wù)器是否存活。
三、安裝
1)安裝 keepalived
# 在 nginx1 安裝 keepalived [root@nginx1 ~]# yum install -y keepalived # 在 nginx2 安裝 keepalived [root@nginx2 ~]# yum install -y keepalived
2)配置
使用 yum 安裝后配置文件在 /etc/keepalived/keepalived.conf
# 備份 nginx1 keepalived 配置文件 [root@nginx1 keepalived]# cp keepalived.conf keepalived.conf.bak # 備份 nginx2 keepalived 配置文件 [root@nginx2 keepalived]# cp keepalived.conf keepalived.conf.bak
- nginx1 上 keepalived.conf:
! Configuration File for keepalived global_defs { router_id lb1 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.40.80 } }
- global_defs:全局配置標(biāo)識(shí)。
- router_id:路由器標(biāo)識(shí),一般不用改,也可以寫成每個(gè)主機(jī)自己的主機(jī)名。
- vrrp_instance:一個(gè) vrrp_instance 就是定義一個(gè)虛擬路由器的,VI_1 是實(shí)例名稱。
- state:指定 keepalived 的角色,MASTER 表示此主機(jī)是主服務(wù)器,BACKUP 表示此主機(jī)是備服務(wù)器。
- interface:指定檢測(cè)網(wǎng)絡(luò)的網(wǎng)卡接口。就比如下圖的 ens33。
- virtual_router_id:虛擬路由標(biāo)識(shí),數(shù)字形式,同一個(gè) VRRP 實(shí)例使用唯一的標(biāo)識(shí),即在同一個(gè) vrrp_instance下,master 和 backup 必須一致。
- priority:節(jié)點(diǎn)優(yōu)先級(jí),數(shù)字越大表示節(jié)點(diǎn)的優(yōu)先級(jí)越高,在一個(gè) VRRP 實(shí)例下,MASTER 的優(yōu)先級(jí)必須要比 BACKUP 高,不然就會(huì)切換角色。
- advert_int:用于設(shè)定 MASTER 與 BACKUP 之間同步檢查的時(shí)間間隔,單位為秒。
- auth_type:預(yù)共享密鑰認(rèn)證,同一個(gè)虛擬路由器的 keepalived 節(jié)點(diǎn)必須一樣。
- auth_pass:設(shè)置密鑰。
- virtual_ipaddress:設(shè)置虛擬IP地址,可以設(shè)置多種形式:
- 10.0.0.100 不指定網(wǎng)卡,默認(rèn)為 eth0,注意:不指定/prefix,默認(rèn)為/32;
- 10.0.0.101/24 dev eth1 指定 VIP 的網(wǎng)卡;
- 10.0.0.102/24 dev eth2 label eth2:1 指定 VIP 的網(wǎng)卡 label。
- nginx2 上 keepalived.conf:
! Configuration File for keepalived global_defs { router_id lb2 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.40.80 } }
3)啟動(dòng)
# 啟動(dòng) MASTER 服務(wù)器 keepalived 并設(shè)置為開(kāi)機(jī)自啟動(dòng) [root@nginx1 keepalived]# systemctl enable keepalived --now [root@nginx1 keepalived]# systemctl status keepalived [root@nginx1 keepalived]# ip a
會(huì)發(fā)現(xiàn) MASTER 服務(wù)器多出了 192.168.40.80 這個(gè)IP。
# 啟動(dòng) BACKUP 服務(wù)器 keepalived 并設(shè)置為開(kāi)機(jī)自啟動(dòng) [root@nginx2 keepalived]# systemctl enable keepalived --now [root@nginx2 keepalived]# systemctl status keepalived [root@nginx2 keepalived]# ip a
備份服務(wù)器并不持有 VIP。
4)訪問(wèn)
此時(shí)訪問(wèn) VIP,請(qǐng)求都是被打到 MASTER 上的 nginx。
5)故障測(cè)試
# 停掉 MASTER [root@nginx1 ~]# init 0
此時(shí) VIP 飄移到 BACKUP。
6)重啟 MASTER
此時(shí) VIP 又漂移回來(lái)了。
四、定制腳本
Keepalived 通過(guò)檢測(cè)服務(wù)器上的 Keepalived 進(jìn)程的存活狀態(tài),來(lái)判斷服務(wù)器是否存活。
但如果此時(shí),我們的服務(wù)器沒(méi)有掛,但是我們希望 Keepalived ?;畹姆?wù)(比如 nginx)掛了,由于 Keepalived 進(jìn)程沒(méi)有掛,這個(gè)時(shí)候,Keepalived 是不會(huì)幫我們主備切換的。
# 停掉 MASTER [root@nginx1 ~]# systemctl stop nginx
這個(gè)時(shí)候 VIP 并沒(méi)有遷移走。這個(gè)時(shí)候,我們就得自己寫一個(gè)腳本,去檢測(cè) nginx 存活狀態(tài),如果 nginx 掛了,人為殺死 keepalived 進(jìn)程,讓 keepalived 幫我們主備切換。
先重新啟動(dòng) nginx
[root@nginx1 ~]# systemctl start nginx
1)修改 keepalived.conf
- nginx1 上 keepalived.onf:
! Configuration File for keepalived global_defs { router_id lb1 } vrrp_script check_nginx { script "pgrep nginx" interval 2 weight 50 # 當(dāng)檢查失敗時(shí),優(yōu)先級(jí)會(huì)減去這個(gè)值 fall 2 rise 2 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.40.80 } track_script { check_nginx } }
- nginx2 上 keepalived.conf:
! Configuration File for keepalived global_defs { router_id lb2 } vrrp_script check_nginx { script "pgrep nginx" interval 2 weight 50 # 當(dāng)檢查失敗時(shí),優(yōu)先級(jí)會(huì)減去這個(gè)值 fall 2 rise 2 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.40.80 } track_script { check_nginx } }
2)重啟 keepalived
[root@nginx1 keepalived]# sudo systemctl restart keepalived [root@nginx2 keepalived]# sudo systemctl restart keepalived
3)停掉 MASTER
# 停掉 MASTER [root@nginx1 ~]# systemctl stop nginx
VIP 這次終于被遷移到 BACKUP。
五、應(yīng)用場(chǎng)景
Keepalived + Nginx 的組合有很多應(yīng)用場(chǎng)景:
- 搭建 Nacos 高可用集群
- 搭建 K8S Ingress 入口
到此這篇關(guān)于Keepalived搭建nginx高可用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Keepalived搭建nginx高可用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- keepalived+nginx高可用實(shí)現(xiàn)方法示例
- Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼
- nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟
- Keepalived實(shí)現(xiàn)Nginx負(fù)載均衡高可用的示例代碼
- keepalived對(duì)nginx進(jìn)行高可用搭建及原理詳解
- Keepalived如何實(shí)現(xiàn)Nginx高可用
- keepalived?+?nginx?實(shí)現(xiàn)高可用方案
- 使用Nginx?+?Keepalived?實(shí)現(xiàn)高可用?Web?負(fù)載均衡筆記(虛擬機(jī))
- Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡的高可用(最新解決方案)
- Nginx高可用Keepalived的具體使用
- Nginx使用Keepalived部署web集群(高可用高性能負(fù)載均衡)實(shí)戰(zhàn)案例
相關(guān)文章
Nginx使用Gzip算法對(duì)報(bào)文進(jìn)行壓縮詳解
這篇文章主要給大家介紹了關(guān)于Nginx的Gzip功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Nginx靜態(tài)壓縮和代碼壓縮提高訪問(wèn)速度詳解
Nginx提供靜態(tài)壓縮功能,對(duì)于比較大的文件,可以自動(dòng)默認(rèn)查找.gz后綴的壓縮包,下面這篇文章主要給大家介紹了關(guān)于Nginx靜態(tài)壓縮和代碼壓縮提高訪問(wèn)速度的相關(guān)資料,需要的朋友可以參考下2022-05-05nginx如何設(shè)置服務(wù)器響應(yīng)時(shí)間長(zhǎng)短
本文主要介紹了nginx如何設(shè)置服務(wù)器響應(yīng)時(shí)間長(zhǎng)短,主要介紹了兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09生產(chǎn)環(huán)境之Nginx高可用方案實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了生產(chǎn)環(huán)境之Nginx高可用方案實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08阿里云ssl證書如何通過(guò)Nginx部署到服務(wù)器
這篇文章主要介紹了阿里云ssl證書通過(guò)Nginx部署到服務(wù)器的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03關(guān)于nginx proxy_set部分常見(jiàn)配置
這篇文章主要介紹了關(guān)于nginx proxy_set部分常見(jiàn)配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05