3つの異なるAWSサーバーにzookeeperをインストールしました。以下は、すべてのサーバーの構成です
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper
clientPort=2181
server.1=x.x.x.x:2888:3888
server.2=x.x.x.x:2888:3888
server.3=x.x.x.x:2888:3888
3つのインスタンスはすべて、var/zookeeper
に適切なIDを持つmyid
ファイルを持っています。 3つのサーバーはすべて、awsコンソールからすべてのポートを開いています。しかし、zookeeperサーバーを実行すると、すべてのインスタンスで次のエラーが発生します。
2015-06-19 12:09:22,989 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382]
- Cannot open channel to 2 at election address /x.x.x.x:3888
Java.net.ConnectException: Connection refused
at Java.net.PlainSocketImpl.socketConnect(Native Method)
at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:339)
at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:200)
at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:182)
at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
at Java.net.Socket.connect(Socket.Java:579)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:368)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.Java:402)
at org.Apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.Java:840)
at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:762)
2015-06-19 12:09:23,170 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382]
- Cannot open channel to 3 at election address /x.x.x.x:3888
Java.net.ConnectException: Connection refused
at Java.net.PlainSocketImpl.socketConnect(Native Method)
at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:339)
at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:200)
at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:182)
at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
at Java.net.Socket.connect(Socket.Java:579)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:368)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.Java:402)
at org.Apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.Java:840)
at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:762)
2015-06-19 12:09:23,170 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@849] - Notification time out: 25600
各ノードでローカルサーバーのIPをどのように定義しましたか?パブリックIPを指定した場合、リスナーはポートに接続できませんでした。現在のノードに0.0.0.0を指定する必要があります
server.1=0.0.0.0:2888:3888
server.2=192.168.10.10:2888:3888
server.3=192.168.2.1:2888:3888
この変更は、他のノードでも実行する必要があります。
保存の質問に出会い、解決しました。
myidがZoo.cfgの設定で保存されていることを確認してください。
そのようなコンテンツを含むconf
ディレクトリ内のZoo.cfgファイルを確認してください。
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
サーバーのdataDirディレクトリでmyidを確認します。例えば:
Zoo.cfg
で定義されているdataDir
が'/home/admin/data'
であるとしましょう
次に、zookeeper1では、このファイルにmyidという名前のファイルがあり、値1が必要です。zookeeper2では、このファイルにmyidという名前のファイルがあり、値2が必要です; zookeeper3では、myidという名前のファイルが必要で、このファイルには値3が必要です。
このように構成されていない場合、サーバーは間違ったip:portでリッスンします。
自分のホスト名が127.0.0.1に解決される場合(私の場合、ホスト名は/ etc/hostsにあります)、zookeeperはZoo.cfgファイルに0.0.0.0がなければ起動しませんが、ホスト名が実際のマシンのIP、構成ファイルに独自のホスト名を置くことができます。
ここに、Zoo.cfgのホスト名0.0.0.0を使用してクラスターのビルドを自動化するためのいくつかのansible jinja2テンプレート情報があります。
{% for url in zookeeper_hosts_list %}
{%- set url_Host = url.split(':')[0] -%}
{%- if url_Host == ansible_fqdn or url_Host in ansible_all_ipv4_addresses -%}
server.{{loop.index0}}=0.0.0.0:2888:3888
{% else %}
server.{{loop.index0}}={{url_Host}}:2888:3888
{% endif %}
{% endfor %}
これは私のために働いたものです
Step 1:
Node 1:
Zoo.cfg
server.1= 0.0.0.0:<port>:<port2>
server.2= <IP>:<port>:<port2>
.
.
.
server.n= <IP>:<port>:<port2>
Node 2 :
server.1= <IP>:<port>:<port2>
server.2= 0.0.0.0:<port>:<port2>
.
.
.
server.n= <IP>:<port>:<port2>
Now in location defined by datadir on your Zoo.cfg
Node 1:
echo 1 > <datadir>/id
Node 2:
echo 2 > <datadir>/id
.
.
.
Node n:
echo n > <datadir>/id
これは、Zoo keeperを正常に起動するのに役立ちましたが、Zoo keeperを使って遊んでみれば、より詳しく知ることができます。お役に立てれば。
3-Node zookeeperアンサンブルで同様の問題が発生しました。解決策は、espeeirasboraからのアドバイスに従い、再起動しました。
これが私がやったことだった
zookeeper1、zookeeper2およびzookeeper3
A。Issue ::アンサンブルのznodeを開始できませんでした
B。System SetUp :: 3台の3台のマシンに3台のZnode
C。エラー::
Zookeperログファイルで、次のエラーを確認できました。
2016-06-26 14:10:17,484 [myid:1] - WARN [SyncThread:1:FileTxnLog@334] - fsync-ing the write ahead log in SyncThread:1 took 1340ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide
2016-06-26 14:10:17,847 [myid:1] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@810] - Connection broken for id 2, my id = 1, error =
Java.io.EOFException
at Java.io.DataInputStream.readInt(DataInputStream.Java:392)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.Java:795)
2016-06-26 14:10:17,848 [myid:1] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@813] - Interrupting SendWorker
2016-06-26 14:10:17,849 [myid:1] - WARN [SendWorker:2:QuorumCnxManager$SendWorker@727] - Interrupted while waiting for message on queue
Java.lang.InterruptedException
at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.Java:2014)
at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.Java:2088)
at Java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.Java:418)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager.pollSendQueue(QuorumCnxManager.Java:879)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager.access$500(QuorumCnxManager.Java:65)
at org.Apache.zookeeper.server.quorum.QuorumCnxManager$SendWorker.run(QuorumCnxManager.Java:715)
2016-06-26 14:10:17,851 [myid:1] - WARN [SendWorker:2:QuorumCnxManager$SendWorker@736] - Send worker leaving thread
2016-06-26 14:10:17,852 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@89] - Exception when following the leader
Java.io.EOFException
at Java.io.DataInputStream.readInt(DataInputStream.Java:392)
at org.Apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.Java:63)
at org.Apache.zookeeper.server.quorum.QuorumPacket.deserialize(QuorumPacket.Java:83)
at org.Apache.jute.BinaryInputArchive.readRecord(BinaryInputArchive.Java:99)
at org.Apache.zookeeper.server.quorum.Learner.readPacket(Learner.Java:153)
at org.Apache.zookeeper.server.quorum.Follower.followLeader(Follower.Java:85)
at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:846)
2016-06-26 14:10:17,854 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@166] - shutdown called
Java.lang.Exception: shutdown Follower
D。アクションと解決::
各znodeでa。構成ファイル$ ZOOKEEPER_HOME/conf/Zoo.cfgを変更して、他の2つのznodeのIPアドレスを維持しながらマシンのIPを「0.0.0.0」に設定しました。 b。 znodeを再起動しましたc。 d.Voilaのステータスを確認しました。
下記参照
#Before modification
[zookeeper1]$ tail -3 $ZOOKEEPER_HOME/conf/Zoo.cfg
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
#After modification
[zookeeper1]$ tail -3 $ZOOKEEPER_HOME/conf/Zoo.cfg
server.1=0.0.0.0:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
#Start the Zookeper (Stop and STart or restart )
[zookeeper1]$ $ZOOKEEPER_HOME/bin/zkServer.sh start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
[zookeeper1]$ $ZOOKEEPER_HOME/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
#Before modification
[zookeeper2]$ tail -3 $ZOOKEEPER_HOME/conf/Zoo.cfg
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
#After modification
[zookeeper2]$ tail -3 $ZOOKEEPER_HOME/conf/Zoo.cfg
server.1=zookeeper1:2888:3888
server.2=0.0.0.0:2888:3888
server.3=zookeeper3:2888:3888
#Start the Zookeper (Stop and STart or restart )
[zookeeper2]$ $ZOOKEEPER_HOME/bin/zkServer.sh start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
[zookeeper2]$ $ZOOKEEPER_HOME/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
#Before modification
[zookeeper3]$ tail -3 $ZOOKEEPER_HOME/conf/Zoo.cfg
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
#After modification
[zookeeper3]$ tail -3 $ZOOKEEPER_HOME/conf/Zoo.cfg
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=0.0.0.0:2888:3888
#Start the Zookeper (Stop and STart or restart )
[zookeeper3]$ $ZOOKEEPER_HOME/bin/zkServer.sh start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
[zookeeper3]$ $ZOOKEEPER_HOME/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
私たちは同じ問題に直面しました。私たちの場合、問題の根本原因は多すぎるクライアント接続数です。 aws ec2インスタンスのデフォルトのulimitは1024です。これにより、zookeeperノードは相互に通信できなくなります。
これに対する修正は、ulimitをより高い数値に変更することです->(> ulimit -n 20000)zookeeperを停止および開始します。
同様の問題がありました。 Zoo.cfgファイルでクラスター化する必要があると示されていたにもかかわらず、3つのzookeeperノードのうち2つのステータスが「スタンドアロン」としてリストされました。 3番目のノードは、説明したエラーで起動できませんでした。私がそれを修正したのは、zkServer.sh start
私の3つのノード間ですばやく連続して、ZookeeperがZoo.cfg initLimitに達する前に実行されていた。これが誰かのために働くことを願っています。
私の場合、問題は、3つのすべてのzookeeperサーバーを起動する必要がありました。その後、./zkCli.sh
を使用してzookeeperサーバーに接続できました。