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

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

关于现实世界中的样子,我有几个实际问题:

1.可以localhost用吗?如果zoo.cfg必须在集合中的每个节点上重复,是否可以将当前服务器定义为localhost?例如,在 3 节点集成中,服务器 #2zoo.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

而且,比如说,服务器 1myid将包含red它内部的值(等等)?

4

1 回答 1

3

1、可以使用localhost吗?

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

server.x=[主机名]:nnnnn[:nnnnn] 等
(无 Java 系统属性)

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

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

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

所以只需输入机器IP地址,一切都应该工作。另外,我已经亲自测试过0.0.0.0(在接口IP地址与公共IP地址不同的情况下)并且它确实有效。

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

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

myid 文件由一行组成,其中仅包含该机器 id 的文本。因此,服务器 1 的 myid 将包含文本“1”,仅此而已。id 在整体中​​必须是唯一的,并且应该具有介于 1 和 255 之间的值

由于myid必须匹配xinserver.x参数,我们可以推断它也x必须是一个数值。

于 2017-02-10T11:11:44.630 回答