2つのmysqlノードのロードバランサーとしてHAProxyを使用しようとしています。 HAProxyが3307でリッスンしていて、3306のDBにリクエストをルーティングしています。クライアントがプロキシに接続しようとすると(mysql -u ... -h .. -P3307 -p ...)、次のエラーが発生します。 :
エラー2013(HY000):「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システム>エラー:0
クライアントがDBに直接接続しようとすると、正常に機能します。トラフィックがプロキシを経由するときになぜ失敗するのか、私にはわかりません。
これが私がすでにチェックしたものです:
/etc/hosts.allowには「mysqld:ALL:allow」が含まれます
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 ***:***
誰かが以前にこの問題に取り組んだことがありますか?これを解決する方法はありますか?
どんな助けでも大歓迎
OK、解決しました。 xinetdスクリプトに問題がありました。
9200のバインドに失敗しました-/ etc/servicesファイルで修正しました。
私のセットアップでは、xinetdを実行していませんでしたが、mysql-checkオプションが問題を引き起こしていることがわかりました。だから私は少なくともhaproxyをコメントアウトすることで稼働させることができた。 mysql-checkは、間違ったmysqlユーザーが使用されているか、権限が付与されていないことに関係していると思います。
どうもありがとう、素晴らしい、
HAproxyが正しく動作するようにxinetdを構成する必要があります。
エラー2013(HY000):「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:0
Xinetdがすでに実行されている場合は、再表示されます。
https://docs.openstack.org/ha-guide/shared-database-manage.html
これは通常、xinetd
ヘルスチェックサービスの応答エラー時に発生します。
次のようにxinetd
でtelnet
をデバッグできます。
telnet IPADDR PORT # IPADDR: one of the IPs of your nodes
# PORT: the port that node is listening.
出力は問題について教えてくれます。