keepalived安裝及組合nginx配置負載實現高可用


1. Keepalived安裝配置

1.1 官網下載tar包

https://www.keepalived.org/

1.2 上傳到指定目錄安裝

./configure --prefix=/usr/local/keepalived --sysconf=/etc

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

如果出現上述提示,則執行下面命令安裝libnl:
yum install -y libnl

make && make install

1.3 配置文件

cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf

配置文件內容如下:

! Configuration File for keepalived
#全局配置
global_defs {
   # 負載均衡標識,在局域網內應該是唯一的。一般為主機名。
   router_id 主機名稱
}

vrrp_script chk_http_port {
    # 檢測心跳執行的腳本
    script "/usr/local/src/nginx_check.sh"
    # 檢測腳本執行間隔,單位:秒
    interval 4
    weight 2
}

#定義實例
vrrp_instance VI_1 {
    # 指定keepalived的角色,MASTER為主,BACKUP為備
    state MASTER
    # 當前進行vrrp通訊的網絡接口卡(當前centos的網卡)
    interface ens33
    # 指定VRRP實例ID(虛擬路由編號),范圍是0-255,主從要一致
    virtual_router_id 202
    # 優先級,數值越大,獲取處理請求的優先級越高, 優先級高的將成為MASTER。
    priority 100
    # 指定發送VRRP通告的間隔,默認為1s(vrrp組播周期秒數)
    advert_int 1
    # 設置驗證類型和密碼,MASTER和BACKUP必須使用相同的密碼才能正常通信
    authentication {
        # 指定認證方式。PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)。
        auth_type PASS
        # 指定認證所使用的密碼。最多8位。
        auth_pass 2020
    }
    # 調用檢測腳本
    track_script {
        chk_http_port
    }
    # 定義虛擬ip(VIP),可多設,每行一個
    virtual_ipaddress {
        192.168.199.143
    }
}

1.4 配置nginx檢測腳本文件

cd /usr/local/src
vim nginx_check.sh

腳本內容:

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx-1.18.0/sbin/nginx
    sleep 4
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

1.5 keepalived 啟動/重啟/停止/查看狀態

systemctl start/restart/stop/status keepalived

注:啟動keepalived會執行nginx檢測腳本,此時如果nginx未啟動則會同時啟動nginx。

1.6 查看日志

tail -f /var/log/messages

1.7 瀏覽器訪問虛擬IP地址

192.168.199.143

2. nginx負載均衡配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream minio-server {
        # weight:默認為1。weight越大,負載的權重就越大。
        # backup:其它所有的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。
        # max_fails:允許請求失敗的次數默認為1,當超過最大次數時,返回 proxy_next_upstream 模塊定義的錯誤。
        # fail_timeout:Nginx基於連接探測,如果發現后端異常,在單位周期為fail_timeout設置的時間中達到max_fails次數,這個周期次數內,如果后端同一個節點不可用,那么把節點標記為不可用,並等待下一個周期(同樣時常為fail_timeout)再一次去請求,判斷是否連接是否成功。
        server 192.168.199.140:9000 weight=2 max_fails=3 fail_timeout=10s;
        server 192.168.199.141:9000 max_fails=3 fail_timeout=30s;
    }
    server {
        listen       80;
        server_name  192.168.199.143;

        charset utf-8;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $remote_addr;
            # 傳輸文件緩存大小及單次請求大小
            client_body_buffer_size 10M;
            client_max_body_size 1G;
            # 宕機檢測,如果設置時間內無響應,則直接切換到其它服務
            proxy_connect_timeout 4;
            proxy_send_timeout 4;
            proxy_read_timeout 4;

            proxy_pass http://minio-server;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

此配置下 nginx + keepalived 在多台服務器上搭建,可以實現高可用負載均衡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM