web-dev-qa-db-ja.com

Zookeeper接続エラー

開発マシンにスタンドアロンのzookeeperセットアップがあります。この1つのtestdevマシンを除く他のすべてのdevマシンで正常に動作します。

Testdevを介してzookeeperに接続しようとすると、このエラーが繰り返し発生します。

2012-11-09 14:06:53,909 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@947] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:53,911 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
2012-11-09 14:06:55,366 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1058] - Opening socket connection to server zk01.dev.bunchball.net/192.168.8.58:2181
2012-11-09 14:06:55,368 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@947] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:55,368 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
2012-11-09 14:06:57,271 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1058] - Opening socket connection to server zk01.dev.bunchball.net/192.168.8.58:2181
2012-11-09 14:06:57,274 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@947] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:57,275 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect

テスト開発マシンを再起動し、zookeeperホストも再起動しましたが、何も機能しませんでした。このマシンを除く他のマシンで完璧に機能する理由を完全に混乱させています。これの原因は何でしょうか?

31
user1322614

私はあなたと同じ状況にあり、この問題を修正しました。

この問題を直接引き起こす偶数の動物園飼育係を設定したのは、動物園飼育係ノードの数を奇数に変更してみてください。

たとえば、私のzookeeperクラスターの元のステータスは4つのノードで構成されており、そのうちの1つを削除するだけでノードの数が3になります。これでzookeeperクラスターを起動できます

以下は、zookeeperサーバーに正常に接続した場合の出力です

2013-04-22 22:07:05,654 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.Apache.zookeeper.ZooKeeperMain$MyWatcher@1321ed6
Welcome to ZooKeeper!
2013-04-22 22:07:05,704 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2013-04-22 22:07:05,727 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session
[zk: localhost:2181(CONNECTING) 0] 2013-04-22 22:07:05,846 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x13e3211c06e0000, negotiated timeout = 30000
14
Rugal

同じ問題に直面し、zookeeperクラスターノードが互いに通信するためにポートを開く必要があることが原因であることがわかりました。

server.1=xx.xx.xx.xx:2888:3888

server.2=xx.xx.xx.xx:2888:3888

server.3=xx.xx.xx.xx:2888:3888

これらのポートをAWSセキュリティグループで許可して再起動すると、すべてがうまくいきました

9

問題を解決しました。トラブルメーカーはファイアウォールです。「systemctl stop firewalld」を使用して各サーバーをすべてシャットダウンすると、問題を簡単に解決できます。または、次のようなコマンドを使用できます。

firewall-cmd --zone=public --add-port=2181/udp --add-port=2181/tcp --permanent" to configure all three ports ,include 2181,2888,3888 in each server.And then "firewall-cmd --reload

最後に使用

zkServer.sh restart

サーバーを再起動して問題を解決しました。

4
Sherlock.Li

私の場合、Zoo.cfgを次のように構成します。

server.1=Host-1:2888:3888
server.2=Host-2:2888:3888
server.3=Host-3:2888:3888

ただし、ホスト1では、ホスト1を/ etc/hostsで127.0.0.1に設定します。

127.0.0.1   localhost Host-1

他のホストが通信できなくなる可能性があります。 Host-1を実際のIPに解決して、この問題を解決しました。

これが役立つことを願っています。

3
Yug Suo

Aレコードを使用してZookeeper IPを指すようにブローカーをZookeeperアンサンブルに接続しようとしたときに、同じエラーが発生していました。問題は飼育係にありました。私のAレコードをパブリックIPに向けているため、動物園管理者はポート2181にバインドできませんでした。これは、動物園管理者のアンサンブルがリーダーを選択し、互いに通信することを妨げていました。 AレコードをプライベートIPにポイントすると、zookeeperアンサンブルはリーダーを選択でき、クラスターがアクティブになりました。この後、ブローカーの1つをアンサンブルに接続しようとすると、正常に接続されました。

2
manik anand

私もこの問題を抱えており、間違ったポートに接続するようにzookeeperに伝えていたことが判明しました。 zookeeperが実際に開発マシンのポート2181で実行されていることを確認しましたか?

2
Trebor Rude

私もこの問題を抱えていたので、zookeeperを再起動し、Tomcatを再起動するだけで、webappがうまく接続できるようになりました。

1

私も先週この問題に遭遇しましたが、今ではなんとか修正できました。 @gukoffが共有する応答から、これを解決するというアイデアを得ました。

私の要件と状況はこれまでに共有されたものとは少し異なりましたが、問題は基本的に同じであったため、このスレッドで共有することを考えました。

