ZooKeeper多服务器设置示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper多服务器设置示例相关的知识,希望对你有一定的参考价值。

ZooKeeper multi-server config docs他们显示以下配置可以放在每个服务器上的zoo.cfg(ZK的配置文件)中:

tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

此外,他们声明在每个ZK节点上需要一个myid文件,其内容与上面的server.id值之一相匹配。因此,例如,在3节点“集合”(ZK集群)中,第一个节点的myid文件将只包含值1。第二个节点的myid文件将包含2,依此类推。

关于现实世界中的情况,我有一些实际问题:

1.可以使用localhost吗?如果必须在整体中的每个节点上重复zoo.cfg,可以将当前服务器定义为localhost吗?例如,在3节点集合中,服务器#2的zoo.cfg看起来是否正常:

tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=localhost:2888:3888    # Afterall, we're on server #2!
server.3=zoo3:2888:3888

或者这是不是建议/不可能?

2.服务器ID必须是数字吗?例如,我可以有一个5节点集合,其中每个服务器的zoo.cfg看起来像:

tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.red=zoo1:2888:3888
server.green=zoo2:2888:3888
server.blue=zoo3:2888:3888
server.orange=zoo1:2888:3888
server.purple=zoo2:2888:3888

而且,比方说,服务器1的myid将包含其中的值red(等)?

答案

1.可以使用localhost吗?

这是一个很好的问题,因为ZooKeeper文档没有明确说明配置文件是否只接受IP地址。它只说hostname,它可能意味着IP地址,DNS或hosts文件中的名称,例如localhost

server.x = [hostname]:nnnnn [:nnnnn]等 (没有Java系统属性)

组成ZooKeeper集合的服务器。当服务器启动时,它通过在数据目录中查找文件myid来确定它是哪个服务器。该文件包含服务器编号(ASCII),它应与此设置左侧server.x中的x匹配。

但请注意,ZooKeeper建议在所有主机中使用完全相同的配置文件:

ZooKeeper的行为由ZooKeeper配置文件控制。假设磁盘布局相同,则此文件的设计使得构成ZooKeeper服务器的所有服务器都可以使用完全相同的文件。如果服务器使用不同的配置文件,则必须注意确保所有不同配置文件中的服务器列表匹配。

所以简单地把机器IP地址和一切都应该工作。此外,我亲自测试使用0.0.0.0(在接口IP地址与公共IP地址不同的情况下),它确实有效。

2.服务器ID必须是数字吗?

ZooKeeper multi-server configuration docsmyid需要是1到255之间的数值:

myid文件由一行组成,只包含该机器id的文本。所以服务器1的myid将包含文本“1”而没有别的。 id在整体中必须是唯一的,并且应该具有1到255之间的值。

由于myid必须与x参数中的server.x匹配,我们可以推断x也必须是数值。

以上是关于ZooKeeper多服务器设置示例的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper开机启动内存设置

zookeeper怎么用java创建临时节点

设备未收到 GCM 消息

Zookeeper3.5.7版本——客户端 API 操作(代码示例)

ZooKeeper 常用命令

ZooKeeper 常用命令