Centos7 安装部署Zookeeper

官网地址: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集群就搭建完毕了。

相关推荐
Hello.Reader8 分钟前
Istio 服务网格深度解析
云原生·istio
少陽君16 分钟前
k8s之调动pod到指定节点与创建多容器pod并查找pod日志
云原生·容器·kubernetes
阿里-于怀25 分钟前
API网关
后端·云原生
Algorithm15762 小时前
关于使用K8s实现容器化作业的总时效最优调度
云原生·容器·kubernetes
ACRELKY4 小时前
分布式储能监控系统在某5MW分布式储能项目中的应用
分布式
FakeOccupational6 小时前
【p2p、分布式,区块链笔记 IPFS】go-ipfs windows系统客户端节点实现 kubo试用
分布式·区块链·p2p
Toormi7 小时前
在k8s环境中如何在本地和pod之间同步文件?
云原生·容器·kubernetes
少陽君7 小时前
k8s Service四层负载:服务端口暴露
云原生·容器·kubernetes
问道飞鱼7 小时前
【分布式技术】分布式事务深入理解
分布式·saga·2pc·fmt·3pc
龙哥·三年风水7 小时前
群控系统服务端开发模式-应用开发-业务架构逻辑开发第一轮测试
分布式·php·群控系统