38

開発マシン上にスタンドアロンの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ホストも再起動しようとしましたが、何も機能しませんでした。これ以外の他のマシンで完全に正常に動作する理由は完全に混乱しています。これの原因は何でしょうか?

4

24 に答える 24

13

私は同じ問題に直面し、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セキュリティグループを介して許可されたら、再起動しました。すべてがうまくいきました

于 2014-11-07T05:39:16.283 に答える
4

私はちょうど問題を解決しました。私はcentos 7を使用しています.そして、トラブルメーカーはファイアウォールです.「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

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

于 2016-04-29T01:55:44.973 に答える
3

私の場合、zoo.cfg を次のように設定します。

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

しかし、host-1 では、/etc/hosts で host-1 が 127.0.0.1 に解決されるように構成します。

127.0.0.1   localhost host-1

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

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

于 2015-07-30T01:16:54.057 に答える
2

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

于 2012-12-07T22:46:59.707 に答える
2

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

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 を再起動します

于 2016-07-05T11:57:20.863 に答える
1

私もこの問題を抱えていました.zookeeperを再起動してからtomcatを再起動するだけで、webappがうまく接続されることがわかりました

于 2014-05-07T14:15:02.250 に答える
1

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

于 2015-11-19T12:22:49.950 に答える
1

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

ステップ 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

これはうまくいくはずです。

于 2014-07-31T08:53:46.330 に答える
1

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

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

ドキュメントから:

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

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

構成ファイルで設定を編集できます。ほとんどの場合、 で見つけることができます/etc/zookeeper/conf/zoo.cfg

最新の ZooKeeper バージョンでは、デフォルト値は 60 ですmaxClientCnxns=4096。設定ファイルの末尾に次の行を追加することで値を増やすことができます。

于 2017-08-28T12:17:48.510 に答える
0

私も同じ問題に遭遇しました。私の場合、問題は 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
于 2016-09-02T10:50:12.943 に答える
0

これは、Zookeeper サーバーが実行されていないか、実行されなくなった場合 (つまり、起動後にクラッシュした場合) によくある問題です。

最初に、Zookeeper サーバーが実行されていることを確認します。チェックする簡単な方法は、実行中のプロセスを grep することです。

# ps -ef | grep zookeeper

(これを数回実行して、同じプロセス ID がまだ存在するかどうかを確認します。新しいプロセス ID で再起動し続ける可能性があります。Linux ディストリビューションが systemd をサポートしている場合は、「systemctl status zookeeper」を使用することもできます)

Java プロセスとして実行されているプロセスが表示されます。

# ps -ef | grep zookeeper
root       492     0  0 00:01 pts/1    00:00:00 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /root/zookeeper-3.5.0-alpha/bin/../build/classes:/root/zookeeper-3.5.0-alpha/bin/../build/lib/*.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/slf4j-log4j12-1.7.5.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/slf4j-api-1.7.5.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/servlet-api-2.5-20081211.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/netty-3.7.0.Final.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/log4j-1.2.16.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jline-2.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jetty-util-6.1.26.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jetty-6.1.26.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/javacc.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jackson-mapper-asl-1.9.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jackson-core-asl-1.9.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/commons-cli-1.2.jar:/root/zookeeper-3.5.0-alpha/bin/../zookeeper-3.5.0-alpha.jar:/root/zookeeper-3.5.0-alpha/bin/../src/java/lib/*.jar:/root/zookeeper-3.5.0-alpha/bin/../conf: -Xmx1000m -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /root/zookeeper-3.5.0-alpha/bin/../conf/zoo.cfg

そこにない場合は、飼育係のログ ファイルに問題を示す何かがある可能性があります。

Zookeeper のログ ファイルを見つけるには、まずログ用に構成されている場所を特定する必要があります。私の場合、ルート ディレクトリに Zookeeper をインストールしています (そこにインストールすることはお勧めしません)。

[root@centos6_zookeeper conf]# pwd
/root/zookeeper-3.5.0-alpha/conf

そして、このファイルでログ設定を見つけることができます:

[root@centos6_zookeeper conf]# grep "zookeeper.log" log4j.properties 
zookeeper.log.dir=/var/log
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.log.maxfilesize=256MB
zookeeper.log.maxbackupindex=20

そのため、Zookeeper は /var/log の下にログを記録するように構成されています。

次に、通常、起動エラーを示すzookeeper.logおよび/またはzookeeper.outファイルがあります。

于 2017-11-30T00:13:13.807 に答える
0

これは、ZooKeeper サーバーが稼働中で、ソケットが開いて接続を受け入れているにもかかわらず、1 つ以上の ZooKeeper ディスクの容量が不足している場合に発生する可能性があります。これは、古い ZK スナップショットとログ ファイルがクリーンアップされていない場合に簡単に発生します。

ZooKeeper サーバーは、スナップショットとログ ファイルを作成しますが、決して削除しません。データとログ ファイルの保持ポリシーは、ZooKeeper サーバーの外部で実装されます。サーバー自体は、最新の完全なファジー スナップショット、それに続くすべてのログ ファイル、およびその前の最後のログ ファイルのみを必要とします。後者の要件は、このスナップショットの開始後に発生したが、その時点で既存のログ ファイルに記録された更新を含めるために必要です。これが可能なのは、ZooKeeper ではログのスナップショット作成とロールオーバーがある程度独立して行われるためです。保持ポリシーの設定と ZooKeeper ストレージのメンテナンスの詳細については、このドキュメントのメンテナンス セクションを参照してください。

古いスナップショットとログ ファイルをクリーンアップするために実行できるメンテナンス ジョブがあります。 https://zookeeper.apache.org/doc/r3.4.12/zookeeperAdmin.html#sc_maintenanceを参照してください。

于 2020-01-27T16:41:45.680 に答える
-1

ちょうど今、同じ質問を解決してブログを投稿しました。

簡単に言うと、xx の zoo.cfg が次のようになっている場合:

server.1=xx:2888:3888
server.2=yy:2888:3888
server.3=zz:2888:3888

その場合、xx の myid=1 は必須です

于 2017-05-19T08:18:03.523 に答える