1. 程式人生 > 其它 >Nginx+keepalived高可用

Nginx+keepalived高可用

機器

192.168.64.129 keepalived(主)  nginx  檢測Nginx指令碼
192.168.64.130 keepalived(從)  nginx  檢測Nginx指令碼
192.168.64.131 tomcat-8(8080)    tomcat-9(8090)
192.168.64.200 vip

安裝

yum -y install Nginx

yum -y install keepalived

下載Tomcat安裝包 jdk安裝包 搭建環境

配置keepalived

keepalived主

vrrp_script chk_http_port {
    script "/etc/keepalived/nginx_check1.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER #主
    interface ens33 #你對應的網絡卡名稱
    virtual_router_id 51 #主從必須一致
    priority 100 #優先順序
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.64.200 #vip


}


track_script {
        chk_http_port
    }

}

keepalived(從)

vrrp_script chk_http_port {
    script "/etc/keepalived/nginx_check1.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP #從
    interface ens33 #網絡卡名稱
    virtual_router_id 51 #主從必須一致
    priority 80 #優先順序
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.64.200 #vip


}


track_script {
        chk_http_port
    }

}

 

在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。

在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。

在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。

 

Nginx配置檔案

vim /etc/nginx/conf.d/tff.conf 

upstream webserver {
#負載均衡
           server 192.168.64.131:8080 weight=1; #權重輪詢
           server 192.168.64.131:8090 weight=2;
}
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        #反向代理
        proxy_pass http://webserver;
        
        index  index.html index.htm;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


}

Tomcat

確保兩個埠可以訪問

重啟服務

keepalived  Nginx Tomcat 確保都是正常執行的狀態

檢視網路

發現只有主keepalived  節點有vip地址   當我們停止主keepalived 節點 發現從 keepalived 節點有vip地址

這就是vip漂移

這就是vip漂移

測試一下是否可以訪問

當我們停掉主keepalived節點上Nginx服務會發生什麼呢?

肯定報錯啦 但是另一個Nginx服務是好的 但是沒有起作用 明顯不符合高可用

這個時候就可以讓keepalived去檢測Nginx服務狀態 預處理重啟Nginx程序 如果重啟失敗 就停掉Nginx程序服務異常的機器的keepalived服務

這個時候就可以讓keepalived去檢測Nginx服務狀態 預處理重啟Nginx程序 如果重啟失敗 就停掉Nginx程序服務異常的機器的keepalived服務

Nginx檢測指令碼

192.168.64.129 keepalived(主)  nginx  檢測Nginx指令碼
192.168.64.130 keepalived(從)  nginx  檢測Nginx指令碼
192.168.64.131 tomcat-8(8080)    tomcat-9(8090)
192.168.64.200 vip

vim /etc/keepalived/nginx_check1.sh 

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)

echo "$counter"

if [ "${counter}" = "0" ]; then

    /usr/sbin/service nginx start
    sleep 3

    counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"

    if [ "${counter}" = "0" ]; then
        echo "開始停止"
     /usr/sbin/service keepalived stop
    fi
fi

停掉Nginx服務 使用這個指令碼啟動Nginx服務 成功了就往下走 (我的Nginx是用yum安裝的)

停掉Nginx服務 使用這個指令碼啟動Nginx服務 成功了就往下走 (我的Nginx是用yum安裝的)

 

為了測試能看到明顯效果我們把主從keepalived機器配置檔案引數interval改成30秒檢測

重啟主從keepalived機器服務 停止主keepalived機器節點上的Nginx服務 等待30秒發現Nginx服務啟動成功了 

 

再一次測試 我們把主keepalived機器節點上的Nginx服務停掉後啟動httpd服務(埠號80) 把Nginx服務埠號80佔領了

這樣Nginx服務就不會起來了(確保Nginx服務啟動失敗)根據指令碼它會去停掉主keepalived機器服務 從keepalived機器服務(接管)也就成了主似的 vip就進行漂移了

 

當我們發現主keepalived服務停止了 我們去啟動 順帶也會發現Nginx服務異常 再去解決 等下一次檢測的時候vip就回到主keepalived機器上了

這樣才是我們想要的結果