web-dev-qa-db-ja.com

HAProxyを介してmysqlに接続するときのエラー2013

2つのmysqlノードのロードバランサーとしてHAProxyを使用しようとしています。 HAProxyが3307でリッスンしていて、3306のDBにリクエストをルーティングしています。クライアントがプロキシに接続しようとすると(mysql -u ... -h .. -P3307 -p ...)、次のエラーが発生します。 :

エラー2013(HY000):「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システム>エラー:0

クライアントがDBに直接接続しようとすると、正常に機能します。トラフィックがプロキシを経由するときになぜ失敗するのか、私にはわかりません。

これが私がすでにチェックしたものです:

  1. /etc/hosts.allowには「mysqld:ALL:allow」が含まれます

  2. MySQL設定ファイル(my.cnf)にはバインドアドレス行がありません(すべての人に公開されています)。

私はHAProxy1.5dev、Mysql 5.1.xを使用しており、エンチラーダ全体がAmazonlinuxのec2で実行されています。

HAProxy構成ファイルは次のとおりです。

    global
     log 127.0.0.1   local0
     log 127.0.0.1   local1 notice
     #log loghost    local0 info
     user haproxy
     group haproxy
     maxconn 4096
     daemon
     #debug
     #quiet

    defaults
     log     global
     mode    tcp
     option  tcplog
     option  dontlognull
     retries 3
     option redispatch
     maxconn 4096
     contimeout      5000
     clitimeout      50000
     srvtimeout      50000

    frontend mysql_cluster
     bind 10.0.0.150:3307
     default_backend mysql_cluster

    backend mysql_cluster
     mode tcp
     balance roundrobin
     option tcpka
     option httpchk
     server lb1 10.0.0.140:3306 check port 9200 inter 5s rise 2 fall 2
     server lb2 10.0.0.214:3306 check port 9200 inter 5s rise 2 fall 2 

    listen stats 10.0.0.150:8081
     mode http
     option httpclose
     balance roundrobin
     stats uri /
     stats realm Haproxy\ Statistics
     stats auth ***:***

誰かが以前にこの問題に取り組んだことがありますか?これを解決する方法はありますか?

どんな助けでも大歓迎

5
A.RG

OK、解決しました。 xinetdスクリプトに問題がありました。

9200のバインドに失敗しました-/ etc/servicesファイルで修正しました。

2
A.RG

私のセットアップでは、xinetdを実行していませんでしたが、mysql-checkオプションが問題を引き起こしていることがわかりました。だから私は少なくともhaproxyをコメントアウトすることで稼働させることができた。 mysql-checkは、間違ったmysqlユーザーが使用されているか、権限が付与されていないことに関係していると思います。

0
Christian

どうもありがとう、素晴らしい、

HAproxyが正しく動作するようにxinetdを構成する必要があります。

エラー2013(HY000):「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:0

Xinetdがすでに実行されている場合は、再表示されます。

https://docs.openstack.org/ha-guide/shared-database-manage.html

0

これは通常、xinetdヘルスチェックサービスの応答エラー時に発生します。
次のようにxinetdtelnetをデバッグできます。

telnet IPADDR PORT     # IPADDR: one of the IPs of your nodes
                       # PORT: the port that node is listening.

出力は問題について教えてくれます。

0
Ghasem Pahlavan