通过示例设置ZooKeeper多服务器配置

4
ZooKeeper多服务器配置文档中,它展示了以下可以放置在每个服务器的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个“ensemble”(ZK群集)组成的群集中,第一个节点的myid文件将简单地包含值1。第二个节点的myid文件将包含2,以此类推。
我对这在现实世界中是什么样子有一些实际问题:
1.可以使用localhost吗?如果必须在集合中的每个节点上重复使用zoo.cfg,那么将当前服务器定义为localhost是否可以?例如,在一个由3个节点组成的群集中,Server #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

假设Server 1的myid中包含了值为red,那么怎么办呢?

1个回答

3

1. 可以使用本地主机吗?

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

server.x=[hostname]:nnnnn[:nnnnn], etc
(无Java系统属性)

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

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

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

所以简单地说,只需输入机器的IP地址即可使一切正常。此外,我个人测试过在接口IP地址与公共IP地址不同时使用0.0.0.0也可以。

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

根据ZooKeeper多服务器配置文档myid需要是1到255之间的数字值:

myid文件由仅包含该机器ID文本的单行组成。因此,服务器1的myid将包含文本“1”而不包含其他内容。ID必须在集合中唯一,并且应该具有1到255之间的值

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接