ZooKeeper 简介
ZooKeeper 是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。ZooKeeper 的应用场景包括但不限于统一命名服务、集群管理 和 分布式锁 等。其架构图大致如下:
ZooKeeper 集群由一组服务器组成,这些节点当中有一个角色为 Leader,其他节点的角色为 Follower。当 Leader 节点发生故障而失效时,Follower 节点会快速相应,重新选出一个 Leader 节点。
ZooKeeper 的安装模式
ZooKeeper 有三种安装模式,分别是 单机模式、伪分布式模式 和 集群模式。
单机模式是指部署一个 ZooKeeper 进程,客户端直接与 ZooKeeper 进程进行通信;伪分布式模式是在单台计算机上运行多个 ZooKeeper 实例组成一个集群;集群模式则是在多台计算机上部署 ZooKeeper。
在 ZooKeeper 集群中,会有一台机器作为 Leader 服务器负责管理和协调其他集群服务器。服务器的数量通常是单数。
ZooKeeper 集群的部署
这里使用三台虚拟机来部署 ZooKeeper 集群,三台虚拟机的服务器均为 CentOS,且主机名分别为 centos01、centos02 和 centos03。
(1)上传 ZooKeeper 安装文件
首先任选一台服务器来安装和配置 ZooKeeper,这里我选择在 centos01 服务器上进行完成。下载 ZooKeeper 的 tar 包,上传到 centos01 的服务器上,这里我上传到了 /opt/software/ 目录下,然后对其进行解压,命令如下:
代码语言:javascript复制# tar -zxf zookeeper-3.4.10.tar.gz -C /opt/modules/
(2)配置 ZooKeeper 的配置文件
首先,在 ZooKeeper 的安装目录下创建一个 dataDir 目录,其用于存放 ZooKeeper 相关数据。
然后,在 ZooKeeper 安装目录下的 conf 文件夹中新建配置文件 zoo.cfg 文件,内容如下:
代码语言:javascript复制tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/modules/zookeeper-3.4.10/dataDir
clientPort=2181
server.1=centos01:2888:3888
server.2=centos02:2888:3888
server.3=centos03:2888:3888
下面对配置项进行简单的说明:
- tickTime:表示每次心跳间隔的时间;
- initLimit:集群中的 Follower 服务器初始化连接 Leader 服务器时能等待的最大心跳数,如果在指定的心跳之后 Follower 仍然没有收到 Leader 服务器的返回信息,则连接失败;initLimit * tickTime 就是连接超时的时长;
- server.id = host:port1:port2:该配置项用来标识不同的 ZooKeeper 服务器,id 必须在整个集群中是唯一的,且大小在 1 到 255 之间;host 是服务器的名称或 IP 地址,port1 是 Leader 端口,该服务器作为 Leader 时供 Follower 连接的端口,port2 是选举端口,选举 Leader 服务器时供其他 Follower 连接的端口
- dataDir:存储数据的目录
- clientPort:客户端连接 ZooKeeper 服务器的端口,ZooKeeper 会监听这个端口,接收客户端的请求
最后,在 dataDir 目录下创建一个 myid 的文件,将服务器的 id 写入到该文件中。
(3)复制 ZooKeeper 安装信息到其他节点
将 centos01 的 ZooKeeper 安装目录复制到 centos01 和 centos03 两个服务器上。命令如下:
代码语言:javascript复制# scp -r /opt/modules/zookeeper-3.4.10/ hadoop@centos02:/opt/modules/
# scp -r /opt/modules/zookeeper-3.4.10/ hadoop@centos03:/opt/modules/
(4)修改其他节点配置
需要修改 centos02 和 centos03 中 myid 的值,需要与其 server.id 的 id 进行对应。
(5)启动 ZooKeeper
分别在每台 ZooKeeper 上启动 ZooKeeper,命令如下:
代码语言:javascript复制# ./bin/zkServer.sh start
(6)查看启动状态
ZooKeeper 启动后会自动的选举 Leader,查看服务状态时,可以查看到不同服务器的角色,查看如下:
以下是 Leader 角色的输出状态:
代码语言:javascript复制$ /opt/modules/zookeeper-3.4.10/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/modules/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
以下是 Follower 角色的输出状态:
代码语言:javascript复制$ /opt/modules/zookeeper-3.4.10/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/modules/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
(7)客户端连接服务器
在 centos01 节点上,连接 ZooKeeper 服务器,命令如下:
代码语言:javascript复制$ ./bin/zkCli.sh -server centos01:2181
总结
本篇内容简单的整理了搭建 ZooKeeper 集群的步骤,整个步骤比较固定。当 ZooKeeper 服务器过多时,可以通过脚本来进行批量的启动,这里就不再赘述。本文并没有整理 ZooKeeper 的应用场景,也没有整理 ZooKeeper 选举 Leader 的算法,以后会逐步的补上。希望本文对大家有所帮助。