keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性
一、keepalive簡(jiǎn)介
目前互聯(lián)網(wǎng)主流的實(shí)現(xiàn)WEB網(wǎng)站及數(shù)據(jù)庫(kù)服務(wù)高可用軟件包括:
keepalived、heartbeat等。Heartbeat是比較早期的實(shí)現(xiàn)高可用軟件,而keepalived是目前輕量級(jí)的管理方便、易用的高可用軟件解決方案,得到互聯(lián)網(wǎng)公司IT人的青睞。Keepalived是一個(gè)類(lèi)似于工作在layer 3, 4 & 7交換機(jī)制的軟件,Keepalived軟件有兩種功能,分別是健康檢查、VRRP冗余協(xié)議,keepalived是模塊化設(shè)計(jì),不同模塊負(fù)責(zé)不同的功能。
Keepalived的
作用是檢測(cè)服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器、Mysql服務(wù)器宕機(jī),或工作出現(xiàn)故障,Keepalived將檢測(cè)到后,會(huì)將有故障的web服務(wù)器或者M(jìn)ysql服務(wù)器從系統(tǒng)中剔除,當(dāng)服務(wù)器工作正常后Keepalived自動(dòng)將web、Mysql服務(wù)器加入到服務(wù)器群中。
keepalived + nginx 實(shí)現(xiàn)雙機(jī)主備高可用:

在使用 Nginx 實(shí)現(xiàn)雙機(jī)主備高可用(HA)架構(gòu)時(shí),結(jié)合 Keepalive,可以有效地提高系統(tǒng)的可靠性和可用性。以下是實(shí)現(xiàn)這一架構(gòu)的基本步驟和要點(diǎn):
架構(gòu)概述
主備節(jié)點(diǎn):有兩臺(tái) Nginx 服務(wù)器,一臺(tái)作為主節(jié)點(diǎn),另一臺(tái)作為備節(jié)點(diǎn)。當(dāng)主節(jié)點(diǎn)出現(xiàn)故障時(shí),流量會(huì)自動(dòng)切換到備節(jié)點(diǎn)。
Keepalived:通過(guò) Keepalived 機(jī)制維持主備節(jié)點(diǎn)之間的心跳檢測(cè),確保在主節(jié)點(diǎn)故障時(shí)能夠及時(shí)切換。
二、實(shí)現(xiàn)步驟
1. 環(huán)境準(zhǔn)備
確保兩臺(tái) Nginx 服務(wù)器已經(jīng)安裝并配置好,并且網(wǎng)絡(luò)可以互通。
2. 安裝 Keepalived
在兩臺(tái)服務(wù)器上安裝 Keepalived,Keepalived 是一種用于實(shí)現(xiàn)高可用性的工具,能夠通過(guò) VRRP 協(xié)議管理主備節(jié)點(diǎn)的 IP 地址。
1、下載鏈接: https://www.keepalived.org/download.html

2、上傳后,進(jìn)行解壓
tar -zxvf keepalived-2.0.20.tar.gz
3、先進(jìn)入Keepalived目錄,然后輸入配置命令進(jìn)行配置(--prefix:指明Keepalived的安裝位置,--sysconf:指明Keepalived配置文件存放位置,必須放在/etc下面,為了后續(xù)Keepalived啟動(dòng)關(guān)閉不報(bào)錯(cuò))
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc
如果出現(xiàn)了下面的錯(cuò)誤,運(yùn)行
yum -y install libnl libnl-devel yum -y install openssl-devel

