搭建keepalived叢集+nginx高可用
阿新 • • 發佈:2020-09-16
搭建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狀態