CentOS 7 Keepalive 腳本不執行解決


問題

起因是在測試部署 Altls + Keepalive 高可用讀寫分離,測試停止Atlas服務的時候,發現Keepalive不會自動主從切換,就是Keepalive還是正常運行,vip並沒有被slave接管。

也就是文章: centos 7 Atlas keepalived 實現高可用 MySQL 5.7 MHA環境讀寫分離

后來通過查詢,發現解決,這里總結一下(文章中的問題已經被解決)。

一共發現兩種問題

  • 括號問題
  • 腳本名稱有問題

問題一 括號問題

第一個問題就是keepalive中配置的腳本不自動執行

首先需要檢查腳本是否有問題,也就是需要手動執行腳本是否正常

首先需要檢查腳本是否有問題,也就是需要手動執行腳本是否正常

以上述文章中的案例

! Configuration File for keepalived

global_defs {
   router_id mysql_proxy_196
}

vrrp_script chk_atlas_proxy    # 這里的大括號'{' 不能放在這里行,要換行頂頭,前面不能有空格
{
    script "/etc/keepalived/che_atlas.sh"
    interval 2
    weight -2
}   # 這里的大括號前面也不能有空格

vrrp_instance VI_1 {
    state BACKUP
    interface bond0
    virtual_router_id 151
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.20.198/24 dev bond0 label bond0:1
    }
    track_script {
        chk_atlas_proxy
    }
}

做到上述,基本上就可以了


問題二 腳本名稱問題

以 Nginx + keepalive 高可用為案例

腳本名稱為: check_nginx.sh

腳本內容

if [ `ps aux | grep nginx | grep -v grep | wc -l` -ne 3 ];then
systemctl stop keepalived
fi

如果在Keepalive配置文件中配置是下面的配置,會發現keepalive啟動不了,查看message日志,啟動后,就會立馬被停止。

這里的問題經常性的被忽略,根據腳本的判斷,nginx主進程加上ngxin的線程不等於3的時候,就會停止keepalive

手動執行ps 命令的時候,沒問題,也是3個

有一個問題大家想過沒有,當keepalive啟動后,會執行check_nginx.sh腳本,而ps命令中的grep命令篩選條件是nginx,而腳本名稱中包含nginx,當keepalive執行check_nginx.sh腳本的時候,也會產生一個進程,其中就包含nginx的字符,同樣會被腳本中的grep命令當做條件篩選出來,那么if判斷就會生效,執行if內部的命令

這么說應該明白了吧。。。。不明白博客下面有我扣扣。。。。

所以要解決這個問題,要么更換if條件,要么更換腳本名稱,建議更換腳本名稱為check_ngx.sh,這樣問題就迎刃而解了。


免責聲明!

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



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