MySQL レプリケーション用の Percona xtraDB Cluster と負荷分散用の HAproxy を使用して HA クラスターをセットアップしようとしています。
HAproxy は Apache と非常にうまく連携します。Apache がクラッシュしたり、応答しなくなったりすると、HAproxy は別のノードに切り替わります。
私の問題は MySQL から始まります。同じ HAproxy に MySQL もセットアップしましたが、MySQL が応答しない場合、HAproxy は別のノードに切り替えません。ただし、HAproxy は、HAproxy 統計を確認すると MySQL サーバーがダウンしているため、MySQL が応答しないことを認識します。
私の質問は、HAproxy に 2 つのリソースを設定することは可能でしょうか? 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-checkなので、次のように読むべきです
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 データベースには、HAProxy からの接続を許可するユーザー a_test_user が必要です。