3つのMariaDBサーバーのクラスターを、正常に動作しているマルチマスターセットアップでセットアップしました。 HaProxyが負荷分散とラウンドロビンを実行するための4番目のサーバーを追加しました。これにより、1つの問題を除いて、機能する冗長性を少し持たせることができます。
次のクエリを実行しているHaProxyサーバーのMySQLクライアントにログインしています。
show variables like 'server_id';
結果を取得していますが、5秒以上待ってクエリを再度実行すると、次のエラーが発生します。
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 52
Current database: *** NONE ***
その直後に、負荷分散が機能していることを示す別のserver_idで結果を取得します。これが原因となっている問題は、Spring/Javaアプリから接続しようとすると、その短い時間クエリを実行でき、接続が切断されることです。 HaProxyサーバーでそれを解決できれば、他の問題も解決できると思います。
編集:追加されたHAPROXY.CFG
global
log 127.0.0.1 local0 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
maxconn 4096
daemon
defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000
listen mysql-cluster
bind 0.0.0.0:3306
mode tcp
option tcpka
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 192.168.10.241:3306 check inter 1000 rise 3 fall 1
server mysql-2 192.168.10.242:3306 check inter 1000 rise 3 fall 1
server mysql-3 192.168.10.243:3306 check inter 1000 rise 3 fall 1
listen stats
bind 192.168.10.211:8080
mode http
stats enable
stats uri /
stats realm Strictly\ Private
stats auth USER:PASSWORD
コマンドラインでmysql
を実行するなど、アイドル状態の長時間実行セッションでは、timeout client
およびtimeout server
が短すぎます。
接続が必要な間だけ接続が開かれ、ページが読み込まれるたびに新しい接続が作成されるため、DBにアクセスするWebサーバーにとってはおそらく問題ありません。
接続を10分間開いたままにするには、次のように変更します。
timeout server 5000
timeout client 5000
に
timeout server 10m
timeout client 10m
必要に応じてさらに高くすることができます。タイムアウトが7時間のRDSクラスターがあり、問題なく動作します。
ドキュメントには、 timeout client 、 timeout server 、および time specifier に使用される省略形に関する詳細があります。