首页 \ 问答 \ Zookeeper合奏不会出现(Zookeeper ensemble not coming up)

Zookeeper合奏不会出现(Zookeeper ensemble not coming up)

我正在尝试按照文档配置3个节点的集合。 所有这些都在Linux Ubuntu上。 在所有三个节点配置文件看起来像这样:

在$ ZOOKEEPER_HOME / conf下的zoo.cfg

tickTime=2000
dataDir=/home/zkuser/zookeeper_data
clientPort=2181
initLimit=5
syncLimit=2
server.1=ip.of.zk1:2888:3888
server.2=ip.of.zk2:2888:3888
server.3=ip.of.zk3:2888:3888

我还在/home/zkuser/zookeeper_data/目录下放置了各自的“ myid ”文件。 这个myid文件包含1在节点(ip.of.zk1)上,依此类推。

当我使用bin / zkServer.sh启动zk服务器时,在控制台上没有显示任何异常。 但是,当我打开bin目录下的zookeeper.out文件时,我看到以下错误。

2014-11-04 00:23:49,120 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 1 at election address /ip.of.zk1:3888
java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)
2014-11-04 00:23:49,123 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /ip.of.zk2:3888
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)

注意 :我已经在每台机器上使用iptables打开了相应的端口。 例如:Chain INPUT(policy ACCEPT)

target     prot opt source               destination         
ACCEPT     all  --  IP.of.ZK1       anywhere            
ACCEPT     all  --  IP.of.ZK2       anywhere            
ACCEPT     all  --  IP.of.ZK3       anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

谁能告诉我我失踪了什么?

此致,JE


I am trying to configure the ensemble of 3 nodes following the documentation. All of them are on Linux Ubuntu. on all the three nodes configuration file looks like this :

zoo.cfg under $ZOOKEEPER_HOME/conf

tickTime=2000
dataDir=/home/zkuser/zookeeper_data
clientPort=2181
initLimit=5
syncLimit=2
server.1=ip.of.zk1:2888:3888
server.2=ip.of.zk2:2888:3888
server.3=ip.of.zk3:2888:3888

I've also placed respective "myid" files under /home/zkuser/zookeeper_data/ directory. This myid files contain 1 which is on node (ip.of.zk1), so on and so forth.

When I start the zk server using bin/zkServer.sh start without showing any exception on the console. However when I open the zookeeper.out files under bin directory I see the following errors.

2014-11-04 00:23:49,120 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 1 at election address /ip.of.zk1:3888
java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)
2014-11-04 00:23:49,123 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /ip.of.zk2:3888
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)

Note :I've opened the appropriate ports using iptables on each machines. For example : Chain INPUT (policy ACCEPT)

target     prot opt source               destination         
ACCEPT     all  --  IP.of.ZK1       anywhere            
ACCEPT     all  --  IP.of.ZK2       anywhere            
ACCEPT     all  --  IP.of.ZK3       anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

Can anyone please tell me what I've been missing ?

Regards, JE


原文:https://stackoverflow.com/questions/26732514
更新时间:2023-06-17 08:06

最满意答案

您可能会考虑一些选项

  • 将数据存储在cookie中
  • 使用localStorage
  • 将所有内容保存在root vue实例中
  • 将所有内容保存在包装vue组件中

我的建议是在cookie中存储身份验证令牌 - 这是成功调用后端所必需的。 这样,您可以通过发送的每个请求轻松访问它。

要存储我建议的用户信息,要么创建包装组件,要么使用root vue实例。 以下示例应该清除这一点。

包装主组件(内联模板)

data: function() {
  return { userinfo: {} }
},

created: function() {
  // load your user info
}

然后在index.html / main视图中使用它

<body>
  <home inline-template>
    <!-- any stuff here -->

    <!-- pass the user prop to every component that is shown in the userinfo -->
    <router-view :user="userinfo"></router-view>
  </home>
</body>  

然后,路由器视图中显示的组件可以访问用户道具

示例组件

...

props: ['user'],

...

<template>
   <span>{{ user.name }}</span>
</template>

...

重要提示:为了完成这项工作,您还需要添加props:true以定义您的路线。 这里详细解释了所有内容: https//router.vuejs.org/en/essentials/passing-props.html

备注:如果您不想在包装组件中加载userdata,可以将其加载到其他任何位置,并使用事件总线将结果传输到包装组件。 但是,您应始终只有一个关于用户信息的真实来源。 只能将它存放在一个地方。


Some options you might consider

  • store data in cookies
  • use localStorage
  • keep everything in the root vue instance
  • keep everything in a wrapping vue component

My suggestion would be to store the auth token - that is actually required to successfully call your backend - in a cookie. This will make it super easy to access it with each and every request you send.

To store the user information I'd suggest to either create a wrapping component or use the root vue instance. The following example should clearify this.

wrapping home component (inline template)

data: function() {
  return { userinfo: {} }
},

created: function() {
  // load your user info
}

Then use it in your index.html / main view

<body>
  <home inline-template>
    <!-- any stuff here -->

    <!-- pass the user prop to every component that is shown in the userinfo -->
    <router-view :user="userinfo"></router-view>
  </home>
</body>  

Your components that are shown in the router-view can then access the user prop

example component

...

props: ['user'],

...

<template>
   <span>{{ user.name }}</span>
</template>

...

IMPORTANT: to make this work you will also need to add props: true to the definition of your route. Everything is explained here in detail: https://router.vuejs.org/en/essentials/passing-props.html

Remark: If you don't want to load userdata in your wrapping component you can load it anywhere else and use an event bus to transfer the results to the wrapping component. However, you should always have only ONE source of truth regarding the user info. Store it only at a single place.

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。