開発マシンにスタンドアロンの zookeeper をセットアップしています。このテストデブマシン以外のすべての開発マシンでは問題なく動作しています。
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のホストを再起動したりしましたが、うまくいきません。このマシン以外のマシンでは全く問題なく動作しているのに、なぜでしょうか。何が原因でしょうか?
私もちょうどあなたと同じ状況にあり、この問題を解決したところです。
ズーキーパーの数が偶数であることが、この問題の直接の原因です。 zookeeperノードの数を奇数に変更してみてください。
例えば、私のzookeeperクラスタの元のステータスは4ノードで構成されています。 これでzookeeperクラスタの起動はOKです。
以下は、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
問題を解決しました。 centos 7を使用しています。 また、トラブルメーカーはfirewall.Us ing "systemctl stop firewalld"であり、各サーバーですべてをシャットダウンすると、コマンドのようなproblem.Orを簡単に解決できます。
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
サーバーを再起動して問題を解決します。
私の場合、次のようにzoo.cf gを設定します。
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に解決すると、この問題が解決しました。
これが役立つことを願っています。
Aレコードを使用してZookeeper IPを指すためにブローカーをZookeeperアンサンブルに接続しようとしたときも、同じエラーが発生していました。 問題は私の飼育係にありました。 AレコードをパブリックIPにポイントしていたため、ズーキーパーはポート2181にバインドできませんでした。これにより、ズーキーパーアンサンブルはリーダーを選択し、互いに通信できなくなりました。 AレコードをプライベートIPにポイントすると、ズーキーパーアンサンブルはリーダーを選択できるようになり、クラスターがアクティブになりました。 この後、ブローカーの1つをアンサンブルに接続しようとすると、正常に接続されました。
これは、オープン接続が多すぎる場合に発生する可能性があります。
maxClientCnxns
設定を増やしてみてください。
ドキュメントから:
maxClientCnxns。 (Javaシステムプロパティなし)。
IPアドレスで識別される単一のクライアントがZooKeeperアンサンブルの単一のメンバーに作成できる同時接続の数(ソケットレベル)を制限します。 これは、ファイル記述子の枯渇を含む、特定のクラスのDoS攻撃を防ぐために使用されます。 これを0に設定するか、省略すると、同時接続の制限が完全に削除されます。
設定ファイルの設定を編集できます。 ほとんどの場合、 / etc / zookeeper / conf /zoo.cf g
にあります。
最新のZooKeeperバージョンでは、デフォルト値は60です。 maxClientCnxns = 4096
行を構成ファイルの最後に追加することで、増やすことができます。
必要なすべてのサービスが実行されていることを確認してください。
ステップ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:ズーキーパーサーバーが実行されているかどうかを確認します。
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がまだ実行されていないことに気付くかもしれません。 次に、ズーキーパーを実行できます。
sudo /usr/lib/zookeeper/bin/zkServer.sh stop
sudo /usr/lib/zookeeper/bin/zkServer.sh start
その後、ステータスを再度確認し、実行されていることを確認します。
sudo /etc/init.d/zookeeper-server status
これでうまくいくはずです。
先週もこの問題に遭遇し、なんとかこれを修正することができました。 @gukoffが共有した応答からこれを解決するというアイデアを得ました。
私の要件と状況は、これまでに共有されたものとは少し異なりましたが、問題は基本的に同じだったので、このスレッドで共有することを考えました。
私は実際にアプリケーションからの情報について(30秒ごとに)ズーキーパークォーラムをクエリしようとしており、この目的のためにキュレーターフレームワークを使用していました(LeaderLatchクラスで利用可能なメソッド)。 したがって、本質的に私はCuratorFrameworkクライアントを起動し、これをLeaderLatchオブジェクトに提供していました。
このスレッドで述べたエラーに遭遇した後でのみ、アプリケーションで確立されたズーキーパークライアント接続を閉じていないことに気付きました。 maxClientCnxns
プロパティの値は60で、接続数(すべてが古い接続でした)が60に触れるとすぐに、私のアプリケーションはこのエラーについて不平を言い始めました。
開いている接続の数について次の方法で知りました。
1。 「ホストの{IPアドレス}からの接続が多すぎる」という警告メッセージがあったズーキーパーログを確認します。
2。 アプリケーションが実行されていた上記のログで述べたのと同じホストから次の「netstat」コマンドを実行します。
netstat -no | grep:2181 | wc -l。
注:2181ポートは、ズーキーパー接続に一致するようにgrepのパラメーターとして提供されるズーキーパーのデフォルトです。
これを修正するために、これらの古い接続をすべて手動で消去し、アプリケーションでズーキーパークライアントの接続を優雅に閉じるためのコードを追加しました。
これが役に立てば幸いです。!
私はあなたと同じ状況にあり、この問題を修正しました。
私の conf /zoo.cf g
はまさにこのように:
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
次に、次のように「データ/ 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
最後にズーキーパーを再起動します。
複製したzkを起動したときも同じエラーが発生します。zkClientの1つがlocalhostに接続できません。2181、apache-zookeeper-3.5.5-bin / logsディレクトリでログファイルを確認し、これを見つけました。
2019-08-20 11:30:39,763 [myid:5]-警告。 [QuorumPeer [myid = 5](plain = /0.0.0.0:2181)(secure = disabled):QuorumCnxManager @ 677]。 -選挙アドレス/ xxxx:3888 java.net.So cketTimeoutExceptionでチャネルを3に開くことができません:タイムアウトした接続。 java.net.PlainSocketImpl.so cketConnect(ネイティブメソッド)で。 java.net.AbstractPlainSocketImpl.do Connect(AbstractPlainSocketImpl.ja va:350)。 で。 java.net.AbstractPlainSocketImpl.co nnectToAddress(AbstractPlainSocketImpl.ja va:206)。 で。 java.net.AbstractPlainSocketImpl.co nnect(AbstractPlainSocketImpl.ja va:188)。 java.net.SocksSocketImpl.co nnect(SocksSocketImpl.ja va:392)で。 java.net.Socket.co nnect(Socket.ja va:589)at。 org.apache.zookeeper.server.quorum.QuorumCnxManager.co nnectOne(QuorumCnxManager.ja va:648)。 で。 org.apache.zookeeper.server.quorum.QuorumCnxManager.co nnectOne(QuorumCnxManager.ja va:705)。 で。 org.apache.zookeeper.server.quorum.QuorumCnxManager.co nnectAll(QuorumCnxManager.ja va:733)。 で。 org.apache.zookeeper.server.quorum.FastLeaderElection.lo okForLeader(FastLeaderElection.ja va:910)。 で。 org.apache.zookeeper.server.quorum.QuorumPeer.ru n(QuorumPeer.ja va:1247)。 2019-08-20 11:30:44,768 [myid:5]-警告。 [QuorumPeer [myid = 5](plain = /0.0.0.0:2181)(secure = disabled):QuorumCnxManager @ 677]。 -選挙アドレス/ xxxxxx:3888 java.net.So cketTimeoutExceptionでチャネルを4に開くことができません:タイムアウトした接続。 java.net.PlainSocketImpl.so cketConnect(ネイティブメソッド)で。 java.net.AbstractPlainSocketImpl.do Connect(AbstractPlainSocketImpl.ja va:350)。 で。 java.net.AbstractPlainSocketImpl.co nnectToAddress(AbstractPlainSocketImpl.ja va:206)。 で。 java.net.AbstractPlainSocketImpl.co nnect(AbstractPlainSocketImpl.ja va:188)。 java.net.SocksSocketImpl.co nnect(SocksSocketImpl.ja va:392)で。 java.net.Socket.co nnect(Socket.ja va:589)at。 org.apache.zookeeper.server.quorum.QuorumCnxManager.co nnectOne(QuorumCnxManager.ja va:648)。 で。 org.apache.zookeeper.server.quorum.QuorumCnxManager.co nnectOne(QuorumCnxManager.ja va:705)。 で。 org.apache.zookeeper.server.quorum.QuorumCnxManager.co nnectAll(QuorumCnxManager.ja va:733)。 で。 org.apache.zookeeper.server.quorum.FastLeaderElection.lo okForLeader(FastLeaderElection.ja va:910)。 で。 org.apache.zookeeper.server.quorum.QuorumPeer.ru n(QuorumPeer.ja va:1247)。 2019-08-20 11:30:44,769 [myid:5]-INFO。 [QuorumPeer [myid = 5](plain = /0.0.0.0:2181)(secure = disabled):FastLeaderElection @ 919]。 -通知タイムアウト:51200。
つまり、このzkサーバーは他のサーバーに接続できず、このサーバーが他のサーバーにpingを実行できないことがわかりました。このサーバーをレプリカから削除すると、問題が解決します。
これが役立つことを願っています。
ズーキーパーログ(/ 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
動物飼育係が通常のポートにいると仮定すると、次の方法でチェックを行うことができます。
lsof -i -P | grep 2181
私も同じ問題に遭遇しました。 私の場合、問題は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
これは、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ログファイルを見つけるには、まず、ログに記録するために構成されている場所を確認する必要があります。 私の場合、ルートディレクトリの下にズーキーパーがインストールされています(そこにインストールすることをお勧めしません)。
[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.lo gおよび/またはzookeeper.ou tファイルがあります。
2ノードクラスターのセットアップ中に同じエラーが発生しました。 myidファイルの内容とserver.id = HOST_IP:portエントリを混同していたことがわかりました。
基本的に、以下のようにズーキーパー用にdataDirに「myid」ファイルを作成した2台のサーバー(SERVER1とSERVER2)がある場合。
SERVER1 (myid)
1
SERVER2 (myid)
2
zoo.cf gファイルのエントリがこれらのそれぞれに対応していることを確認します。つまり、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のバージョン*フォルダーも削除し、Zookeeperを再起動して動作させました。