nginx之路(六):nginx高可用的詳細配置步驟

前言

在這裏插入圖片描述

我們使用keepalived來管理兩臺設備的Nginx,並虛擬出一個IP,外界請求直接訪問虛擬IP而不是真正的Nginx,讓虛擬IP去訪問提供服務的Nginx然後再由Nginx去訪問tomcat。當我們其中一臺nginx掛掉之後另一臺nginx就會頂上來,這就是我們說的nginx的高可用

準備工作

提前準備好如下工作

1.需要兩臺服務器
2.在兩臺服務器安裝好nginx

安裝keepalived

在兩臺服務器上都安裝keepalived

安裝yum命令

yum install keepalived

keepalived常用命令

systemctl start keepalived.service

systemctl stop keepalived.service

systemctl restart keepalived.service

keepalived查看日誌

tail -f  /var/log/messages

安裝之後,在 etc 裏面生成目錄 keepalived,有文件 keepalived.conf,我們下面的就是配置這個文件

配置高可用

修改keepalived配置文件

首先我們配置keepalived

找到第一臺機器的/etc/keepalived目錄的keepalived.conf配置文件,打開;

在這裏插入圖片描述

我們主要是配置這兩個節點,下方其他的是配置的lvs,我們不需要修改

將這兩塊內容修改如下

global_defs {

   notification_email { # keepalived服務宕機異常出現的時候,發送通知郵件 可以是多個

     acassen@firewall.loc  #  收件人郵箱1

     failover@firewall.loc #  收件人郵箱2

     sysadmin@firewall.loc #  收件人郵箱3

   }

   notification_email_from Alexandre.Cassen@firewall.loc  #郵件發件人

   smtp_server 192.168.200.1  # 郵件服務器地址

   smtp_connect_timeout 30   # 超時時間

   router_id LVS_DEVEL   # 機器標識 局域網內唯一即可

   vrrp_skip_check_adv_addr # 默認是不跳過檢查。檢查收到的VRRP通告中的所有地址可能會比較耗時,設置此命令的意思是,如果通告與接收的上一個通告來自相同的master路由器,則不執行檢查(跳過檢查)。

   #vrrp_strict   # 嚴格遵守VRRP協議。下列情況將會阻止啓動Keepalived:1. 沒有VIP地址。2. 單播鄰居。3. 在VRRP版本2中有IPv6地址。

   vrrp_garp_interval 0  # 小數類型,單位秒,在一個網卡上每組gratuitous arp消息之間的延遲時間,默認爲0,一個發送的消息=n組 arp報文

   vrrp_gna_interval 0 # 小數類型,單位秒, 在一個網卡上每組na消息之間的延遲時間,默認爲0

}

 

# vrrp實例  我們集羣設置 多機配置,除了state和priority不一樣,其他都一樣

vrrp_instance VI_1 {

    state MASTER  # 服務器狀態 MASTER是主服務器  BACKUP是備份服務器 主服務器的priority要比備份服務器大

    interface ens33 # 通信端口 通過ip addr可以看到 根據自己的機器配置

    virtual_router_id 51  # vrrp實例id  keepalived集羣,實例id必須一致

    priority 100  # 權重比 主服務器的priority要比備份服務器大

    advert_int 1  # 心跳間隔  單位秒  keepalived多機器集羣 通過心跳檢測,如果發送心跳沒反應 就立刻接管;

    authentication { # 服務器之間通信密碼

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress { # 自定義虛擬IP 

        192.168.91.199

    }

}

把這個配置複製到從服務器上,state改爲BACKUP,從服務器的priority改小

到這裏我們高可用就初步完成了,可以開啓nginx和keepalived測試了

這裏注意別踩到小白坑(我踩到了/(ㄒoㄒ)/~~)↓

ps:自定義的虛擬ip得根據真實ip設置,否則會出現真實ip可以訪問到,虛擬ip訪問不到
例:比如我的真實ip是192.168.91.138,那我的虛擬ip可以設置爲192.168.91.139~255,前面三個數得一致,後面一個數可以是139到255

在這裏插入圖片描述

添加檢測腳本

上面的配置已經可以初步測試nginx的高可用,比如我們關掉主服務器的keepalived,從服務器的nginx就會替代主nginx。

但如果是我們的主nginx掛掉而主keepalived沒掛,我們從nginx就不能替代主nginx,實際情況中nginx比keepalived更容易掛掉,那這情況怎麼解決你呢?

我們可以在keepalived添加腳本,當檢測到我們的nginx掛掉之後而keepalived沒掛掉,我們可以讓腳本主動嘗試重啓nginx服務,如果實在重啓不了nginx,我們讓腳本主動關閉keepalived好讓從nginx替代上來

修改keepalived.conf

在這個位置添加配置

在這裏插入圖片描述

vrrp_script chk_http_port {

 script "/home/nginx_check.sh" #腳本地址

 interval 2 #檢測腳本執行的間隔

 weight 2 #比重

}

然後相對應的地址創建nginx_check.sh

touch /home/nginx_check.sh

腳本內容

#!/bin/bash

echo 'xxxxxx'

count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`

echo $count_nginx

if [ $count_nginx -eq 0 ];then

    systemctl start nginx.service

    sleep 2

    if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then

        systemctl stop keepalived.service

    fi  

fi

啓動nginx和keepalived

systemctl start nginx.service 
systemctl start keepalived.service

測試

修改兩臺服務nginx的index頁面用來區分是哪臺服務器的nginx

vim /usr/share/nginx/html/index.html

輸入虛擬ip訪問

在這裏插入圖片描述

關閉主服務器的keepalived從服務的nginx會自動頂替上來

在這裏插入圖片描述

也可以關閉只nginx測試我們配置的腳本

如果出現無法關閉keepalived問題,嘗試下面的步驟

systemctl start keepalived.service

systemctl stop keepalived.service

systemctl restart keepalived.service

關閉keepalived

systemctl stop keepalived.service

查看keepalived進程是否真的關閉

ps -ef|grep keep

在這裏插入圖片描述
圖中情況說明沒有關閉,說明關閉命令無法關閉keepalived

這種情況是因爲systemd啓動服務腳本的問題

修改systemd啓動服務腳本

vim /usr/lib/systemd/system/keepalived.service

註釋掉一行KillMode=process

KillMode=process的大致意思是當停止keepalived的時候只會停掉主進程,而主進程產生的子進程是不會被幹掉的。而killmode的默認值是control-group,意思時所有進程都會被幹掉,我這裏選擇把這項註釋掉。

在這裏插入圖片描述

重載配置

systemctl daemon-reload

再試試關閉keepalived,還不行重啓服務器試試!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章