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
相关推荐
wowocpp1 小时前
查看 linux ubuntu 分区 和 挂载 情况 lsblk
linux·运维·ubuntu
_.Switch4 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410834 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.4 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代5 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方6 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘6 小时前
NFS服务器
运维·服务器
苹果醋37 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰7 小时前
[linux]docker基础
linux·运维·docker
Jason-河山8 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化