1. 程式人生 > 實用技巧 >搭建keepalived叢集+nginx高可用

搭建keepalived叢集+nginx高可用

搭建keepalived叢集使nginx高可用

虛擬機器環境:ubuntu 18.04

1. 每臺伺服器下載 nginx 和 keepalived

apt-get nginx
apt-get keepalived

2. 找到nginx配置檔案 /etc/nginx/nginx.conf ,並進行簡單配置

server{
  listen 80; #監聽埠
  server_name 192.168.201.127; # 伺服器地址或者域名
  location / {
    root /usr/share/nginx/html;  # root 是配置伺服器的預設閘道器根目錄位置
    index index.html;   # 配置首頁檔案的名稱
}
}

3. 配置keepalived, /etc/keepalived/keepalived.conf,若檔案不存在,就自己建立

! Configuration File for keepalived
  
global_defs {
   notification_email { # keepalived 伺服器宕機異常出現的時候,傳送通知郵件,可以是多個
    1329926762@@qq.com # 收件人郵箱1
    # ***@**.com # 收件人郵箱2
   }
   notification_email_from [email protected] #郵箱發件人
   smtp_server stmp.qq.com #郵箱伺服器地址
   smtp_connect_timeout 30 # 超時時間
   router_id LVS_DEVEL # 路由id
   vrrp_skip_check_adv_addr # 預設不跳過檢查
   # vrrp_strict # 這個東西要註釋掉
   vrrp_gna_interval 0 #單位秒,在一個網絡卡上每組na訊息之間的延遲時間,預設為0
   script_user root
   enable_script_security
}
vrrp_script chk_haproxy
{
    script "/etc/keepalived/chk_nginx.sh"
    interval 2
    weight 2
}
# vrrp例項,我們叢集設定,多機配置,除了state和priority不一樣,其他都一樣
# 主例項 state 為 MASTER;priority 較高
# 副本例項 state 為 BACKUP
vrrp_instance VI_1 {
    state MASTER # 伺服器狀態,MASTER是主伺服器,BACKUP是備份伺服器
    interface ens33 # 通訊埠,通過ip addr 命令可以看到,根據自己的機器配置
    virtual_router_id 51 #同一個區域網內,virtual_router_id 在叢集中不能相同
    priority 100 # 權重比,主伺服器的priority要比副本伺服器大
    advert_int 1 # 心跳間隔,單位秒,keepalived多機器叢集 通過心跳檢測,如果傳送心跳沒反應,就立刻接管
    authentication { # 伺服器之間的通訊密碼
        auth_type PASS
        auth_pass 111123
    }
    track_script { # 指令碼,與vrrp_script 定義的名稱一致
      chk_haproxy
    }
    virtual_ipaddress { #自定義虛擬ip,可以配置多個,每行一個
        192.168.201.23
    }
}

4. 在keepalived.conf相同目錄下配置 keepalived 指令碼檔案 chk_nginx.sh,檢測nginx是否正常,若nginx掛掉,則重啟nginx

#!/bin/bash
# nginx掛掉之後,keepalived重新啟動nginx,若不能啟動,則關閉當前keepalived
status=`ps -ef|grep -w  nginx|grep -v grep|wc -l`
echo ${status}
if [ ${status} -eq 0 ]; then
    systemctl start nginx.service
    sleep 2
    status2=`ps -ef|grep -w  nginx|grep -v grep|wc -l`
    echo ${status2}
    if [ ${status2} -eq 0  ]; then
            systemctl stop keepalived.service
    fi
fi

然後執行 chmod +x chk_nginx.sh,為指令碼檔案新增可執行許可權

5. 每臺伺服器啟動 nginx keepalived

systemctl start nginx # 啟動nginx
systemctl start keepalived  # 啟動keepalived

systemctl status nginx # 檢視nginx狀態
systemctl status keepalived  # 檢視keepalived狀態

6. 訪問虛擬ip,我這裡是 192.168.201.23,檢視是否成功