私は実際に、アプリケーションからの情報について(30秒ごとに)zookeeperクォーラムを照会しようとしており、この目的で Curator Framework を使用していました( LeaderLatch クラスで使用可能なメソッド)。したがって、本質的には CuratorFramework クライアントを起動し、これを LeaderLatch オブジェクトに提供していました。

このスレッドに記載されているエラーに遭遇した後のみ-私は、アプリケーションで確立されたzookeeperクライアント接続を閉じなかったことに気付きました。 maxClientCnxnsプロパティの値は60で、接続の数(すべてが古い接続)が60に達するとすぐに、私のアプリケーションはこのエラーで不平を言い始めました。

私は開いている接続の数について次のことを知りました:

  1. 「{ホストのIPアドレス}からの接続が多すぎます」という警告メッセージがあったzookeeperログを確認する

  2. 上記のログに記載されているのと同じホストから次のnetstatコマンドを実行すると、アプリケーションが実行されていました。

netstat -no | grep:2181 | wc -l

:2181ポートは、zookeeper接続に一致するgrepのパラメーターとして提供されるzookeeperのデフォルトです。

これを修正するために、これらの古い接続をすべて手動でクリアしてから、アプリケーションでzookeeperクライアント接続を正常に閉じるためのコードを追加しました。

これがお役に立てば幸いです!

1
Lalit

これは、開いている接続が多すぎる場合に発生する可能性があります。

maxClientCnxns設定を増やしてみてください。

ドキュメント から:

maxClientCnxns(No Javaシステムプロパティ)

IPアドレスで識別される単一のクライアントがZooKeeperアンサンブルの単一のメンバーに対して確立できる同時接続数(ソケットレベル)を制限します。これは、ファイル記述子の枯渇を含むDoS攻撃の特定のクラスを防ぐために使用されます。これを0に設定するか完全に省略すると、同時接続の制限がなくなります。

構成ファイルの設定を編集できます。ほとんどの場合、/etc/zookeeper/conf/Zoo.cfg

最新のZooKeeperバージョンでは、デフォルト値は60です。maxClientCnxns=4096行を構成ファイルの最後まで。

1
gukoff

私はzookeeperから始めて、kafkaそれぞれ2つのノードを持っています。kafka = wrapper bin/zookeeper-server-start.sh config/zookeeper.properties

1
darKoram

マシンでスタンドアロンインスタンスを起動すると、同じ問題が発生します。最後に、ip "127.0.0.1"から "localhost"に変更すると、問題はなくなりました。

1
Sisyphus

ローカルファイアウォールも確認してくださいservice firewalld status

実行中の場合は、単に停止しますservice firewalld stop

そして、試してみてください。

1
Naveen Sharma

必要なすべてのサービスが実行されていることを確認してください

ステップ1:hbase-masterが実行されているかどうかを確認する

Sudo /etc/init.d/hbase-master status

そうでない場合は、開始しますSudo /etc/init.d/hbase-master start

ステップ2:hbase-regionserverが実行されているかどうかを確認する

Sudo /etc/init.d/hbase-regionserver status

そうでない場合は、開始しますSudo /etc/init.d/hbase-regionserver start

手順3:zookeeper-serverが実行されているかどうかを確認する

Sudo /etc/init.d/zookeeper-server status

そうでない場合は、開始しますSudo /etc/init.d/zookeeper-server start


または単にこれら3つのコマンドを連続して実行します。

Sudo /etc/init.d/hbase-master restart
Sudo /etc/init.d/hbase-regionserver restart
Sudo /etc/init.d/zookeeper-server restart

その後、ステータスを確認することを忘れないでください

Sudo /etc/init.d/hbase-master status
Sudo /etc/init.d/hbase-regionserver status
Sudo /etc/init.d/zookeeper-server status

Zookeeperがまだ実行されていないことがわかる場合があります。その後、zookeeperを実行できます

Sudo /usr/lib/zookeeper/bin/zkServer.sh stop
Sudo /usr/lib/zookeeper/bin/zkServer.sh start

その後、再度ステータスをチェックし、実行されていることを確認してください

Sudo /etc/init.d/zookeeper-server status

これは動作するはずです。

1
Abhishek Goel

私はあなたと同じ状況にあり、この問題を修正しました。

僕の conf/Zoo.cfg ちょうどこのような:

server.1=10.194.236.32:2888:3888
server.2=10.194.236.33:2888:3888
server.3=10.208.177.15:2888:3888
server.4=10.210.154.23:2888:3888
server.5=10.210.154.22:2888:3888

その後、data/myidこのようなファイルコンテンツ:

1      //at Host  10.194.236.32
2      //at Host  10.194.236.33
3      //at Host  10.208.177.15
4      //at Host  10.210.154.23
5      //at Host  10.210.154.22

