Keepalived檢測mysql 3306心跳的指令碼

文采杰出發表於2024-03-11

要編寫一個用於 Keepalived 檢測 3306 埠(MySQL 預設埠)心跳的指令碼,你可以建立一個簡單的 Bash 指令碼,該指令碼嘗試連線到 MySQL 伺服器並檢查連線是否成功。如果連線成功,指令碼返回 0(表示正常),如果連線失敗,則返回非零值(表示異常)。

以下是一個示例指令碼,你可以將其儲存為 /path/to/check_mysql_health.sh,並根據需要修改 MYSQL_HOST 和 MYSQL_PORT 變數:

bash

!/bin/bash

MySQL 伺服器的地址和埠

MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USER="your_mysql_user"
MYSQL_PASSWORD="your_mysql_password"
MYSQL_CONNECTION_TIMEOUT="5"

嘗試連線到 MySQL 伺服器

mysqladmin -h\(MYSQL_HOST -P\)MYSQL_PORT -u\(MYSQL_USER -p\)MYSQL_PASSWORD ping --silent --defaults-extra-file=/dev/null --connect-timeout=$MYSQL_CONNECTION_TIMEOUT

檢查上一個命令的退出狀態

if [ $? -eq 0 ]; then
# 如果 mysqladmin 返回 0,表示連線成功
exit 0
else
# 如果 mysqladmin 返回非 0,表示連線失敗
exit 1
fi

確保該指令碼具有執行許可權:

bash
chmod +x /path/to/check_mysql_health.sh

然後,在 Keepalived 的配置檔案中,你需要指定這個指令碼作為健康檢查的一部分。以下是如何在 keepalived.conf 中設定它的示例:

conf
vrrp_script chk_mysql_health {
script "/path/to/check_mysql_health.sh" # 指向你的指令碼路徑
interval 2 # 檢查間隔
timeout 1 # 超時時間
weight 2 # 權重
}

vrrp_instance VI_1 {
# ... 其他配置 ...

track_script {
    chk_mysql_health  # 引用剛才定義的指令碼
}

# ... 其他配置 ...

}

在這個配置中,vrrp_script 塊定義了一個名為 chk_mysql_health 的指令碼,該指令碼會在每個 interval 時間間隔內執行一次。如果指令碼執行成功(返回 0),則 Keepalived 會認為 MySQL 服務是健康的。如果指令碼執行失敗(返回非 0),則 Keepalived 會認為服務不健康,並根據配置進行故障轉移。

請確保將 MYSQL_USER 和 MYSQL_PASSWORD 替換為你的 MySQL 使用者名稱和密碼,以便指令碼能夠成功連線到資料庫。如果你不希望在指令碼中硬編碼使用者名稱和密碼,你可以考慮使用其他機制(如環境變數或配置檔案)來安全地傳遞這些憑證。

最後,記得重啟 Keepalived 服務以應用配置更改:

bash
sudo systemctl restart keepalived

相關文章