4、編譯和安裝
make && make install
3. 配置 Keepalived 雙機(jī)主備集群架構(gòu)
在主節(jié)點(diǎn)和備節(jié)點(diǎn)上配置 Keepalived。
1、建立check_nginx腳本(/etc/keepalived/check_nginx.sh)如上配置還需要建立check_nginx腳本,用于檢查本地Nginx是否存活,如果不存活,則kill keepalived實(shí)現(xiàn)切換。其中check_nginx.sh腳本內(nèi)容如下
#!/bin/bash
killall -0 /usr/local/nginx/sbin/nginx
if [[ $? -ne 0 ]]; then
service keepalived stop
exit 1
else
exit 0
fi
添加可操作權(quán)限
chmod +x check_nginx.sh
2、主節(jié)點(diǎn)配置(/etc/keepalived/keepalived.conf):
global_defs {
#路由id:當(dāng)前安裝keepalived節(jié)點(diǎn)主機(jī)的標(biāo)識(shí)符,全局唯一
router_id keep_129
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx.sh"
#每隔2秒運(yùn)行上一行的腳本
interval 2
#權(quán)重
weight 2
}
vrrp_instance VI_1 {
# 表示的狀態(tài),當(dāng)前的129服務(wù)器為nginx的主節(jié)點(diǎn),MASTER/BACKUP
state MASTER
# 當(dāng)前實(shí)例綁定的網(wǎng)卡
interface ens33
# 保證主備節(jié)點(diǎn)一致
virtual_router_id 51
# 優(yōu)先級(jí)/權(quán)重,誰(shuí)的優(yōu)先級(jí)高,在MASTER掛掉以后,就能成為MASTER
priority 100
# 主備之間同步檢查的時(shí)間間隔,默認(rèn)1s
advert_int 1
# 認(rèn)證授權(quán)的密碼,防止非法節(jié)點(diǎn)的進(jìn)入
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
# 追蹤 nginx腳本
check_nginx_alive
}
virtual_ipaddress {
192.168.121.120
}
}
3、備節(jié)點(diǎn)配置(/etc/keepalived/keepalived.conf):
global_defs {
#路由id:當(dāng)前安裝keepalived節(jié)點(diǎn)主機(jī)的標(biāo)識(shí)符,全局唯一
router_id keep_128
}
vrrp_instance VI_1 {
# 表示的狀態(tài),當(dāng)前的128服務(wù)器為nginx的主節(jié)點(diǎn),MASTER/BACKUP
state BACKUP
# 當(dāng)前實(shí)例綁定的網(wǎng)卡
interface ens33
# 保證主備節(jié)點(diǎn)一致
virtual_router_id 51
# 優(yōu)先級(jí)/權(quán)重,誰(shuí)的優(yōu)先級(jí)高,在MASTER掛掉以后,就能成為MASTER
priority 80
# 主備之間同步檢查的時(shí)間間隔,默認(rèn)1s
advert_int 1
# 認(rèn)證授權(quán)的密碼,防止非法節(jié)點(diǎn)的進(jìn)入
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.121.120
}
}
4. 配置 Nginx
在兩臺(tái) Nginx 上配置相同的站點(diǎn),以確保在主節(jié)點(diǎn)故障時(shí)備節(jié)點(diǎn)可以無(wú)縫接管。
示例 Nginx 配置(/etc/nginx/nginx.conf):
http {
upstream backend {
server 127.0.0.1:8080; # 假設(shè)應(yīng)用運(yùn)行在本地的8080端口
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
}
訪問(wèn)原ip


5. 啟動(dòng)Keepalived
cd /usr/local/keepalived/sbin/ # 啟動(dòng)命令 ./keepalived systemctl start keepalived.service systemctl status keepalived.service # 查看狀態(tài),可查看是否有問(wèn)題
6. 測(cè)試高可用性
- 確保主節(jié)點(diǎn)正常工作,訪問(wèn)虛擬 IP 地址(192.168.121.120)。
- 停止主節(jié)點(diǎn)上的 Nginx, Keepalived會(huì)自動(dòng)停止,檢查流量是否自動(dòng)切換到備節(jié)點(diǎn)。
- 重新啟動(dòng)主節(jié)點(diǎn),確認(rèn)其恢復(fù)后是否接管虛擬 IP 地址。
- 虛擬ip要跟你是同一個(gè)網(wǎng)段的,可以訪問(wèn)的,虛擬ip其實(shí)也是ip,只是沒(méi)有設(shè)備
訪問(wèn)虛擬ip 192.168.121.120

7. 配置keepalived 雙主熱備集群架構(gòu)
Nginx+keepalived主備模式,始終存在一臺(tái)服務(wù)器處于空閑狀態(tài),如何更好的把兩臺(tái)服務(wù)器利用起來(lái)呢,可以借助Nginx+keepalived雙主架構(gòu)來(lái)實(shí)現(xiàn),如圖23-2所示,將架構(gòu)改成雙主架構(gòu),也即同時(shí)兩臺(tái)對(duì)外兩個(gè)VIP地址,同時(shí)接收用戶(hù)的請(qǐng)求。

1、192.168.2.128的keepalived.conf配置文件代碼:
global_defs {
#路由id:當(dāng)前安裝keepalived節(jié)點(diǎn)主機(jī)的標(biāo)識(shí)符,全局唯一
router_id keep_128
}
vrrp_instance VI_1 {
# 表示的狀態(tài),當(dāng)前的128服務(wù)器為nginx的主節(jié)點(diǎn),MASTER/BACKUP
state MASTER
# 當(dāng)前實(shí)例綁定的網(wǎng)卡
interface ens33
# 保證主備節(jié)點(diǎn)一致
virtual_router_id 51
# 優(yōu)先級(jí)/權(quán)重,誰(shuí)的優(yōu)先級(jí)高,在MASTER掛掉以后,就能成為MASTER
priority 100
# 主備之間同步檢查的時(shí)間間隔,默認(rèn)1s
advert_int 1
# 認(rèn)證授權(quán)的密碼,防止非法節(jié)點(diǎn)的進(jìn)入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.120
}
}
vrrp_instance VI_2 {
# 表示的狀態(tài),當(dāng)前的128服務(wù)器為nginx的主節(jié)點(diǎn),MASTER/BACKUP
state BACKUP
# 當(dāng)前實(shí)例綁定的網(wǎng)卡
interface ens33
# 保證主備節(jié)點(diǎn)一致
virtual_router_id 52
# 優(yōu)先級(jí)/權(quán)重,誰(shuí)的優(yōu)先級(jí)高,在MASTER掛掉以后,就能成為MASTER
priority 80
# 主備之間同步檢查的時(shí)間間隔,默認(rèn)1s
advert_int 1
# 認(rèn)證授權(quán)的密碼,防止非法節(jié)點(diǎn)的進(jìn)入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.121
}
}
2、192.168.2.129的keepalived.conf配置文件代碼:
! Configuration File for keepalived
global_defs {
#路由id:當(dāng)前安裝keepalived節(jié)點(diǎn)主機(jī)的標(biāo)識(shí)符,全局唯一
router_id keep_129
}
vrrp_instance VI_1 {
# 表示的狀態(tài),當(dāng)前的129服務(wù)器為nginx的主節(jié)點(diǎn),MASTER/BACKUP
state BACKUP
# 當(dāng)前實(shí)例綁定的網(wǎng)卡
interface ens33
# 保證主備節(jié)點(diǎn)一致
virtual_router_id 51
# 優(yōu)先級(jí)/權(quán)重,誰(shuí)的優(yōu)先級(jí)高,在MASTER掛掉以后,就能成為MASTER
priority 80
# 主備之間同步檢查的時(shí)間間隔,默認(rèn)1s
advert_int 1
# 認(rèn)證授權(quán)的密碼,防止非法節(jié)點(diǎn)的進(jìn)入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.120
}
}
vrrp_instance VI_2 {
# 表示的狀態(tài),當(dāng)前的129服務(wù)器為nginx的主節(jié)點(diǎn),MASTER/BACKUP
state MASTER
# 當(dāng)前實(shí)例綁定的網(wǎng)卡
interface ens33
# 保證主備節(jié)點(diǎn)一致
virtual_router_id 52
# 優(yōu)先級(jí)/權(quán)重,誰(shuí)的優(yōu)先級(jí)高,在MASTER掛掉以后,就能成為MASTER
priority 100
# 主備之間同步檢查的時(shí)間間隔,默認(rèn)1s
advert_int 1
# 認(rèn)證授權(quán)的密碼,防止非法節(jié)點(diǎn)的進(jìn)入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.121
}
}
注意點(diǎn):
- Keepalived主配置文件必須設(shè)置不同的VRRP名稱(chēng),同時(shí)優(yōu)先級(jí)和VIP設(shè)置也各不相同;
- Nginx網(wǎng)站總訪問(wèn)量為兩臺(tái)Nginx服務(wù)器之和,可以寫(xiě)腳本自動(dòng)統(tǒng)計(jì)訪問(wèn)量;
- 兩臺(tái)Nginx為Master,存在兩個(gè)VIP地址,用戶(hù)從外網(wǎng)訪問(wèn)VIP,
需配置域名映射到兩個(gè)VIP上方。 - 通過(guò)外網(wǎng)DNS映射不同VIP的方法也稱(chēng)為DNS負(fù)載均衡模式;
三、虛擬ip
虛擬 IP 和真實(shí) IP 之間的區(qū)別主要在于它們的用途和管理方式:
真實(shí) IP
- 定義:真實(shí) IP 是指分配給設(shè)備的唯一的、可在互聯(lián)網(wǎng)或局域網(wǎng)中直接訪問(wèn)的 IP 地址。
- 特性:
- 每個(gè)真實(shí) IP 地址在網(wǎng)絡(luò)中都是唯一的。
- 真實(shí) IP 可以直接與設(shè)備通信,比如訪問(wèn)某臺(tái)服務(wù)器。
- 真實(shí) IP 地址通常由互聯(lián)網(wǎng)服務(wù)提供商(ISP)分配。
虛擬 IP
- 定義:虛擬 IP 是一個(gè)邏輯 IP 地址,它并不直接分配給某個(gè)特定的設(shè)備,而是可以在多個(gè)設(shè)備之間共享。
- 特性:
- 虛擬 IP 常用于高可用性和負(fù)載均衡,允許多個(gè)服務(wù)器通過(guò)一個(gè)共同的 IP 地址對(duì)外提供服務(wù)。
- 虛擬 IP 可以在不同的物理服務(wù)器之間動(dòng)態(tài)切換,以實(shí)現(xiàn)故障轉(zhuǎn)移。
- 虛擬 IP 通常與網(wǎng)絡(luò)協(xié)議(如 VRRP、CARP)結(jié)合使用,管理虛擬 IP 的分配和切換。
應(yīng)用場(chǎng)景
- 真實(shí) IP:適用于需要被直接訪問(wèn)的服務(wù)器或設(shè)備,如網(wǎng)頁(yè)服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器等。
- 虛擬 IP:常用于負(fù)載均衡器、集群環(huán)境和高可用性設(shè)置,確保即使某臺(tái)服務(wù)器故障,服務(wù)仍然可用。
總結(jié)真實(shí) IP 是指設(shè)備的實(shí)際地址,而虛擬 IP 是用于在多個(gè)設(shè)備之間實(shí)現(xiàn)共享和故障轉(zhuǎn)移的邏輯地址。
虛擬 IP 地址并不是可以隨便設(shè)定的,設(shè)定虛擬 IP 時(shí)需要遵循一些原則和規(guī)定:
- IP 地址范圍
- 虛擬 IP 應(yīng)該在你的網(wǎng)絡(luò)地址范圍內(nèi),避免與已有的真實(shí) IP 地址沖突。
- 網(wǎng)絡(luò)配置
- 在設(shè)置虛擬 IP 時(shí),需要確保網(wǎng)絡(luò)設(shè)備(如路由器、交換機(jī)、負(fù)載均衡器)支持虛擬 IP 的配置。
- 使用協(xié)議
- 配置虛擬 IP 通常需要使用特定的網(wǎng)絡(luò)協(xié)議(如 VRRP、CARP 等)來(lái)管理和切換虛擬 IP 的所有權(quán)。
- 環(huán)境一致性
- 在多臺(tái)服務(wù)器上使用虛擬 IP 時(shí),確保它們?cè)谕粋€(gè)子網(wǎng)內(nèi),并且配置相同的網(wǎng)絡(luò)參數(shù),以確保正常通信。
- 避免沖突
- 虛擬 IP 必須確保在整個(gè)網(wǎng)絡(luò)中唯一,避免與其他設(shè)備或服務(wù)的 IP 地址發(fā)生沖突。
結(jié)論
雖然技術(shù)上可以在網(wǎng)絡(luò)中設(shè)置虛擬 IP,但實(shí)際操作時(shí)需要遵循上述原則,以確保網(wǎng)絡(luò)的正常運(yùn)行和穩(wěn)定性。如果不小心設(shè)置了不合適的虛擬 IP,可能會(huì)導(dǎo)致網(wǎng)絡(luò)問(wèn)題。
到此這篇關(guān)于keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性的文章就介紹到這了,更多相關(guān)keepalived nginx網(wǎng)站高可用性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- keepalived結(jié)合nginx實(shí)現(xiàn)nginx高可用的方法
- 詳解Keepalived+Nginx實(shí)現(xiàn)高可用(HA)
- nginx+keepalived 高可用主從配置詳解
- nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟
- Nginx實(shí)現(xiàn)高可用集群構(gòu)建(Keepalived+Haproxy+Nginx)
- 關(guān)于使用Keepalived實(shí)現(xiàn)Nginx的自動(dòng)重啟及雙主熱備高可用問(wèn)題
- Keepalived如何實(shí)現(xiàn)Nginx高可用
- keepalived?+?nginx?實(shí)現(xiàn)高可用方案
- Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡的高可用(最新解決方案)
- Nginx高可用Keepalived的具體使用
相關(guān)文章
使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼
這篇文章主要介紹了使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
nginx 部署 vue 項(xiàng)目找不到j(luò)s css文件的解決方法
這篇文章主要介紹了nginx 部署 vue 項(xiàng)目找不到j(luò)s css文件的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Nginx報(bào)錯(cuò)"Too many open files"問(wèn)題的深度解析
在高并發(fā)場(chǎng)景下,Nginx作為Web服務(wù)器或反向代理時(shí),常常會(huì)遇到“Too many open files”錯(cuò)誤,本文將從問(wèn)題原理,解決方案,配置優(yōu)化及驗(yàn)證方法等方面,詳細(xì)解析如何解決這一問(wèn)題,希望對(duì)大家有所幫助2025-06-06
nginx配置同一域名同一端口下部署多個(gè)vue項(xiàng)目的實(shí)現(xiàn)
本地開(kāi)發(fā)好了多個(gè)前端微信網(wǎng)頁(yè)項(xiàng)目,想部署上線,本文就來(lái)介紹一下nginx配置同一域名同一端口下部署多個(gè)vue項(xiàng)目的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
在Ubuntu系統(tǒng)上安裝Nginx服務(wù)器的簡(jiǎn)單方法
這篇文章主要介紹了在Ubuntu系統(tǒng)上安裝Nginx服務(wù)器的簡(jiǎn)單方法,包括打開(kāi)和關(guān)閉Nginx的指令,需要的朋友可以參考下2015-08-08

