官网地址:https://zookeeper.apache.org/
1. Zookeeper 介绍
Apache ZooKeeper是一个开源的分布式协调服务,它用于维护配置信息、命名、提供分布式同步以及提供组服务等。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,提供给用户一个简单易用的接口。
2. Zookeeper 软件包下载地址
下载地址: https://zookeeper.apache.org/releases.html
当前稳定版本下载地址:
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
下载后上传到服务器。
发布策略: Apache ZooKeeper 社区同时支持两个发布分支:稳定版和当前版。一旦发布新的次要版本,稳定版本预计将很快退役,大约半年后将宣布停用。在半年的宽限期内,预计只会为该版本发布安全和关键修复。宣布停用后,社区将不再提供任何补丁。所有
ZooKeeper 版本仍可从官方 Apache 档案中访问。
3. 系统要求
文档参考:https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_systemReq
所需软件: ZooKeeper 在 Java 1.8 或更高版本中运行(JDK 8 LTS、JDK 11 LTS、JDK 12 - 不支持 Java 9 和 10)。它作为ZooKeeper 服务器的集合运行。三个 ZooKeeper 服务器是集合的最小建议大小。
可以安装openjdk或者配置oracle的jdk
bash
# 安装openjdk
# yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
# java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
4. 部署Zookeeper单机部署
参考文档:https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_InstallingSingleMode
将下载的压缩包上传到服务器解压,进入到conf目录
zoo_sample.cfg 配置·文件模板,重新复制一份即可
bash
[root@localhost conf]# ls
configuration.xsl logback.xml zoo_sample.cfg
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
默认配置参数介绍:
文档参考:https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_provisioning
bash
[root@localhost conf]# grep -vE '^#|^$' zoo.cfg
tickTime=2000 # 客户端与服务器之间维持心跳的时间间隔,单位是毫秒
initLimit=10 # 发送的最多心跳个数,如果在 initLimit * tickTime 的时间内 Follower 未能与 Leader 建立连接,那么 Follower 将认为自己启动失败
syncLimit=5 # 如果Leader节点在 5 * tickTime内没有收到来自某个 Follower 节点的心跳响应,Leader 节点会认为该 Follower 节点不可达或已宕机。Leader 节点会尝试重新连接该 Follower 节点,并可能在多次尝试失败后从集群中暂时移除该 Follower 节点。
dataDir=/tmp/zookeeper # 指定了 ZooKeeper 存储其数据文件的位置包含了 ZooKeeper 的内存数据库的快照(snapshots)和事务日志(transaction logs)。
clientPort=2181 # 监听客户端连接的端口;
数据目录真实环境下不要放在/tmp/目录下,以防系统重启后数据丢失
启动zookeeper
bash
[root@localhost conf]# ../bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
zkServer.sh 参数介绍:
bash
[root@localhost conf]# ../bin/zkServer.sh --help
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
Usage: ../bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}
- --config <conf-dir>: 如何配置文件不在默认config目录下可以指定
- start :启动 ZooKeeper
- start-foreground : 在前台启动Zookeeper
- stop:停止 ZooKeeper 服务器
- version : 打印版本
- restart:重启zookeeper
- status: 检查zookeeper状态
- print-cmd:打印启动 ZooKeeper 服务器时使用的完整命令。这个命令对于调试配置问题很有用,因为它显示了实际执行的命令。
查看端口监听情况:
bash
# 通过进程号查看端口占用情况
[root@localhost conf]# netstat -tnlp|grep 1532
tcp6 0 0 :::8080 :::* LISTEN 1532/java
tcp6 0 0 :::38776 :::* LISTEN 1532/java
tcp6 0 0 :::2181 :::* LISTEN 1532/java
- 2181 :客户端连接端口
- 8080:嵌入式的 Jetty 服务器,提供了一个 HTTP 接口来管理 ZooKeeper
- 34097:为了支持JMX(Java Management Extensions)调用。JMX是一个为Java应用程序提供管理远程监控和管理功能的标准。
从 3.5 版本开始,ZooKeeper 引入了一个新的特性,即 AdminServer,它是一个嵌入式的 Jetty 服务器,提供了一个 HTTP 接口来管理 ZooKeeper。这个 AdminServer 默认监听在 8080 端口上,可以通过 URL "/commands/[command name]" 来执行命令,响应以 JSON 格式返回。
修改Jetty 端口: admin.serverPort=8888
如果需要关闭Jetty 服务:admin.enableServer=false
如果想关闭 随机端口,可以在启动脚本里面添加export JMXDISABLE=true
参数[root@localhost conf]# grep "export JMXDISABLE=true" .../bin/zkServer.sh
export JMXDISABLE=true
zookeeper单机模式到此就配置完成了。
5. 部署Zookeeper集群
集群最小个数为3台,例如,如果有四台机器,ZooKeeper 只能处理一台机器的故障;如果两台机器发生故障,剩下的两台机器就不构成多数。但是,如果有五台机器,ZooKeeper 可以处理两台机器的故障,强烈建议您使用奇数台服务器。
关于集群的设置的建议(集群(多服务器)设置):https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_zkMulitServerSetup
server.1 | 192.168.0.219 |
server.2 | 192.168.0.220 |
server.3 | 192.168.0.221 |
所有Zookeeper 集群配置
bash
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.1=192.168.0.219:2888:3888
server.2=192.168.0.220:2888:3888
server.3=192.168.0.221:2888:3888
- 2888 : 用于follower和leader交换消息的端口
- 3888:是选举leader时使用的端口。
记得关闭防火墙或者开放2888,3888,2181端口,selinux
数据目录真实环境下不要放在/tmp/目录下,以防系统重启后数据丢失
创建myid文件文件
在每台服务器上的数据目录下,创建一个myid文件,文件内容为你的server.X配置中的X值。
bash
[root@zook-01 ~]# echo "1" > /tmp/zookeeper/myid
[root@zook-02 ~]# echo "2" > /tmp/zookeeper/myid
[root@zook-03 ~]# echo "3" > /tmp/zookeeper/myid
启动zookeeper
最好是一台一台启动,优先启动的成为leader,follower心跳响应leader之后,建立连接,集群就正常了。
leader:
bash
[root@zook-01 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
follower:
bash
[root@zook-02 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
follower:
bash
[root@zook-01 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
到这里zookeeper集群就搭建完毕了。