Rah*_*hul 42 java amazon-web-services apache-zookeeper
我在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
Run Code Online (Sandbox Code Playgroud)
所有这三个实例都有一个带有适当id 的myid文件var/zookeeper.所有三台服务器都从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
Run Code Online (Sandbox Code Playgroud)
esp*_*ora 85
如何在每个节点中定义本地服务器的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
Run Code Online (Sandbox Code Playgroud)
此更改也必须在其他节点上执行.
小智 8
我遇到了保存问题并解决了它.
确保myid是在zoo.cfg中使用您的配置进行保存.
请检查conf目录中的zoo.cfg文件,其中包含此类内容.
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
Run Code Online (Sandbox Code Playgroud)
并检查服务器dataDir目录中的myid.例如:
让我们说dataDir定义zoo.cfg就是'/home/admin/data'
然后在zookeeper1上,你必须有一个名为myid的文件,并且在这个文件上的值为1;在zookeeper2上,你必须有一个名为myid的文件,并且该文件的值为2; 在zookeeper3上,您必须有一个名为myid的文件,并且该文件的值为3.
如果没有像这样配置,服务器将侦听错误的ip:端口.
小智 6
以下是一些 ansible jinja2 模板信息,用于自动构建 Zoo.cfg 中主机名为 0.0.0.0 的集群
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您自己的主机名解析为 127.0.0.1(在我的例子中,主机名位于 /etc/hosts 中),zookeeper 在 Zoo.cfg 文件中没有 0.0.0.0 的情况下将无法启动,但如果您的主机名解析为实际的机器的IP,您可以将其自己的主机名放入配置文件中。