7. Nginx實現高可用配置

UnityAlvin發表於2020-11-30

簡介

假設主伺服器掛掉之後,會自動切換到備份伺服器,而備份伺服器也可以將請求轉發到不同的tomcat中去,這就是高可用的效果。

image-20201125111758893

主備伺服器中需要用到一個軟體,名字叫做keepalived,它相當於是一個路由,它裡面會通過一個指令碼來檢測Nginx是否還活著,如果還活著,則進行訪問,否則將切換到另一臺備份伺服器,在這個過程中,它需要對外展示一個虛擬IP,這個IP實際上是不存在的,但是我們需要通過這個IP來進行訪問,首先主伺服器要繫結這個IP,假設主伺服器掛掉之後,keepalived會將虛擬IP繫結到備份伺服器,以此實現高可用的效果。

具體實現

  1. 準備工作

    (1) 需要兩臺伺服器

    (2) 在兩臺伺服器上安裝Nginx

    (3) 在兩臺伺服器上安裝Keepalived

     # 因為我的電腦裝了MySQL,所以需要下載MySQL依賴,這個看個人情況,可以直接嘗試安裝keepalived,安裝不成功,會有提示
     wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
     
     # 安裝依賴
     rpm -ivh mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
     
     # 安裝keepalived
     yum install keepalived -y
     
     # 驗證是否安裝成功
     rpm -q -a keepalived
    
  2. 進行主從配置

    修改兩臺伺服器上的/etc/keepalived/keepalived.conf配置檔案

    global_defs {
        notification_email {
            acassen@firewall.loc
            failover@firewall.loc
            sysadmin@firewall.loc
        }
        notification_email_from Alexandre.Cassen@firewall.loc
        smtp_server 192.168.2.190	# 備機更改為自己的IP
        smtp_connect_timeout 30
        router_id LVS_DEVEL
    }
    
    vrrp_script chk_http_port {
        script "/usr/local/src/nginx_check.sh"
        interval 2 #(檢測指令碼執行的間隔)
        weight 2
    }
    
    vrrp_instance VI_1 {
        state MASTER // 備份伺服器上MASTER改為BACKUP
        interface ens33 //網路卡
        virtual_router_id 51 # 主、備機的 virtual_router_id 必須相同
        priority 100 # 主、備機取不同的優先順序,主機值較大100,備份機值較小90
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.2.30 // VRRP H 虛擬地址
        }
    }
    
  3. /usr/local/src新增指令碼nginx_check.sh

    #!/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
    
  4. 啟動兩臺伺服器的Nginx和Keepalived

    # 啟動Nginx
    ./nginx
    
    # 啟動Keepalived
    systemctl start keepalived.service
    
  5. 測試

    (1)輸入虛擬IP訪問

    image-20201130055620116

    image-20201130052603851

    (2)停止主伺服器的Nginx和Keepalived,再次訪問虛擬IP

    # 停止Nginx
    ./nginx -s stop
    
    # 停止Keepalived
    systemctl stop keepalived.service
    

    image-20201130055632622

    image-20201130052603851

相關文章