ZooKeeper集群环境部署

1. ZooKeeper安装部署

1.1 系统要求

1.1.1 支持的平台

ZooKeeper 由多个组件组成。一些组件得到广泛支持,而另一些组件仅在较小的一组平台上得到支持。

  • 客户端是 Java 客户端库,由应用程序用于连接到 ZooKeeper 集群。

  • 服务器是在 ZooKeeper 集群节点上运行的 Java 服务器。

  • 本机客户端是用 C 实现的客户端,类似于 Java 客户端,由应用程序用于连接到 ZooKeeper 集群。

  • Contrib 指多个可选的附加组件。

下表描述了在不同操作系统平台上运行每个组件的承诺支持级别。

1.1.2 支持矩阵

操作系统 客户端 服务器 本机客户端 Contrib
GNU/Linux 开发和生产 开发和生产 开发和生产 开发和生产
Solaris 开发和生产 开发和生产 不支持 不支持
FreeBSD 开发和生产 开发和生产 不支持 不支持
Windows 开发和生产 开发和生产 不支持 不支持
Mac OS X 仅限开发 仅限开发 不支持 不支持
  • 对于矩阵中未明确提及为受支持的任何操作系统,组件可能可以工作,也可能无法工作。ZooKeeper 社区将修复针对其他平台报告的明显错误,但不会提供全面支持。

1.1.3 必需的软件

属性 描述或推荐配置
运行环境 Java 1.8 或更高版本(支持 JDK 8 LTS、JDK 11 LTS、JDK 12)
部署方式 作为 ZooKeeper 服务器的集群运行
最小推荐集群大小 三个 ZooKeeper 服务器
部署建议 建议在不同的机器上运行不同的 ZooKeeper 服务器
Yahoo! 部署示例 专用的 RHEL 机箱,配备以下配置:
处理器 双核处理器
内存 2GB RAM
存储 80GB IDE 硬盘
支持的 Java 版本 不支持 Java 9 和 10

1.2 部署ZooKeeper集群

主机 服务/程序 备注
191.168.110.21(4C/4G) JDK、ZooKeeper ZK 集群
191.168.110.32(4C/4G) JDK、ZooKeeper -
191.168.110.33(4C/4G) JDK、ZooKeeper -

1.1.1 配置HOSTS解析

复制代码
# 三台机器均操作
[root@zk-server-all ~]# cat >> /etc/hosts <<EOF
191.168.110.31 zk-server-01
191.168.110.32 zk-server-02
191.168.110.33 zk-server-03
EOF

1.1.2 安装JDK环境

复制代码
# 三台机器均要安装,只在zk-server-01上操作
# ZK 依赖于 JDK,所以部署 ZK 之前确保 JDK 环境正常。
​
[root@zk-server-01 ~]# wget -c https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
[root@zk-server-01 ~]# rsync -avz jdk-8u202-linux-x64.tar.gz zk-server-02:/root/
[root@zk-server-01 ~]# rsync -avz jdk-8u202-linux-x64.tar.gz zk-server-03:/root/

1.1.3 解压

复制代码
[root@zk-server-all ~]# mkdir -p /home/data
[root@zk-server-all ~]# tar xzf jdk-8u202-linux-x64.tar.gz -C /home/data/
[root@zk-server-all ~]# mv /home/data/jdk1.8.0_202/ /home/data/jdk
[root@zk-server-all ~]# ln -s /home/data/jdk/bin/* /usr/bin/
[root@zk-server-all ~]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

1.1.4 下载稳定版本的ZK

下载地址:https://zookeeper.net.cn/releases.html

1.1.5 安装