最後にzookeeperを再起動します

1
chinahbcq

Zookeeperのログ(/ var/log/zookeeper)を確認してください。接続が確立されているように見えますが、これはその記録があることを意味するはずです。

私も同じ状況にありましたが、それはプロセスが接続を開いて閉じられなかったためです。これは最終的にホストごとの接続制限を超え、私のログは

2016-08-03 15:21:13,201 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@188] - Too many connections from /172.31.38.64 - max is 50

Zookeeperが通常のポートにあると仮定すると、次のコマンドで確認できます。

lsof -i -P | grep 2181
0
Patrick McGuire

2ノードクラスタでのセットアップ中に同じエラーが発生しました。 myidファイルの内容とserver.id = Host_IP:portエントリを混同していたことがわかりました。

基本的に、次のようにzookeeperのdataDirに「myid」ファイルを作成した2つのサーバー(SERVER1とSERVER2)がある場合

SERVER1 (myid)
1

SERVER2 (myid)
2

Zoo.cfgファイルのエントリがこれらのそれぞれに対応していることを確認します。つまり、server.1はSERVER1ホスト名を使用し、server.2はSERVER2ホスト名を使用し、次にポートが続くようにします。

SERVER1 (Zoo.cfg)
... (other config omitted)
server.1=SERVER1:2888:3888
server.2=SERVER2:2888:3888

SERVER2 (Zoo.cfg)
... (other config omitted)
server.1=SERVER1:2888:3888
server.2=SERVER2:2888:3888

念のため、dataDirのversion- *フォルダーも削除し、Zookeeperを再起動して機能させました。

0
Akinwale

サーバーsessionid 0x0から追加データを読み取れません。サーバーがソケットを閉じ、ソケット接続を閉じ、再接続を試みている可能性があります(org.Apache.zookeeper.ClientCnxn)

Zoo.cfgファイルのブローカーの数だけを変更し、zookeeperとkafkaサービスを再起動します

0
laminesawd

レプリケートされたzkを起動したときにも同じエラーが発生します。zkClientの1つがlocalhost:2181に接続できないため、Apache-zookeeper-3.5.5-bin/logsディレクトリの下のログファイルを確認し、これを見つけました:

2019-08-20 11:30:39,763 [myid:5]-警告[QuorumPeermyid = 5(secure = disabled):QuorumCnxManager @ 677]-選挙アドレス/ xxxx:3888 Java.net.SocketTimeoutExceptionでチャネル3を開くことができません: Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)のJava.net.PlainSocketImpl.socketConnect(Native Method)でJava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java.206)のタイムアウトした接続org.Apache.zookeeper.server.quorumのJava.net.Socket.connect(Socket.Java:589)のJava.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)のAbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:188) org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:705)at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.connectAll(QuorumCnxManager.connectAll(QuorumCnxManager.connectAll(QuorumCnxManager.connectAll(Manager))) :733)org.Apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.Java:910)at org。 Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:1247)2019-08-20 11:30:44,768 [myid:5]-警告[QuorumPeermyid = 5(secure = disabled):QuorumCnxManager @ 677]-選挙アドレス/ xxxxxx:3888で4にチャネルを開くことができませんJava.net.SocketTimeoutException:Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)のJava.net.PlainSocketImpl.socketConnect(Native Method)で接続がタイムアウトしました.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:206)at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:188)at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:Socket)at Java.net。 connect(Socket.Java:589)at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:648)at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:705) org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.Java:733)org.Apache.zookeeper.server.quorumで.FastLeaderElection.lookForLeader(FastLeaderElection.Java:910)at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:1247)2019-08-20 11:30:44,769 [myid:5]-INFO [ QuorumPeermyid = 5(secure = disabled):FastLeaderElection @ 919]-通知タイムアウト:51200

つまり、このzkサーバーは他のサーバーに接続できず、このサーバーが他のサーバーにpingを実行すると失敗し、レプリカからこのサーバーを削除すると問題が解決します。

これが役立つことを願っています。

0
Y.L.

私も同じ問題に遭遇しました。私の場合、問題はiptablesルールにあります。

Zookeeperノードと通信するには、2181ポートが着信要求を受け入れる必要があります。また、zookeeperノード間の内部通信では、着信要求に対して2888、3888ポートが開いている必要があります。

iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 2181 -j DNAT --to-destination serverIp:2181
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 2181 -j DNAT --to-destination serverIp:2181

iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 2888 -j DNAT --to-destination serverIp:2888
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 2888 -j DNAT --to-destination serverIp:2888

iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 3888 -j DNAT --to-destination serverIp:3888
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 3888 -j DNAT --to-destination serverIp:3888

Sudo service iptables save
0
serkan kucukbay