HAproxy mysql 故障轉移

HAproxy mysql 故障轉移

我嘗試使用 Percona xtraDB Cluster 設定一個 HA 叢集來進行 MySQL 複製,並使用 HAproxy 來進行負載平衡。

HAproxy 與 apache 配合得非常好,當 apache 崩潰或沒有回應時,HAproxy 會切換到另一個節點。

我的問題從 MySQL 開始,我也在同一個 HAproxy 中設定了 MySQL,但是當 MySQL 沒有回應時,HAproxy 不會切換到另一個節點。然而,當我檢查 HAproxy 統計資料時,HAproxy 發現 MySQL 沒有回應,原因是 MySQL 伺服器已關閉。

我的問題是,是否可以在 HAproxy 中設定兩個資源?他可以檢查 apache 是否已啟動並在未啟動時切換到另一個節點並檢查 MySQL 是否已啟動並在未啟動時切換到另一個節點嗎?

HAproxy.conf:

[...]
frontend redmine
    bind 192.168.7.149:80
    reqadd X-Forwarded-Proto:\ http
    default_backend redmine

frontend redmineS
    bind 192.168.7.149:443 ssl crt /etc/ssl/private/quipment.fr.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend redmine

backend redmine 192.168.7.149:80
    redirect scheme https if !{ ssl_fc }
    mode http
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie PHPSESSID prefix
    cookie SRVNAME insert
    server xtra1 192.168.7.151:80 cookie x1 check
    server xtra2 192.168.7.147:80 cookie x2 check
    server xtra3 192.168.7.152:80 cookie x3 check

listen mysql-cluster 192.168.7.149:3306
    mode tcp
    balance roundrobin
    option  httpchk
    server xtra1 192.168.7.151:3306 check port 9200 inter 1000 rise 3 fall 1
    server xtra2 192.168.7.147:3306 check port 9200 inter 1000 rise 3 fall 1
    server xtra3 192.168.7.152:3306 check port 9200 inter 1000 rise 3 fall 1
[...]

答案1

你的HAProxy沒有測試MySQL的健康狀況,因為在你的MySQL部分你告訴要做http測試(使用行option httpchk),你應該使用選項 mysql 檢查所以它應該讀作

listen mysql-cluster 192.168.7.149:3306
    mode tcp
    balance roundrobin
    option  mysql-check user a_test_user
    server xtra1 192.168.7.151:3306 check inter 1000 rise 3 fall 1
    server xtra2 192.168.7.147:3306 check inter 1000 rise 3 fall 1
    server xtra3 192.168.7.152:3306 check inter 1000 rise 3 fall 1

而您的 MySQL 資料庫中應該有使用者 a_test_user ,允許來自 HAProxy 的連線。

相關內容