我正在尝试在分布式模式下安装 zookeeper 和 HBase,但是当我启动动物园管理员仲裁的最后一个节点时,我得到的例外是:
2013-09-05 12:02:09,230 - ERROR [main:QuorumPeer@171] - Setting LearnerType to PARTICIPANT but 4 not in QuorumPeers.
2013-09-05 12:02:09,246 - INFO [main:QuorumPeer@444] - acceptedEpoch not found! Creating with a reasonable default of 0. This should only happen when you are upgrading your installation
2013-09-05 12:02:09,250 - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally
java.lang.RuntimeException: My id 4 not in the peer list
at org.apache.zookeeper.server.quorum.QuorumPeer.startLeaderElection(QuorumPeer.java:479)
at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:411)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:151)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
我将 zookeeper 仲裁设置为 3 - 包含来自 hadoop 的主节点 + 2 个数据节点。动物园.cfg列出所有这些机器。他们将 myid 设置为 1 表示主节点,3 设置为第一数据模式,4 表示第二个数据节点。主节点和第一个数据节点运行良好。
由于 myid 和 zoo 的内容不一致引起的.cfg - 当我统一服务器时。 在 myid 文件中,它开始没有问题。
如果您在安装Kafka时遇到此问题,请转到zookeeper.properties文件并检查myid
的值是什么,即
server.<<myid>> = hostname:2181
并且myid
的值必须在 Zoookeer datadir
中存在的myid
文件中,就我而言,这是:
/tmp/zookeeper/myid
您似乎在配置中使用了不一致的 ID。如果您使用 docker-compose 来运行和部署 zookeeper 集群,配置应如下所示:
version: '<version>'
services:
zookeeper:
image: zookeeper:<zookeeper_version>
hostname: <zookeeper-name>
container_name: <zookeeper-container-name>
ports:
- "8080:8080"
- "2181:2181"
- "3888:3888"
- "2888:2888"
environment:
ZOO_MY_ID: <the-id>
ZOO_SERVERS: server.<the-id>=0.0.0.0:2888:3888;2181 server.<other-ids>=<other-ips>:2888:3888;2181
ZOO_LOG4J_PROP: "INFO,ROLLINGFILE"
ZOO_4LW_COMMANDS_WHITELIST: "*"
volumes:
- ./data/zookeeper_data:/data
- ./data/zookeeper_data_log:/datalog
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
在上面的示例中,<the-id>
必须相同(在ZOO_SERVERS
和ZOO_MY_ID
环境变量中)。