Centos7 安装部署Zookeeper

发布于:2024-10-17 ⋅ 阅读:(14) ⋅ 点赞:(0)

官网地址: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

# 安装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 配置·文件模板,重新复制一份即可

[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

[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

[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 参数介绍:

[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 服务器时使用的完整命令。这个命令对于调试配置问题很有用,因为它显示了实际执行的命令。

查看端口监听情况:

# 通过进程号查看端口占用情况
[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 集群配置

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值。

[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:

[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:

[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:

[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集群就搭建完毕了。