Zookeeper踩坑记

在使用Zookeeper 3.4.10搭建新集群时遇到连接问题,配置过程中发现由于非静态IP导致节点间无法正常通信。解决办法是将Zookeeper配置中的host改为0.0.0.0,以便接受所有网络接口的连接请求。

还记得上一次配置Zookeeper是半年以前的事了,这半年一直没有改动Zookeeper的配置文件,直到实习回校,自己的集群没有,重新下载搭一个Zookeeper集群,使用的最新的Zookeeper 3.4.10,结果立马踩到了坑里面,搞了一两个小时才弄好。

一、配置Zookeeper

我采用的是常见的配置。

数据目录:

/home/lee/data/zookeeper
分别配置了myid为

1,2,3

配置Zookeeper的配置文件

tickTime=2000
dataDir=/home/dengyiping/data/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=hadoop-1:2888:3888
server.2=hadoop-2:2888:3888
server.3=hadoop-3:2888:3888

然后start结果显示,怎么都连不上其他的两个节点。

二、解决办法

将当前节点的host改成0.0.0.0

tickTime=2000
dataDir=/home/dengyiping/data/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=0.0.0.0:2888:3888
server.2=hadoop-2:2888:3888
server.3=hadoop-3:2888:3888

三、分析原因

有人是这么说的

How have defined the ip of the local server in each node? If you have given the public ip, then the listener would have failed to connect to the port. You must specify 0.0.0.0 for the current node.

原来是非静态IP惹的祸。我的新集群是非静态IP的。
先看到我的hosts文件.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.36.8.138 hadoop-1
10.36.8.139 hadoop-2
10.36.8.140 hadoop-3

由于我并没有设置静态IP,因此 当寻找 当前的 域名时,找到的是 10.36.8.138 这个地址。

并不是本机地址

改成如下解决问题

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
0.0.0.0  hadoop-2

10.36.8.138 hadoop-1
10.36.8.140 hadoop-3
~                     

注意:如果设置的是静态IP则不会产生这个问题,因为查找域名时,会直接链接到本地网卡。

<think>嗯,用户的问题很明确,就是要知道ZooKeeper客户端的具体启动方法。从引用内容来看,用户已经接触过一些基础操作(比如命令行修改客户端前缀),但可能对完整流程还不熟悉。 用户提供的三个引用其实挺有用的:引用[1]展示了命令行启动后的交互操作,引用[2]提到Windows下启动缓慢问题和连接字符串配置,引用[3]则解释了临时节点的概念。不过用户当前只需要启动方法,这些补充知识可以先收纳起来备用。 考虑到用户可能在不同环境操作,我决定分三部分说明: 1. 基础命令行启动是最通用的方式,引用[1]的示例正好用上 2. Java API启动对开发者更实用,引用[2]的Curator框架配置可以直接借鉴 3. 图形界面工具作为补充选项,虽然引用没提但实际很常用 特别要注意引用[2]里提到的两个技术细节:一是建议用主机名代替IP避免解析问题,二是超时设置对稳定性的影响——这些在实际操作中很容易,必须包含在回答里。另外临时节点(引用[3])的特性虽然不直接影响启动,但在后续会话管理时会涉及,所以放在注意事项里提示。 用户上次问过客户端前缀修改的问题,这次应该是有实操需求,可能正在搭建环境。回答时要突出"开箱即用"的步骤,技术细节另作说明避免干扰主流程。最后的相关问题设置成阶梯式的,从启动延伸到配置优化和常见问题排查,这样用户后续探索会更顺畅。 </think>以下是ZooKeeper客户端的三种常用启动方法及操作步骤: --- ### 一、命令行启动(基础方式) 1. **进入ZooKeeper安装目录** ```bash cd /path/to/zookeeper/bin ``` 2. **启动客户端连接本地服务** ```bash ./zkCli.sh # 默认连接 localhost:2181 ``` **连接远程服务**(如zookeeper101): ```bash ./zkCli.sh -server zookeeper101:2181 ``` 连接成功后提示符变为:`[zk: zookeeper101:2181(CONNECTED) 0]` [^1] --- ### 二、Java API启动(开发者常用) ```java // 使用Curator框架(推荐) CuratorFramework client = CuratorFrameworkFactory.builder() .connectString("zookeeper101:2181") // 明确主机名避免解析问题 [^2] .retryPolicy(new RetryNTimes(3, 1000)) // 重试策略 .connectionTimeoutMs(2000) // 连接超时设置 .build(); client.start(); // 启动客户端 ``` > **关键参数说明**: > - `connectString`:服务端地址(建议用主机名而非IP) > - `connectionTimeoutMs`:解决Windows启动缓慢问题 [^2] --- ### 三、图形化工具启动 1. **ZooInspector**(官方工具) ```bash java -jar zookeeper-dev-ZooInspector.jar ``` 2. **连接配置**: ```txt Host: zookeeper101 Port: 2181 ``` --- ### ️ 注意事项 1. **临时节点特性**: 客户端创建的临时节点(Ephemeral Node)会在会话结束时自动删除,`ephemeralOwner`字段录绑定的session ID [^3] 2. **连接稳定性**: Windows环境下建议配置`connectionTimeoutMs`参数避免启动卡顿 [^2] 3. **服务端状态**: 启动客户端前需确保ZooKeeper服务已运行(`zkServer.sh status`检查) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值