使用Nginx?+?Keepalived?實現(xiàn)高可用?Web?負載均衡筆記(虛擬機)
環(huán)境介紹
物理操作系統(tǒng):Windows10
虛擬機軟件:VMWare Workstation 16 Pro
虛擬操作系統(tǒng)統(tǒng):CentOS7 Nginx:1.24.0Keepalived:2.2.8
資源規(guī)劃
在VMWare Worksattion中安裝了2臺CentOS7的虛擬機,橋接方式下IP地址分別為:192.168.0.35、192.168.0.36
| VIP | IP | 主機名 | Nginx端口 | 默認主從 |
|---|---|---|---|---|
| 192.168.0.100 | 192.168.0.35 | wongoing01 | 88 | MASTER |
| 192.168.0.100 | 192.168.0.36 | wongoing02 | 88 | BACKUP |
一、Nginx安裝
在2臺虛擬機中安裝Nginx,過程如下:
1.1、安裝編譯 Nginx 所需的依賴包
# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel ca-certificates
安裝過程中有提示的時直接輸入y繼續(xù)就可以了。
1.2、下載Nginx
# cd /usr/local/src/# wget http://nginx.org/download/nginx-1.24.0.tar.gz
1.3、編譯安裝 Nginx
# cd /usr/local/src/# tar -zxvf nginx-1.24.0.tar.gz# cd nginx-1.24.0# ./configure --prefix=/usr/local/nginx# make && make install
1.4 配置 Nginx
# vi /usr/local/nginx/conf/nginx.conf
1、把第一行的#user nobody;前面的的#去掉,把nobody改為root2、把偵聽的端口號由默認80改為88修改后內(nèi)容如下:
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 88;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
1.5 修改 Nginx 歡迎首頁內(nèi)容(用于后面測試, 用于區(qū)分兩個節(jié)點的 Nginx)
# vi /usr/local/nginx/html/index.html
修改的內(nèi)容為在標(biāo)題內(nèi)容中增加當(dāng)前節(jié)點的IP地址192.168.0.35這臺服務(wù)器的nginx歡迎頁內(nèi)容如下:
<h1>Welcome to nginx! 192.168.0.35</h1>
192.168.0.36這臺服務(wù)器的nginx歡迎頁內(nèi)容如下:
&lt;h1&gt;Welcome to nginx! 192.168.0.36&lt;/h1&gt;
1.6 系統(tǒng)防火墻打開對應(yīng)的端口 88
命令如下:
# firewall-cmd --zone&#61;public --add-port&#61;88/tcp --permanent#permanent永久生效,沒有此參數(shù)防火墻重啟便失效
相關(guān)命令1、查看防火墻狀態(tài)
systemctl status firewalld //或者 firewall-cmd --state
2、啟動防火墻
# systemctl start firewalld.service
3、重啟防火墻
firewall-cmd --reload 或者 service firewalld restart
4、防火墻開放3306端口
firewall-cmd --zone&#61;public --add-port&#61;3306/tcp --permanent //--permanent永久生效,沒有此參數(shù)防火墻重啟便失效
5、防火墻關(guān)閉3306端口
firewall-cmd --zone&#61;public --remove-port&#61;3306/tcp --permanent
6、禁用防火墻
systemctl stop firewalld
7、設(shè)置開機啟動防火墻
systemctl enable firewalld
8、停止并禁用開機啟動防火墻
systemctl disable firewalld
9、查看端口列表
firewall-cmd --permanent --list-port
1.7 測試 Nginx 是否安裝成功
# /usr/local/nginx/sbin/nginx -t
出現(xiàn)以下結(jié)果表示成功
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1.8 啟動 Nginx
# /usr/local/nginx/sbin/nginx
重啟 Nginx
# /usr/local/nginx/sbin/nginx -s reload
1.9 設(shè)置 Nginx 開機啟動
1、在系統(tǒng)服務(wù)目錄下創(chuàng)建nginx.service文件
# vi /lib/systemd/system/nginx.service
內(nèi)容如下:
[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
參數(shù)解釋:Description:描述服務(wù)After:描述服務(wù)類別[Service]服務(wù)運行參數(shù)的設(shè)置Type=forking是后臺運行的形式ExecStart為服務(wù)的具體運行命令ExecReload為重啟命令ExecStop為停止命令PrivateTmp=True表示給服務(wù)分配獨立的臨時空間注意:[Service]的啟動、重啟、停止命令全部要求使用絕對路徑[Install]運行級別下服務(wù)安裝的相關(guān)設(shè)置,可設(shè)置為多用戶,即系統(tǒng)運行級別為32、設(shè)置開機自啟動
systemctl enable nginx.service
3、重新載入systemd,掃描新的或有變動的單元
systemctl daemon-reload
4、查看服務(wù)狀態(tài)
systemctl status nginx.service
如下圖:
1.10 分別訪問2個節(jié)點的Nginx
在瀏覽器上分別訪問2個節(jié)點的Nginx如下圖:

二、Keepalived安裝
2.1 下載Keepalived
Keepalived的官網(wǎng)地址為:https://www.keepalived.org/
可以看到最新的穩(wěn)定版本如下圖:

如下可以在服務(wù)器上直接下載最新版本
# cd /usr/local/src/# wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz
2.2 解壓與安裝Keepalived
tar -xzvf keepalived-2.2.8.tar.gzcd keepalived-2.2.8/./configure --prefix&#61;/usr/local/keepalived --sysconf&#61;/etcmake &amp;&amp; make install
安裝完成后有3部分內(nèi)容1、/usr/local/keepalived目錄內(nèi)容
2、/etc/keepalived目錄內(nèi)容
3、/etc/sysconfig目錄下有keepalived
2.3 修改keepalived配置
1、把2個節(jié)點服務(wù)器上的/etc/keepalived/keepalived.conf.sample復(fù)制(或者直接重命名)一份命名為keepalived.conf
cd /etc/keepalivedcp keepalived.conf.sample keepalived.conf
如下圖:

2、編輯/etc/keepalived/keepalived.conf(1)MASTER節(jié)點(192.168.0.35)的內(nèi)容如下(可以把原來的內(nèi)容全部刪除):
! Configuration File for keepalived
global_defs {
## keepalived 自帶的郵件提醒需要開啟 sendmail 服務(wù)。 建議用獨立的監(jiān)控或第三方 SMTP
router_id wongoing01 ## 標(biāo)識本節(jié)點的字條串,通常為 hostname
}
## keepalived 會定時執(zhí)行腳本并對腳本執(zhí)行的結(jié)果進行分析,動態(tài)調(diào)整 vrrp_instance 的優(yōu)先級。如果腳本執(zhí)行結(jié)果為 0,并且 weight 配置的值大于 0,則優(yōu)先級相應(yīng)的增加。如果腳本執(zhí)行結(jié)果非 0,并且 weight配置的值小于 0,則優(yōu)先級相應(yīng)的減少。其他情況,維持原本配置的優(yōu)先級,即配置文件中 priority 對應(yīng)的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 檢測 nginx 狀態(tài)的腳本路徑
interval 2 ## 檢測時間間隔
weight -20 ## 如果條件成立,權(quán)重-20
}
## 定義虛擬路由, VI_1 為虛擬路由的標(biāo)示符,自己定義名稱
vrrp_instance VI_1 {
state MASTER ## 主節(jié)點為 MASTER, 對應(yīng)的備份節(jié)點為 BACKUP
interface ens33 ## 綁定虛擬 IP 的網(wǎng)絡(luò)接口,與本機 IP 地址所在的網(wǎng)絡(luò)接口相同, 虛擬機里面一般是ens33,物理主機通常是eth0
virtual_router_id 51 ## 虛擬路由的 ID 號, 兩個節(jié)點設(shè)置必須一樣, 可選 IP 最后一段使用, 相同的 VRID 為一個組,他將決定多播的 MAC 地址
priority 100 ## 節(jié)點優(yōu)先級, 值范圍 0-254, MASTER 要比 BACKUP 高
nopreempt ## 優(yōu)先級高的設(shè)置 nopreempt 解決異常恢復(fù)后再次搶占的問題
advert_int 1 ## 組播信息發(fā)送間隔,兩個節(jié)點設(shè)置必須一樣, 默認 1s
## 設(shè)置驗證信息,兩個節(jié)點必須一致
authentication {
auth_type PASS
auth_pass 1111 ## 真實生產(chǎn),按需求對應(yīng)該過來
}
## 將 track_script 塊加入 instance 配置塊
track_script {
chk_nginx ## 執(zhí)行 Nginx 監(jiān)控的服務(wù)
}
## 虛擬 IP 池, 兩個節(jié)點設(shè)置必須一樣
virtual_ipaddress {
192.168.0.100 ## 虛擬 ip,可以定義多個
}
}
(2)BACKUP節(jié)點(192.168.0.36)的內(nèi)容如下(可以把原來的內(nèi)容全部刪除):
! Configuration File for keepalived
global_defs {
router_id wongoing02
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111!i!
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.0.100
}
}
2.4 編寫 Nginx 狀態(tài)檢測腳本
編寫 Nginx 狀態(tài)檢測腳本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)腳本要求:如果 nginx 停止運行,嘗試啟動,如果無法啟動則殺死本機的 keepalived 進程, keepalied將虛擬 ip 綁定到 BACKUP 機器上。
# vi /etc/keepalived/nginx_check.sh
內(nèi)容如下:
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
保存后,給腳本賦執(zhí)行權(quán)限:
# chmod &#43;x /etc/keepalived/nginx_check.sh
##2.5 啟動 Keepalived
# systemctl start keepalived.service
查看keepalived服務(wù)狀態(tài)
# systemctl status keepalived.service
如下圖:

