實驗采用兩臺centos9 nginx+keepalived 一共兩臺,進行主備切換
主服務器 192.168.100.105 備用 192.168.100.106?虛擬ip 192.168.100.200
安裝
dnf install vim wget curl vim net-tools nginx keepalived
Undefined
nginx 配置需要更改為虛擬ip
server {listen 80;listen [::]:80;server_name 192.168.100.200;
CSS
兩臺機器均已經配置好監聽同ip
keepalived
master配置
! Configuration File for keepalived # 這一行為注釋
global_defs { router_id nginx01 # router_id 機器標識,通常使用 hostname,相對具有唯一性,和備機區分開,不能使用同一個標識
}vrrp_instance VI_1 { # 定義一個vrrp_install實例,名稱為VI_1state MASTER # 表示該實例的角色狀態,有MASTER和BACKUP兩種主備狀態interface eth0 # 對外提供服務的網絡接口,注意修改為自己的網卡名稱,如 ens33,eth0,eth1virtual_router_id 51 # 虛擬路由ID標識,主備服務器配置中相同實例的ID必須一致priority 100 # priority表示實例優先級,數字越大,優先級越高。master 的優先級必須大于 backupadvert_int 1 # 設定 master 與 backup 負載均衡器之間同步檢查的時間間隔,默認是秒authentication { # 權限認證配置auth_type PASS # 主要有 PASS 和 AH 兩種auth_pass 1111 # 驗證密碼,同一個 vrrp_instance 下 MASTER 和 BACKUP 密碼必須相同}virtual_ipaddress {192.168.100.200 # 虛擬IP地址;可以配置多個IP,每個IP占一行。注意,這里的IP就是在工作中訪問 zabbix server 需要和域名綁定的ip}}
GraphQL
備用服務器配置
! Configuration File for keepalived # 這一行為注釋
global_defs { router_id nginx02 # router_id 機器標識,通常使用 hostname,相對具有唯一性,和主機區分開,不能使用同一個標識
}
vrrp_instance VI_1 { # 定義一個vrrp_install實例,名稱為VI_1state BACKUP # 表示該實例的角色狀態,有MASTER和BACKUP兩種主備狀態interface eth0 # 對外提供服務的網絡接口,注意修改為自己的網卡名稱,如 ens33,eth0,eth1virtual_router_id 51 # 虛擬路由ID標識,主備服務器配置中相同實例的ID必須一致priority 99 # priority表示實例優先級,數字越大,優先級越高。master 的優先級必須大于 backupadvert_int 1 # 設定 master 與 backup 負載均衡器之間同步檢查的時間間隔,默認是秒authentication { # 權限認證配置auth_type PASS # 主要有 PASS 和 AH 兩種auth_pass 1111 # 驗證密碼,同一個 vrrp_instance 下 MASTER 和 BACKUP 密碼必須相同}virtual_ipaddress {192.168.100.200 # 虛擬IP地址;可以配置多個IP,每個IP占一行。注意,這里的IP就是在工作中訪問 zabbix server 需要和域名綁定的ip}
}
GraphQL
直接訪問192.168.100.200
這里主服務掉線vip后會自動切換到備用服務器上去了
keep宕機后 會自動切換但是nginx宕機他不會切換 需要用到腳本讓他自己關閉
#! /bin/bash
# 當 nginx 服務 down 掉之后,通過 keepalived 檢查,確認沒有服務重新啟動 nginx
nginx_server=`ps -C nginx --no-header | wc -l`if [ $nginx_server -gt 0 ];thenexit 1
elsenginx
fi
Bash
keep 里面要加入
vrrp_script chk_nginx { # 定義一個檢測腳本,在global_defs之外配置script "/etc/keepalived/check_nginx.sh" # 自己寫的監測腳本interval 2 # 每2s監測一次weight 10 # 該參數用于指定當監測失效時,該設備的優先級會減少的值,該值為負表示減少fall 2 # 嘗試兩次都成功才成功rise 2 # 嘗試兩次都失敗才失敗
}