使用 Docker 容器方式搭建 Zookeeper 集群

1. Zookeeper是什么

Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用主要是用来维护和监控存储的数据的状态变化,通过监控这些数据状态的变化,从而达到基于数据的集群管理

简单的说,Zookeeper =文件系统+通知机制。

2. Zookeeper集群介绍

要搭建一个高可用的 ZooKeeper 集群,我们首先需要确定好集群的规模。为了使得 ZooKeeper 集群能够顺利地选举出 Leader,必须将 ZooKeeper 集群的服务器数部署成奇数。其实任意台 ZooKeeper 服务器都能部署且能正常运行。

一个 ZooKeeper 集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信。

ZooKeeper 集群有一个特性:过半存活即可用

Zookeeper 的启动过程中 leader 选举是非常重要而且最复杂的一个环节。Zookeeper 的选举过程速度很慢,一旦出现网络隔离,Zookeeper 就要发起选举流程。Zookeeper 的选举流程通常耗时 30120 秒,期间 Zookeeper 由于没有 master,都是不可用的

3. 集群搭建

我们将介绍两种搭建方式,分别在一台机器上启动三个节点使用不同端口号完成伪分布式和在三台节点上完全搭建 Zookeeper 集群。

伪分布式

docker 容器中搭建 zookeeper 集群,可以用docker-compose.yml 文件 (本教程使用3个容器做集群)

伪分布式.png

执行 docker-compose up -d 启动容器,启动成功如下图所示:

image.png

查看 Zookeeper 节点状态:

docker exec -it zoo2 sh 进入容器 ,执行 zkServer.sh status

查看

完全分布式

利用 docker-compose 搭建 Zookeeper 集群,本教程使用3个节点,每个节点启动一个 docker 容器做集群,配置和单机节点没啥区别,注意配置

1
network_mode: "host"

image.png

4. 水平扩容

简单地讲,水平扩容就是向集群中添加更多的机器,以提高系统的服务质量。
很遗憾的是,ZooKeeper 在水平扩容扩容方面做得并不十分完美,需要进行整个集群的重启。

通常有两种重启方式,一种是集群整体重启,另外一种是逐台进行服务器的重启。

(1) 整体重启

所谓集群整体重启,就是先将整个集群停止,然后更新 ZooKeeper 的配置,然后再次启动。如果在你的系统中,ZooKeeper 并不是个非常核心的组件,并且能够允许短暂的服务停止(通常是几秒钟的时间间隔),那么不妨选择这种方式。在整体重启的过程中,所有该集群的客户端都无法连接上集群。等到集群再次启动,这些客户端就能够自动连接上——注意,整体启动前建立起的客户端会话,并不会因为此次整体重启而失效。也就是说,在整体重启期间花费的时间将不计入会话超时时间的计算中。

(2) 逐台重启

这种方式更适合绝大多数的实际场景。在这种方式中,每次仅仅重启集群中的一台机器,然后逐台对整个集群中的机器进行重启操作。这种方式可以在重启期间依然保证集群对外的正常服务。

5. 客户端使用配置

客户端使用 Zookeeper 集群,只需要修改之前的Zookeeper 集群的地址即可

1
zookeeper.host=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
文章目录
  1. 1. 1. Zookeeper是什么
  2. 2. 2. Zookeeper集群介绍
  3. 3. 3. 集群搭建
    1. 3.1. 伪分布式
    2. 3.2. 完全分布式
  4. 4. 4. 水平扩容
    1. 4.1. (1) 整体重启
    2. 4.2. (2) 逐台重启
  5. 5. 5. 客户端使用配置
|