web-dev-qa-db-ja.com

エラー2006(HY000):MySQLサーバーが廃止されました...(HaProxy / Galera)

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
5
Hatem Jaber

コマンドラインでmysqlを実行するなど、アイドル状態の長時間実行セッションでは、timeout clientおよびtimeout serverが短すぎます。

接続が必要な間だけ接続が開かれ、ページが読み込まれるたびに新しい接続が作成されるため、DBにアクセスするWebサーバーにとってはおそらく問題ありません。

接続を10分間開いたままにするには、次のように変更します。

timeout server 5000
timeout client 5000

timeout server 10m
timeout client 10m

必要に応じてさらに高くすることができます。タイムアウトが7時間のRDSクラスターがあり、問題なく動作します。

ドキュメントには、 timeout clienttimeout server 、および time specifier に使用される省略形に関する詳細があります。

8
GregL