2.6 設(shè)置Keepalived開啟自啟動
systemctl enable keepalived.service
2.7 Keepalived+Nginx 的高可用測試
同時啟動192.168.0.35和192.168.36上的Nginx和Keepalived,我們通過VIP(192.168.0.100)來訪問Nginx如下:

我們關(guān)閉192.168.0.35上的Keepalived和Nginx
systemctl stop keepalived.servicesystemctl stop nginx.service
此時,再通過VIP(192.168.0.100)來訪問Nginx,如下

我們再開啟192.168.0.35上的Keepalived和Nginx在192.168.0.100執(zhí)行如下命令:
systemctl start nginx.servicesystemctl start keepalived.service
或者只執(zhí)行
systemctl start keepalived.service
因為我們寫了腳本 nginx_check.sh,這個腳本會為我們自動自動Nginx。此時,我們再通過VIP(192.168.50.130)來訪問Nginx,如下

至此,Keepalived + Nginx 實現(xiàn)高可用 Web 負載均衡搭建完畢!
- keepalived+nginx高可用實現(xiàn)方法示例
- Keepalived+Nginx+Tomcat 實現(xiàn)高可用Web集群的示例代碼
- nginx結(jié)合keepalived實現(xiàn)高可用的完整步驟
- Keepalived實現(xiàn)Nginx負載均衡高可用的示例代碼
- keepalived對nginx進行高可用搭建及原理詳解
- Keepalived如何實現(xiàn)Nginx高可用
- keepalived?+?nginx?實現(xiàn)高可用方案
- Nginx+keepalived實現(xiàn)七層的負載均衡的高可用(最新解決方案)
- Nginx高可用Keepalived的具體使用
- Nginx使用Keepalived部署web集群(高可用高性能負載均衡)實戰(zhàn)案例
- Keepalived搭建nginx高可用的實現(xiàn)
相關(guān)文章
Nginx搭配cpolar實現(xiàn)遠程開發(fā)無縫協(xié)作全過程
Nginx是一款高性能的本地Web服務(wù)器,以其卓越的穩(wěn)定性和靈活的配置能力,成為開發(fā)者搭建本地服務(wù)的首選工具,本文將介紹如何利用 Ubuntu操作系統(tǒng)、Docker容器技術(shù)以及cpolar內(nèi)網(wǎng)穿透工具來實現(xiàn)公網(wǎng)遠程訪問本地Nginx服務(wù)器的具體操作流程,需要的朋友可以參考下2026-01-01
Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻
Nginx?Proxy?Manager是一款功能強大的開源軟件,配置Web應(yīng)用防火墻,可以防止常見的web攻擊,本文就來介紹一下Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻,感興趣的可以了解一下2025-02-02
nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片的代碼示例
這篇文章主要給大家介紹了nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片,文章通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以自己動手試一下2023-10-10
詳解Keepalived+Nginx實現(xiàn)高可用(HA)
這篇文章主要介紹了詳解Keepalived+Nginx實現(xiàn)高可用(HA),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06

