Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建


本篇的内容主要包含以下几点:

  • Zookeeper 运行模式
  • Zookeeper 搭建

一、Zookeeper 运行模式

Zookeeper 有两种运行模式,单点模式集群模式

  • 单点模式(standalone mode)- Zookeeper 只运行在单个服务器上,常用于开发测试阶段,这种模式比较简单,但是不能保证Zookeeper服务的
    高可用性
    和恢复性
  • 集群模式(replicated mode)- 英文原文这种模式叫做“复制模式”;这个模式下,Zookeeper运行于一个集群上,适合生产环境。
    同一个集群下的server节点被称为
    quorum
    ,翻译过来就是“一个正式会议的法定人数”,如果你看完下一章介绍的ZAB协议的两种模式之后,应该会觉得这个比喻实际上很形象。

NOTE: 在集群模式下,最少需要三个server节点。并且官方推荐你使用奇数数量的server节点来组成集群。至于为什么,和Zookeeper的读写策略和一致性协议有关,在后面的章节会介绍。

二、Zookeeper 搭建

单点模式

使用过zookeeper的同学们应该知道,启一个zookeeper server 非常简单,如果是单点模式,只需要以下步骤:

  1. 去官网下载对应源码压缩包,然后上传到服务器
  2. 解压,tar -zxvf zookeeper-***.tar.gz
  3. 进入到源码目录下的conf目录,根据zoo_sample.cfg,创建一个配置文件zoo.cfg,启动时默认就是按照zoo.cfg这个配置文件的信息来启动
# Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,
# 也就是每个 tickTime 时间就会发送一个心跳。
tickTime=2000 
# Zookeeper 保存数据的目录
dataDir=/data/zk/data 
# Zookeeper 保存日志文件的目录
dataLogDir=/data/zk/log
# 客户端连接Zookeeper 服务器的端口
# Zookeeper 会监听这个端口,接受客户端的访问请求
clientPort=2181
复制代码
  1. 进入到源码目录下的bin目录,执行zkServer.sh脚本文件即可
# 启动
zkServer.sh start
# 关闭
zkServer.sh stop
复制代码
  1. 查看当前zookeeper 状态
[root@localhost bin]# sh zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: standalone
复制代码

Mode:standalone可以看到现在的节点启动类型。

集群搭建

集群模式的搭建和单点模式的差别不大,如果按照官方的最低要求,就是三台服务器,在这三台服务器上面分别执行一下上述单点模式的步骤,同一集群下的每台服务器的配置文件类似。

下面的描述会提到followerleader节点,这个属于集群中的节点类型,具体定义后面章节会详述。

除了上述步骤中,还需要做一下步骤

  1. 每台机器上 conf/zoo.cfg 配置文件的参数设置,需要添加集群的信息,参考如下
tickTime=2000
dataDir=/data/zk/data 
dataLogDir=/data/zk/log
clientPort=2181
# 集群相关配置
# 允许 follower 连接并同步到 leader 的初始化连接时间 
# 比如这里就是允许 5个 tick 的时间
initLimit=5
# leader 与 follower 之间发送消息,请求和应答时间长度。
# 如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。
# 比如这里就是允许 2个 tick 的时间
syncLimit=2
# 集群信息
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
复制代码

server.id=host:port1:port2标识了不同Zookeeper服务器的信息,其中 id 是一个数字,表示这个是服务器的编号;host是这个服务器的 ip 地址;至于port1port2参照官网的描述较为准确,网上有些文章都把端口的含义给弄混了。

Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.

最后,让我们来看看在server 名字后面的两个端口号:"2888"和"3888",Zookeeper 节点使用前面那个端口(port1)来与其他节点建立连接。这个连接是必须建立的,因为不同节点之间需要通信。打比方说,follower节点需要“赞成”leader节点的更新命令。更确切一点说,这个节点是用于follower节点和leader节点之间的通信。当一个leader节点出现了,follower节点会在port1上与leader节点建立一个TCP连接。因为默认的leader选举也是用TCP,我们现在就需要另一个端口来用于leader选举,这就是port2的作用。

简单来说,port1通信端口,port2选举端口。

  1. 在每个Zookeeper服务器对应的dataDir目录下需要创建一个名为myid的文件,这个文件中仅含有一行的内容,指定的是自身的 id 值,就是server.id=host:port1:port2中的id值。这个 id 值必须是集群中唯一的
  2. 在确认每台服务器上的zoo.cfgmyid文件修改创建之后,在三个节点上分别执行命令zkServer.sh start,启动zookeeper server。
  3. 在三个节点上分别执行zkServer.sh status查看当前节点的状态。
  • 节点1

  • 节点2

  • 节点3

  1. 可以看到,目前节点2是leader节点,节点1和节点3是follower节点。

更详细的集群搭建可以参考这篇:ZooKeeper安装配置

也可以参考官网相关文章:ZooKeeper Getting Started Guide

总结

本章介绍了Zookeeper的两种运行模式,和两种模式的搭建。

下一章中,我们会介绍Zookeeper原理篇的进阶部分,有关于Zookeeper集群的读写机制、ZAB协议的知识解析等比较深入的知识点。


作者:Richard_Yi

链接:https://juejin.cn/post/6844903843751280647

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
80 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
71 0
|
1月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
140 1
|
2月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
298 0
|
2月前
|
网络协议 中间件 数据库
Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)
Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)
85 0
|
2月前
|
存储 Dubbo 网络协议
Zookeeper学习系列【一】 教会你Zookeeper的一些基础概念
Zookeeper学习系列【一】 教会你Zookeeper的一些基础概念
39 0
|
3月前
|
Java
搭建Zookeeper集群的搭建
搭建Zookeeper集群的搭建
27 1
|
3月前
|
安全 Java API
Zookeeper(持续更新) VIP-02 Zookeeper客户端使用与集群特性
2,/usr/local/data/zookeeper-3,/usr/local/data/zookeeper-4,在每个目录中创建文件。创建四个文件夹/usr/local/data/zookeeper-1,/usr/local/data/zookeeper-Follower:只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点。己对外提供服务的起始状态。E: 角色, 默认是 participant,即参与过半机制的角色,选举,事务请求过半提交,还有一个是。
|
3月前
|
缓存 Java API
Zookeeper(持续更新) VIP-02 Zookeeper客户端使用与集群特性
Curator 是一套由netflix 公司开源的,Java 语言编程的 ZooKeeper 客户端框架,Curator项目是现在ZooKeeper 客户端中使用最多,对ZooKeeper 版本支持最好的第三方客户端,并推荐使用,Curator 把我们平时常用的很多 ZooKeeper 服务开发功能做了封装,例如 Leader 选举、分布式计数器、分布式锁。这就减少了技术人员在使用 ZooKeeper 时的大部分底层细节开发工作。
|
4月前
|
存储 Java 网络安全
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
48 0