keepalived雙機(jī)熱備nginx的配置方法
nginx目前是我最常用的反向代理服務(wù),線上環(huán)境為了能更好的應(yīng)對突發(fā)情況,一般會使用keepalived雙機(jī)熱備nginx或者使用docker跑nginx集群,keepalived是比較傳統(tǒng)的方式,雖然用docker跑nginx集群更方便,但傳統(tǒng)的方式總是有他的可取之處,并且多學(xué)一些東西也很好。以后也會寫如何使用docker跑nginx集群。
環(huán)境準(zhǔn)備:
2臺centos: 192.168.0.105 和192.168.0.118, 虛擬IP(VIP)為192.168.0.119
配置keepavlived
分別在105和118上安裝keepalived
yum install keepalived
準(zhǔn)備心跳角本
keepalived的配置相當(dāng)靈活,可以定時(shí)執(zhí)行角本命令,用于心跳檢查,比如,我們訪問nginx發(fā)現(xiàn)nginx不可訪問時(shí),就關(guān)閉keepalived,從而切換到從nginx來實(shí)現(xiàn)不間斷的服務(wù)支持。
vi /etc/keepalived/keepalived.conf
#!/bin/bash
count=0
for (( k=0; k<2; k++ ))
do
check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost:81 -o /dev/null )
if [ "$check_code" != "200" ]; then
count=count +1
continue
else
count = 0
break
fi
done
if [ "$count" != "0" ]; then
killall keepalived
exit 1
else
exit 0
fi
這段角本的意思就是說每次的心跳檢查會執(zhí)行一個(gè)for循環(huán),訪問http://localhost:81,在for的2次循環(huán)中如果返回的狀態(tài)都不是200就會關(guān)閉keepalived。這個(gè)角本在105和118兩臺機(jī)器上都要準(zhǔn)備好。
設(shè)置118機(jī)器上的keepalived為主節(jié)點(diǎn),105機(jī)器上的keepalived為從節(jié)點(diǎn),它們兩個(gè)的配置文件差不太多
vi /etc/keepalived/keepalived.conf
118機(jī)器keepalived的配置文件
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" # 心跳檢測角本
interval 2 #腳本執(zhí)行間隔,每2s檢測一次
weight -5 #腳本結(jié)果導(dǎo)致的優(yōu)先級變更,檢測失敗(腳本返回非0)則優(yōu)先級 -5
fall 3 #檢測連續(xù)2次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間)
rise 2 #檢測1次成功就算成功。但不修改優(yōu)先級
}
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示此主機(jī)是主服務(wù)器,BACKUP表示此主機(jī)是備用服務(wù)器
interface eth0 #指定監(jiān)測網(wǎng)絡(luò)的接口。實(shí)例綁定的網(wǎng)卡,因?yàn)樵谂渲锰摂MIP的時(shí)候必須是在已有的網(wǎng)卡上添加的
mcast_src_ip 192.168.0.118 ## 發(fā)送多播數(shù)據(jù)包時(shí)的源IP地址
virtual_router_id 51 #虛擬路由標(biāo)識,MASTER和BACKUP必須是一致的
priority 100 #定義優(yōu)先級,數(shù)字越大,優(yōu)先級越高
advert_int 2 #設(shè)定MASTER與BACKUP負(fù)載均衡器之間同步檢查的時(shí)間間隔,單位是秒
authentication { #設(shè)置驗(yàn)證類型和密碼。主從必須一樣
auth_type PASS #設(shè)置vrrp驗(yàn)證類型,主要有PASS和AH兩種
auth_pass 1111 #設(shè)置vrrp驗(yàn)證密碼,在同一個(gè)vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
}
virtual_ipaddress {
192.168.0.119 #VRRP 虛擬地址 如果有多個(gè)VIP,換行填寫
}
track_script {
chk_nginx # 心跳腳本,即在 vrrp_script 部分指定的名字
}
}
115機(jī)器上的角本對上面的角本稍做變動即可
改變 state MASTER -> state BACKUP,priority 100 -> priority 90,mcast_src_ip 192.168.0.118 -> mcast_src_ip 192.168.0.105。其他的地方保持不變,是不是很簡單。
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
state BACKUP # 修改
interface eth0
mcast_src_ip 192.168.0.105 # 修改 為本機(jī)IP
virtual_router_id 51
priority 90 #數(shù)字變小
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.119
}
track_script {
chk_nginx
}
}
到這里keepalived的簡單配置就完成了下面就啟動keepalived
service keepalived start
安裝Nginx
查看nginx的依賴庫是否完整
rpm -qa zlib rpm -qa zlib-devel rpm -qa openssl rpm -qa openssl-devel rpm -qa pcre rpm -qa pcre-devel rpm -qa gcc

