佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法

Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法

熱門標(biāo)簽:智能手機(jī) 使用U盤裝系統(tǒng) 網(wǎng)站建設(shè) 硅谷的囚徒呼叫中心 檢查注冊(cè)表項(xiàng) 美圖手機(jī) 阿里云 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式

前言

首先介紹一下Keepalived,它是一個(gè)高性能的服務(wù)器高可用或熱備解決方案,起初是專為L(zhǎng)VS負(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)行狀況檢測(cè)呼應(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)行狀況檢測(cè)呼應(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下了。

測(cè)試驗(yàn)證VIP

當(dāng)keepalived和nginx都啟動(dòng)后,我們來測(cè)試一下。

首先在瀏覽器里面訪問三個(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

java線上故障分析+性能調(diào)優(yōu)

到此這篇關(guān)于Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法的文章就介紹到這了,更多相關(guān)Nginx Keepalived 雙機(jī)主備內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:湖北 賀州 山南 湘潭 黃山 懷化 通遼 煙臺(tái)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    漠河县| 靖西县| 二连浩特市| 晋中市| 浙江省| 牙克石市| 康平县| 灵石县| 海林市| 塘沽区| 冷水江市| 绍兴市| 大理市| 颍上县| 巫山县| 榆中县| 涡阳县| 衡阳县| 西吉县| 西青区| 通化市| 鹿邑县| 钟山县| 平原县| 繁昌县| 盱眙县| 闻喜县| 城步| 称多县| 英德市| 邛崃市| 承德市| 叶城县| 大邑县| 德惠市| 老河口市| 肃北| 宁城县| 浦城县| 东乡县| 孟津县|