Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法
前言
首先介紹一下Keepalived,它是一個(gè)高性能的服務(wù)器高可用或熱備解決方案,起初是專為LVS負(fù)載均衡軟件設(shè)計(jì)的,Keepalived主要來防止服務(wù)器單點(diǎn)故障的發(fā)生問題,可以通過其與Nginx的配合實(shí)現(xiàn)web服務(wù)端的高可用。
Keepalived以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ),VRRP是Virtual Router Redundancy Protocol(虛擬路由冗余協(xié)議)的縮寫,VRRP協(xié)議將兩臺(tái)或多臺(tái)路由器設(shè)備虛擬成一個(gè)設(shè)備,對(duì)外提供虛擬路由器IP(一個(gè)或多個(gè))。
VRRP出現(xiàn)的目的就是為了解決靜態(tài)路由的單點(diǎn)故障問題的,它能保證當(dāng)個(gè)別節(jié)點(diǎn)宕機(jī)時(shí),整個(gè)網(wǎng)絡(luò)可以不間斷地運(yùn)行。
下面我們介紹一下nginx keepalived高可用方案的部署安裝。
環(huán)境準(zhǔn)備
在兩臺(tái)主機(jī)上準(zhǔn)備如下壓縮文件:
- keepalived-2.0.20.tar.gz
- nginx-1.16.1.tar.gz
虛擬IP
真實(shí)IP
nginx端口
主從
192.168.124.20
192.168.124.13
80
MASTER
192.168.124.20
192.168.124.14
80
BACKUP
安裝nginx
新建一個(gè)用戶:
useradd tianyan
確定安裝目錄,我這里的安裝目錄是:/home/tianyan/tianyan_soft/nginx.install。
在這個(gè)目錄下分別新建兩個(gè)目錄用于安裝nginx和keepalived,解壓兩個(gè)壓縮包。
執(zhí)行安裝命令:
./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \ --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \ --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \ --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \ --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \ --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \ --user=tianyan --group=tianyan \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-threads \ --with-pcre \ --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ \ --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \ --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ \ --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi \ --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi
如果報(bào)錯(cuò),記得安裝相關(guān)依賴:
yum install gcc gcc-c++
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。
注:以非root權(quán)限啟動(dòng)時(shí),會(huì)出現(xiàn) nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 錯(cuò)誤。
原因:Linux只有root用戶可以使用1024一下的端口
解決辦法:
1.按照root權(quán)限啟動(dòng)
2.將 /usr/local/nginx/conf/nginx.conf 文件中的80端口改為1024以上。
安裝keepalived
./configure --prefix=/usr/local/keepalived
上述命令執(zhí)行完畢后繼續(xù)執(zhí)行:
make && make install
安裝完畢后,目錄是這個(gè)樣子:
將配置文件拷貝到系統(tǒng)對(duì)應(yīng)的目錄下
mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
編輯 master 節(jié)點(diǎn)的 keepalived.conf
vim /etc/keepalived/keepalived.conf
內(nèi)容參考如下:
! Configuration File for keepalived global_defs { #一個(gè)沒重復(fù)的名字即可 router_id hyq_slave } #ng是否運(yùn)行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 必填,可以是MASTER或BACKUP interface ens33 virtual_router_id 101 priority 90 advert_int 1 # 如果兩節(jié)點(diǎn)的上聯(lián)交換機(jī)禁用了組播,則采用vrrp單播通告的方式 # 本機(jī)ip unicast_src_ip 192.168.124.14 unicast_peer { # 其他機(jī)器ip 192.168.124.13 } # 設(shè)置nopreempt防止搶占資源 nopreempt authentication { auth_type PASS auth_pass 1111 } # 與上方nginx運(yùn)行狀況檢測呼應(yīng) track_script { chk_nginx } virtual_ipaddress { 192.168.124.20 } }
編輯 slave 節(jié)點(diǎn)的 keepalived.conf
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { #一個(gè)沒重復(fù)的名字即可 router_id hyq_slave } #ng是否運(yùn)行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 必填,可以是MASTER或BACKUP interface ens33 virtual_router_id 101 priority 90 advert_int 1 # 如果兩節(jié)點(diǎn)的上聯(lián)交換機(jī)禁用了組播,則采用vrrp單播通告的方式 # 本機(jī)ip unicast_src_ip 192.168.124.14 unicast_peer { # 其他機(jī)器ip 192.168.124.13 } # 設(shè)置nopreempt防止搶占資源 nopreempt authentication { auth_type PASS auth_pass 1111 } # 與上方nginx運(yùn)行狀況檢測呼應(yīng) track_script { chk_nginx } virtual_ipaddress { 192.168.124.20 } }
編寫nginx_check.sh腳本
在/etc/keepalived目錄下新建nginx_check.sh腳本
touch nginx_check.sh
編輯其內(nèi)容為:
#!/bin/sh A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ] then /usr/sbin/nginx sleep 1 A2=`ps -C nginx --no-header |wc -l` if [ $A2 -eq 0 ] then systemctl stop keepalived fi fi
含義是:如果 nginx 停止運(yùn)行,嘗試啟動(dòng),但是如果無法啟動(dòng),則殺死本機(jī)的 keepalived 進(jìn)程, keepalied將會(huì)把虛擬 ip 綁定到 BACKUP 機(jī)器上。 注意: /usr/sbin/nginx是nginx的啟動(dòng)命令,如果你安裝到其他目錄,則相應(yīng)的替換。
Keepalived的日志
Keepalived日志默認(rèn)位置是在/var/log/messages目錄下。我們將其修改一下。
由于系統(tǒng)是centos7,修改位置為:/lib/systemd/system/keepalived.service
原內(nèi)容:
EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
修改為:
修改完畢后重新加載service
systemctl daemon-reload
創(chuàng)建命令軟連接:
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
執(zhí)行:
keepalived -D -f /etc/keepalived/keepalived.conf
-D 將日志輸出到message日志,默認(rèn)日志也在message
-f 是指定配置文件
修改/etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改為:KEEPALIVED_OPTIONS="-D -d -S 0"
在/etc/rsyslog.conf 末尾添加
local0.*/var/log/keepalived.log
最后執(zhí)行命令:
service rsyslog restart
重啟keepalived后就可以看到日志在/var/log/keepalived.log下了。
測試驗(yàn)證VIP
當(dāng)keepalived和nginx都啟動(dòng)后,我們來測試一下。
首先在瀏覽器里面訪問三個(gè)地址
- http://192.168.124.20(vip)
- http://192.168.124.13(master)
- http://192.168.124.14(slave)
我修改了一下nginx的index.html,可以看到當(dāng)前vip指向是13的master節(jié)點(diǎn):
然后,我們手動(dòng)停止13上的nginx,再次訪問http://192.168.124.20。
說明安裝成功。
其中通過ip address命令可以觀察到網(wǎng)卡的變化
實(shí)驗(yàn)到這里,我們就完成了keepalived + nginx 主從配置的安裝部署了。
思考:如何開啟雙主模式
什么是雙主模式?
分別介紹一下兩種配置
1、Nginx+keepalived 主從配置
這種方案就是上文介紹過的,使用一個(gè)vip地址,前端使用2臺(tái)機(jī)器,一臺(tái)做主,一臺(tái)做備,但同時(shí)只有一臺(tái)機(jī)器工作,另一臺(tái)備份機(jī)器在主機(jī)器不出現(xiàn)故障的時(shí)候,永遠(yuǎn)處于浪費(fèi)狀態(tài),僅僅用于災(zāi)備,平時(shí)都是空閑著的。
2、Nginx+keepalived 雙主配置
這種方案,使用兩個(gè)vip地址,前端使用2臺(tái)機(jī)器,互為主備,同時(shí)有兩臺(tái)機(jī)器工作,當(dāng)其中一臺(tái)機(jī)器出現(xiàn)故障,兩臺(tái)機(jī)器的請(qǐng)求轉(zhuǎn)移到一臺(tái)機(jī)器負(fù)擔(dān),如下圖:
【實(shí)戰(zhàn)】 elasticsearch 寫入速度提升的案例分享
用java做一個(gè)能賺錢的微信群聊機(jī)器人(PC協(xié)議)
Mysql百萬量級(jí)數(shù)據(jù)高效導(dǎo)入Redis
到此這篇關(guān)于Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法的文章就介紹到這了,更多相關(guān)Nginx Keepalived 雙機(jī)主備內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx流量拷貝ngx_http_mirror_module模塊使用方法詳解
這篇文章主要介紹了Nginx流量拷貝,Nginx專門提供了ngx_http_mirror_module模塊,用來實(shí)現(xiàn)流量拷貝。將生產(chǎn)環(huán)境的流量拷貝到預(yù)上線環(huán)境或測試環(huán)境2022-04-04nginx location中多個(gè)if里面proxy_pass的方法
這篇文章主要介紹了nginx location中多個(gè)if里面proxy_pass的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Nginx靜態(tài)文件響應(yīng)POST請(qǐng)求 提示405錯(cuò)誤的解決方法
Apache、IIS、nginx等絕大多數(shù)web服務(wù)器,都不允許靜態(tài)文件響應(yīng)POST請(qǐng)求,否則會(huì)返回“HTTP/1.1 405 Method not allowed”錯(cuò)誤2013-04-04nginx FastCGI錯(cuò)誤Primary script unknown解決辦法
這篇文章主要介紹了nginx錯(cuò)誤Primary script unknown解決辦法,需要的朋友可以參考下2014-03-03Nginx 502 Bad Gateway錯(cuò)誤的原因分析及解決方案
這篇文章主要介紹了Nginx 502 Bad Gateway錯(cuò)誤的原因分析及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05nginx:413 Request Entity Too Large的處理辦法--修改 PHP上傳文件大小
在用 phpMyAdmin 進(jìn)行 sql 數(shù)據(jù)庫導(dǎo)入的時(shí)候,經(jīng)常需要上傳比較大的 sql 數(shù)據(jù)文件,而這時(shí)會(huì)常碰見 nginx報(bào)錯(cuò):413 Request Entity Too Large。解決此問題,根據(jù)上傳數(shù)據(jù)文件的大小進(jìn)行修改處理2014-06-06