zookeeper集群部署
一、简介:
ZooKeeper是一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现。ZooKeeper为分布式应用提供一致性服务,提供的功能包括:分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)、分布式锁(Distributed Lock)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
二、ZooKeeper集群角色说明:
| 角色 | 说明 |
| 领导者(Leader) | 为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。 |
| 跟随者(Follower) | 为客户端提供读服务,如果是写服务则转发给Leader。在选举过程中参与投票。 |
| 观察者(Observer) | 为客户端提供读服务器,如果是写服务则转发给Leader。不参与选举过程中的投票,也不参与“过半写成功”策略。在不影响写性能的情况下提升集群的读性能。此角色于zookeeper3.3系列新增的角色。 |
三、环境准备:
ZooKeeper在提供分布式锁等服务的时候需要过半数的节点可用。另外高可用的诉求来说节点的个数必须>1,所以ZooKeeper集群需要是>1的奇数节点。例如3、5、7等等,本教程中以三台服务器作为集群。
zookeeper1:centos7(已安装好jdk环境)
zookeeper2:centos7(已安装好jdk环境)
zookeeper3:centos7(已安装好jdk环境)
zookeeper版本:zookeeper-3.4.14.tar.gz
部署:(三台机器都执行)
1、首先将安装包解压,解压后,移动到/usr/local目录中,如图:

2、进入解压后目录,创建数据文件夹data和日志文件夹logs,如图:

3、配置环境变量,编辑配置文件vim /etc/profile,如图:

4、进入配置文件目录conf,修改配置文件名称,执行命令如下:
mv zoo_sample.cfg zoo.cfg
5、编辑配置文件,修改数据文件位置,添加日志文件位置,添加服务节点,如图:

6、配置节点标识:(用于集群之间发现彼此)
zookeeper1: echo “1” > /usr/local/zookeeper-3.4.14/data/myid
zookeeper2: echo “2” > /usr/local/zookeeper-3.4.14/data/myid
zookeeper3: echo “3” > /usr/local/zookeeper-3.4.14/data/myid
7、配置防火墙,开通相应端口,三台机器都执行,命令如下:
firewall-cmd –zone=public –add-port=2181/tcp –permanent
firewall-cmd –zone=public –add-port=2888/tcp –permanent
firewall-cmd –zone=public –add-port=3888/tcp –permanent
firewall-cmd –reload
8、启动zookeeper,进入到bin目录,执行命令如下:
sh zkServer.sh start
9、查看集群节点状态:
sh zkServer.sh status
配置参数说明:
| 配置项 | 名称 | 说明 |
| tickTime | CS通信心跳间隔 | 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每间隔 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。 |
| initLimit | LF初始通信时限 | 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数 |
| syncLimit | LF同步通信时限 | 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数 |
| dataDir | 数据文件目录 | Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里 |
| dataLogDir | 日志文件目录 | Zookeeper保存日志文件的目录 |
| clientPort | 客户端连接端口 | 客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求 |
| server.N | 服务器名称与地址 | 从N开始依次为:服务编号、服务地址、LF通信端口、选举端口;例如:server.1=192.168.88.11:2888:3888 |