复制代码
[root@zk-server-all ~]# wget -c https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
[root@zk-server-all ~]# tar xzf apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local/
[root@zk-server-all ~]# mv /usr/local/apache-zookeeper-3.8.4-bin/ /usr/local/zookeeper
[root@zk-server-all ~]# ll /usr/local/zookeeper/
total 36
drwxr-xr-x 2 1000 1000  4096 Feb 13 06:15 bin
drwxr-xr-x 2 1000 1000    72 Feb 13 06:15 conf
drwxr-xr-x 5 1000 1000  4096 Feb 13 06:16 docs
drwxr-xr-x 2 root root  4096 Aug  7 14:37 lib
-rw-r--r-- 1 1000 1000 11358 Feb 13 06:15 LICENSE.txt
-rw-r--r-- 1 1000 1000  2084 Feb 13 06:15 NOTICE.txt
-rw-r--r-- 1 1000 1000  2335 Feb 13 06:15 README.md
-rw-r--r-- 1 1000 1000  3570 Feb 13 06:15 README_packaging.md

1.1.6 修改配置

复制代码
[root@zk-server-all ~]# cd /usr/local/zookeeper/conf/
[root@zk-server-all conf]# mv zoo_sample.cfg zoo.cfg
[root@zk-server-all conf]# cd ..
​
# 首先 zookeeper 目录下创建 zookeeper 数据和日志的存放目录,并且添加文件读写权限
[root@zk-server-all zookeeper]# mkdir {data,logs}
[root@zk-server-all zookeeper]# cd conf/
[root@zk-server-all conf]# vim zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= zk-server-01:2888:3888
server.2= zk-server-02:2888:3888
server.3= zk-server-03:2888:3888

!IMPORTANT

  • tickTime=2000: 这个参数设置了基本的时间单元(tick),它是 Zookeeper 会话超时和选举超时等操作的时间基础。这里设置为 2000 毫秒。

  • initLimit=10: 这个参数定义了 Zookeeper 服务在初始化时,允许的最小服务器连接数(服务器间)。这个值应该是 2 * tickTime 的倍数,这里设置为 10 个 tickTime。

  • syncLimit=5: 这个参数定义了 Zookeeper 服务在进行数据同步时,允许的最大服务器连接数(服务器间)。这个值应该是 2 * tickTime 的倍数,这里设置为 5 个 tickTime。

  • dataDir=/usr/local/zookeeper/data: 这个参数指定了 Zookeeper 存储数据的目录。所有的数据和快照都会存储在这个目录下。

  • dataLogDir=/usr/local/zookeeper/logs: 这个参数指定了 Zookeeper 存储事务日志的目录。事务日志用于确保数据的一致性。

  • clientPort=2181: 这个参数定义了 Zookeeper 服务监听客户端连接的端口号。客户端通过这个端口与 Zookeeper 服务进行通信。

  • autopurge.snapRetainCount=500: 这个参数设置了 Zookeeper 服务自动清理时保留的快照数量。这里设置为保留 500 个快照。

  • autopurge.purgeInterval=24: 这个参数设置了 Zookeeper 服务自动清理的间隔时间,单位是小时。这里设置为每 24 小时清理一次。

  • server.1=zk-server-01:2888:3888: 这个参数定义了 Zookeeper 集群中的服务器 1 的信息。zk-server-01 是服务器的主机名,2888 是用于集群通信的端口,3888 是用于领导者选举的端口。

  • server.2=zk-server-02:2888:3888: 类似于 server.1,这是集群中服务器 2 的配置。

  • server.3=zk-server-03:2888:3888: 这是集群中服务器 3 的配置,与 server.1server.2 类似。

1.1.7 创建 ServerID 标识

复制代码
[root@zk-server-01 ~]# echo "1" > /usr/local/zookeeper/data/myid
​
[root@zk-server-02 ~]# echo "2" > /usr/local/zookeeper/data/myid
​
[root@zk-server-03 ~]# echo "3" > /usr/local/zookeeper/data/myid

1.1.8 集群启动测试

复制代码
[root@zk-server-01 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-server-01 ~]# /usr/local/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
​
​
[root@zk-server-02 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-server-02 ~]# /usr/local/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
​
[root@zk-server-03 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-server-03 ~]# /usr/local/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
相关推荐
Hello.Reader5 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
七夜zippoe5 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6487 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满7 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠7 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9037 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技9 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀9 小时前
Linux环境变量
linux·运维·服务器
zzzsde9 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º11 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann