我嘗試使用 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 的連線。