Zookeeper实战之单机集群模式

本文介绍如何在单台机器上通过三个实例搭建Zookeeper集群,并实现客户端连接及数据节点的创建与读取。涉及配置文件修改、端口区分、myid文件创建等关键步骤。

Zookeeper的单机模式的安装及应用,但是Zookeeper是为了解决分布式应用场景的,所以通常都会运行在集群模式下。由于手头机器不足,所以打算在一台机器上部署三个Zookeeper服务来组成一个Zookeeper集群。这里解压Zookeeper的安装包到/opt目录下,这里用三个目录来代表三个Zookeeper实例,分别是/opt/zookeeper1,/opt/zookeeper2和/opt/zookeeper3.

1. 首先编辑每个Zookeeper目录下的conf/zoo.cfg文件。三个配置配置文件的内容分别如下


  1. $ cat /opt/zookeeper1/conf/zoo.cfg  
  2. tickTime=2000  
  3. dataDir=/opt/zookeeper1/data  
  4. clientPort=2181  
  5. initLimit=10  
  6. syncLimit=5  
  7. server.1=127.0.0.1:2881:3881  
  8. server.2=127.0.0.1:2882:3882  
  9. server.3=127.0.0.1:2883:3883  

---------------------------------------------
  1. $ cat /opt/zookeeper2/conf/zoo.cfg  
  2. tickTime=2000  
  3. dataDir=/opt/zookeeper2/data  
  4. clientPort=2182  
  5. initLimit=10  
  6. syncLimit=5  
  7. server.1=127.0.0.1:2881:3881  
  8. server.2=127.0.0.1:2882:3882  
  9. server.3=127.0.0.1:2883:3883  

---------------------------------------------
  1. $ cat /opt/zookeeper3/conf/zoo.cfg  
  2. tickTime=2000  
  3. dataDir=/opt/zookeeper3/data  
  4. clientPort=2183  
  5. initLimit=10  
  6. syncLimit=5  
  7. server.1=127.0.0.1:2881:3881  
  8. server.2=127.0.0.1:2882:3882  
  9. server.3=127.0.0.1:2883:3883  

其中有几点需要注意
* dataDir: 三个Zookeeper实例的dataDir目录要区别开,这里分别指定到各个Zookeeper实例目录下的data目录。
* clientPort: 定义Zookeeper客户端连接Zookeeper服务端时使用的端口,这里因为是在一台机器上做的集群,所以三个实例的端口要区分开。
* server.: 定义Zookeeper集群的各个实例的的ip和端口,这里因为是在一台机器上做的集群,所以IP都定义的是127.0.0.1,但是后面的端口要区分开。

2. 创建data目录和实例id文件


  1. mkdir /opt/zookeeper1/data  
  2. mkdir /opt/zookeeper2/data  
  3. mkdir /opt/zookeeper3/data  
  4. echo 1 > /opt/zookeeper1/data/myid  
  5. echo 2 > /opt/zookeeper2/data/myid  
  6. echo 3 > /opt/zookeeper3/data/myid  

这里要注意需要在每个Zookeeper的dataDir目录下创建myid文件,内容是记录各个Zookeeper的实例ID。

3. 启动Zookeeper服务
分别进入各个Zookeeper的bin目录,然后运行“./zkServer.sh start”来启动一个Zookeeper服务。

4. 客户端连接
随便进入一个Zookeeper的bin目录,然后运行下面的命令来分别连接Zookeeper服务。


  1. ./zkCli.sh -server 127.0.0.1:2181  
  2. ./zkCli.sh -server 127.0.0.1:2182  
  3. ./zkCli.sh -server 127.0.0.1:2183  
在其中的一个client上创建一个znode节点

  1. create /mykey myvalue  
然后在别的client上查看新创建zonde节点

  1. get /mykey  

5. 查看Zookeeper状态
启动Zookeeper之后,由于Zookeeper自己会有一套leader的选举算法,所以此时如果想知道那个Zookeeper是leader可以在各个Zookeeper的bin目录运行“./zkServer.sh status”命令来查看。

如果是Leader


  1. $ ./zkServer.sh status  
  2. JMX enabled by default  
  3. Using config: /opt/zookeeper1/bin/../conf/zoo.cfg  
  4. Mode: leader  

