keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性
一、keepalive簡(jiǎn)介
目前互聯(lián)網(wǎng)主流的實(shí)現(xiàn)WEB網(wǎng)站及數(shù)據(jù)庫服務(wù)高可用軟件包括:
keepalived
、heartbeat
等。Heartbeat
是比較早期的實(shí)現(xiàn)高可用軟件,而keepalived
是目前輕量級(jí)的管理方便、易用的高可用軟件解決方案,得到互聯(lián)網(wǎng)公司IT人的青睞。Keepalived是一個(gè)類似于工作在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:通過 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)高可用性的工具,能夠通過 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)重,誰的優(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)重,誰的優(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)可以無縫接管。
示例 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; } } }
訪問原ip
5. 啟動(dòng)Keepalived
cd /usr/local/keepalived/sbin/ # 啟動(dòng)命令 ./keepalived systemctl start keepalived.service systemctl status keepalived.service # 查看狀態(tài),可查看是否有問題
6. 測(cè)試高可用性
- 確保主節(jié)點(diǎ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)段的,可以訪問的,虛擬ip其實(shí)也是ip,只是沒有設(shè)備
訪問虛擬ip 192.168.121.120
7. 配置keepalived 雙主熱備集群架構(gòu)
Nginx+keepalived主備模式,始終存在一臺(tái)服務(wù)器處于空閑狀態(tài),如何更好的把兩臺(tái)服務(wù)器利用起來呢,可以借助Nginx+keepalived雙主架構(gòu)來實(shí)現(xiàn),如圖23-2所示,將架構(gòu)改成雙主架構(gòu),也即同時(shí)兩臺(tái)對(duì)外兩個(gè)VIP地址,同時(shí)接收用戶的請(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)重,誰的優(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)重,誰的優(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)重,誰的優(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)重,誰的優(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名稱,同時(shí)優(yōu)先級(jí)和VIP設(shè)置也各不相同;
- Nginx網(wǎng)站總訪問量為兩臺(tái)Nginx服務(wù)器之和,可以寫腳本自動(dòng)統(tǒng)計(jì)訪問量;
- 兩臺(tái)Nginx為Master,存在兩個(gè)VIP地址,用戶從外網(wǎng)訪問VIP,
需配置域名映射到兩個(gè)VIP上方
。 - 通過外網(wǎng)DNS映射不同VIP的方法也稱為DNS負(fù)載均衡模式;
三、虛擬ip
虛擬 IP 和真實(shí) IP 之間的區(qū)別主要在于它們的用途和管理方式:
真實(shí) IP
- 定義:真實(shí) IP 是指分配給設(shè)備的唯一的、可在互聯(lián)網(wǎng)或局域網(wǎng)中直接訪問的 IP 地址。
- 特性:
- 每個(gè)真實(shí) IP 地址在網(wǎng)絡(luò)中都是唯一的。
- 真實(shí) IP 可以直接與設(shè)備通信,比如訪問某臺(tái)服務(wù)器。
- 真實(shí) IP 地址通常由互聯(lián)網(wǎng)服務(wù)提供商(ISP)分配。
虛擬 IP
- 定義:虛擬 IP 是一個(gè)邏輯 IP 地址,它并不直接分配給某個(gè)特定的設(shè)備,而是可以在多個(gè)設(shè)備之間共享。
- 特性:
- 虛擬 IP 常用于高可用性和負(fù)載均衡,允許多個(gè)服務(wù)器通過一個(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ù)器或設(shè)備,如網(wǎng)頁服務(wù)器、數(shù)據(jù)庫服務(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 等)來管理和切換虛擬 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ò)問題。
到此這篇關(guān)于keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性的文章就介紹到這了,更多相關(guān)keepalived nginx網(wǎng)站高可用性內(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)重啟及雙主熱備高可用問題
- Keepalived如何實(shí)現(xiàn)Nginx高可用
- keepalived?+?nginx?實(shí)現(xiàn)高可用方案
- Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡的高可用(最新解決方案)
- Nginx高可用Keepalived的具體使用
相關(guān)文章
Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程
今天通過本文給大家分享Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程,在這小編提示大家在安裝nginx時(shí)需要先安裝nginx-full,具體安裝方法跟隨小編一起通過本文學(xué)習(xí)下吧2021-05-05Nginx結(jié)合keepalived實(shí)現(xiàn)集群
本文主要介紹了Nginx結(jié)合keepalived實(shí)現(xiàn)集群,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05詳解php+nginx 服務(wù)發(fā)生500 502錯(cuò)誤排查思路
這篇文章主要介紹了詳解php+nginx 服務(wù)發(fā)生500 502錯(cuò)誤排查思路,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Nginx 長(zhǎng)連接keep_alive的具體使用
本文主要介紹了Nginx 長(zhǎng)連接keep_alive的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問
這篇文章主要介紹了nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Windows系統(tǒng)下安裝及部署Nginx詳細(xì)教程(含多個(gè)站點(diǎn)部署)
Nginx是一個(gè)很強(qiáng)大的高性能Web和反向代理服務(wù),也是一種輕量級(jí)的Web服務(wù)器,可以作為獨(dú)立的服務(wù)器部署網(wǎng)站,應(yīng)用非常廣泛,這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下安裝及部署Nginx(含多個(gè)站點(diǎn)部署)的相關(guān)資料,需要的朋友可以參考下2024-01-01