如果沒有就安裝
yum -y install gcc zlib zlib-devel openssl openssl-devel pcre-devel
下載并解壓nginx
mkdir nginxsrc cd nginxsrc/

wget http://nginx.org/download/nginx-1.13.9.tar.gz tar zxvf nginx-1.13.9.tar.gz cd nginx-1.13.9/

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
安裝在/usr/local/nginx/sbin/nginx 目錄下
make&&make install

執(zhí)行成功后會顯示leaving directory

啟動
/usr/local/nginx/sbin/nginx

檢查
ps aux|grep nginx

開機(jī)啟動
vi /etc/rc.local
添加一行
/usr/local/nginx/sbin/nginx

因?yàn)槲业臋C(jī)器上80端口被別的應(yīng)用占用了,所以就修改105和118的 nginx.conf 把端口80 修改為81
vi /usr/local/nginx/conf/nginx.conf

分別個(gè)性105 和119上的index.html 加上一個(gè)ip以便們們識別打開的是哪個(gè)ip上的index.html
vi /usr/local/nginx/html/index.html

nginx重新加載配置
/usr/local/nginx/sbin/nginx -s reload
好了,我們訪問一下
curl 192.168.0.119:81
返回的html是 118機(jī)器上的index.html

現(xiàn)在我們把118的nginx停止
/usr/local/nginx/sbin/nginx -s stop
這時(shí)118上的keepalived的心跳檢查角本發(fā)現(xiàn)nginx無法訪問會把keepalived關(guān)閉,然后轉(zhuǎn)向從節(jié)點(diǎn)
我們再訪問一下119
curl 192.168.0.119:81

在118上重新啟動nginx和keepalived
再訪問119 返回的網(wǎng)址是118上的index.html
總結(jié)
以上所述是小編給大家介紹的keepalived雙機(jī)熱備nginx的配置方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Nginx+keepalived雙機(jī)熱備技術(shù)實(shí)踐
- 生產(chǎn)環(huán)境部署Nginx服務(wù)器雙機(jī)熱備部署keepalived的步驟(多種模式教程)
- Nginx結(jié)合keepalived實(shí)現(xiàn)雙機(jī)熱備方案
- Nginx雙機(jī)熱備的實(shí)現(xiàn)步驟
- Nginx+Keepalived實(shí)現(xiàn)雙機(jī)熱備
- Nginx+Tomcat負(fù)載均衡群集全過程
- Nginx部署負(fù)載均衡服務(wù)的步驟全解析
- nginx負(fù)載均衡配置方式
- nginx負(fù)載均衡及詳細(xì)配置方法
- nginx實(shí)現(xiàn)負(fù)載均衡與實(shí)例解讀
- Nginx實(shí)現(xiàn)負(fù)載均衡的配置步驟
- nginx tcp負(fù)載均衡的具體實(shí)現(xiàn)
- keepalived+nginx+httpd實(shí)現(xiàn)的雙機(jī)熱備+負(fù)載均衡
相關(guān)文章
nginx配置proxy_pass中url末尾帶/與不帶/的區(qū)別詳解
這篇文章主要介紹了nginx配置proxy_pass中url末尾帶/與不帶/的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
nginx正向代理http和https的實(shí)現(xiàn)步驟
本文主要介紹了nginx正向代理http和https的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Nginx反向代理proxy_cache_path directive is not allowed錯誤解決方法
這篇文章主要介紹了Nginx反向代理proxy_cache_path directive is not allowed錯誤解決方法,需要的朋友可以參考下2015-04-04
使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼
這篇文章主要介紹了使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
nginx服務(wù)器實(shí)現(xiàn)上傳下載文件的實(shí)例代碼
這篇文章主要介紹了nginx服務(wù)器實(shí)現(xiàn)上傳下載文件的實(shí)例代碼,本文通過代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
在Nginx服務(wù)器上配置Google反向代理的基本方法
這篇文章主要介紹了在Nginx服務(wù)器上配置Google反向代理的基本方法,文中使用到了SSL來加密反向代理,需要的朋友可以參考下2015-12-12
Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法
這篇文章主要介紹了Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法,這樣便可以更大限度地提高Nginx運(yùn)行效率,需要的朋友可以參考下2015-08-08
Nginx服務(wù)器添加Systemd自定義服務(wù)過程解析
這篇文章主要介紹了Nginx服務(wù)器添加Systemd自定義服務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