如果不是Leader


  1. $ ./zkServer.sh status  
  2. JMX enabled by default  
  3. Using config: /opt/zookeeper3/bin/../conf/zoo.cfg  
  4. Mode: follower  
此时可以把leader的那个节点停了,然后再看查看其它两个Zookeeper实例,此时剩下的两个Zookeeper实例就会再选举出一个leader。
<think>好的,用户想了解ZooKeeper的实际应用案例和学习如何使用它进行分布式协调。首先,我需要整理ZooKeeper的基础知识,比如它的数据模型和核心功能。用户可能已经知道ZooKeeper是分布式协调服务,但需要具体的使用场景和操作步骤。 接下来,我得考虑实际应用案例。根据提供的引用内容,ZooKeeper在配置管理、命名服务、分布式锁、服务注册与发现等方面有广泛应用。比如Dubbo使用ZooKeeper作为注册中心,这点在引用2和3中提到过,需要详细说明。 然后,用户可能需要一个实战教程,所以应该提供具体的操作步骤,比如如何安装ZooKeeper,如何通过客户端操作节点,以及如何实现分布式锁或配置管理。需要确保示例代码正确,并且符合用户提到的LaTeX格式要求。 另外,用户提到要生成相关问题,我得准备几个相关问题,比如ZooKeeper的选举机制、与Etcd的区别、Watch机制等,这些问题能帮助用户进一步深入学习。 还要注意引用文献的正确标注,比如在提到Dubbo时引用[^2]和[^3],在介绍ZooKeeper基础时引用[^1]。需要检查引用是否准确,确保每个引用标识对应正确的内容。 最后,确保回答结构清晰,分步骤讲解,并且语言通俗易懂。可能用户是开发者或系统架构师,需要实用信息,所以示例代码和具体命令会很有帮助。同时,要避免使用过于专业的术语,或在必要时进行解释,确保用户能跟上教程的步骤。</think>### ZooKeeper实战教程:分布式协调使用指南 #### 一、ZooKeeper核心功能与数据模型 1. **数据模型** ZooKeeper采用树形结构(ZNode)存储数据,每个节点最大存储1MB数据,支持临时节点(Ephemeral)和顺序节点(Sequential)特性。例如: $$/services/dubbo/com.example.UserService/providers/192.168.1.1:20880$$ 这种结构天然适合服务注册场景[^2]。 2. **Watch机制** 客户端可对ZNode设置监听,节点变化时触发通知,用于实现动态配置更新和服务状态同步。 --- #### 二、典型应用场景与实战案例 ##### 1. 分布式配置管理 **实现步骤**: 1. 创建配置节点:`create /app_config "{'timeout':5000}"` 2. 客户端监听节点:`get /app_config watch` 3. 更新配置:`set /app_config "{'timeout':8000}"` 4. 所有监听客户端自动收到变更通知[^1]。 ##### 2. 服务注册与发现(Dubbo集成) ```java // Dubbo Provider配置 <dubbo:registry address="zookeeper://127.0.0.1:2181"/> ``` 注册中心自动维护服务提供者列表,消费者通过订阅实时获取可用服务地址。 ##### 3. 分布式锁实现 **基于临时顺序节点**: 1. 所有客户端在`/locks/resource`下创建临时顺序节点 2. 判断自己是否是最小编号节点 3. 获取锁后执行业务逻辑,完成后删除节点 4. 后续节点通过Watch机制监听到释放事件 --- #### 三、开发环境搭建与基础操作 1. **单机模式启动** ```bash # 下载并解压 wget https://downloads.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz # 配置zoo.cfg tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 # 启动服务端 bin/zkServer.sh start ``` 2. **客户端操作示例** ```bash # 连接服务端 bin/zkCli.sh -server 127.0.0.1:2181 # 创建节点 create /test "data" # 查看节点 get /test # 设置监听 get /test watch ``` --- #### 四、生产环境最佳实践 1. **集群部署** 至少3节点集群配置: ```properties server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 ``` 通过ZAB协议保证数据一致性[^1]。 2. **性能调优** - 设置合理sessionTimeout(建议6-30秒) - 使用`netty`作为NIO实现 - 开启snapshot压缩
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值