介绍
ZooKeeper 是一个开源的分布式协调服务,旨在提供高性能、高可用性、可靠性和一致性的分布式应用程序协调服务。它由 Apache 软件基金会管理,并作为一个顶级项目进行维护。ZooKeeper 主要用于解决分布式系统中的一致性问题,如领导选举、配置管理、分布式锁、命名服务等。
以下是 ZooKeeper 的一些主要特点和功能:
-
分布式协调:ZooKeeper 提供了一个分布式协调服务,允许应用程序在分布式环境中协调和同步操作。它通过提供共享的数据节点来实现各种分布式协作模式,如分布式锁、分布式队列等。
-
高性能:ZooKeeper 的设计目标之一是提供高性能的服务。它使用了轻量级的协议和高效的数据存储结构,以确保快速的数据读写和低延迟的响应。
-
高可用性:ZooKeeper 使用了多副本复制机制来保证数据的可靠性和高可用性。它将数据复制到多个节点上,并使用选举算法来选择一个主节点来处理客户端请求。如果主节点发生故障,ZooKeeper 会自动选举新的主节点来接管服务。
-
一致性:ZooKeeper 保证了数据的一致性和顺序性。它使用了类似于共识算法的技术来确保在分布式环境中对数据的修改操作是原子性和有序的。
-
轻量级:ZooKeeper 的代码库相对较小,并且没有太多的依赖关系,因此它的部署和维护相对简单。同时,ZooKeeper 提供了简洁的 API 和易于使用的命令行工具,方便开发人员进行操作和管理。
-
灵活性:ZooKeeper 提供了灵活的数据模型和操作接口,可以根据应用程序的需求来进行定制和扩展。它支持观察者模式和通知机制,允许客户端监控数据节点的变化并及时做出响应。
环境
master(A):172.17.246.69
slave1(B):172.17.246.70
slave2(C):100.255.100.251
下载ZooKeeper
最新版本:官网下载地址:https://dlcdn.apache.org/zookeeper/
老版本:官网下载地址:http://archive.apache.org/dist/zookeeper/
本文下载到的安装包名为:zookeeper-3.4.12.tar.gz
上传安装包,并解压
tar xf zookeeper-3.4.12.tar.gz
配置zoo.cfg
入到zookeeper解压目录下
三台都需要下边配置 # 反向代理ubuntu
将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件。
cp conf/zoo_sample.cfg conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper/data
# the port at which the clients will connect
clientPort=2181
server.1=172.17.246.69:2888:3888
server.2=172.17.246.70:2888:3888
server.3=10.255.100.251:2888:3888
myid里要与server,XXX=172.17.246.XX一致
A上执行
mkdir -p /data/zookeeper/data/
echo "1" > /data/zookeeper/data/myid
B上执行
mkdir -p /data/zookeeper/data/
echo "2" > /data/zookeeper/data/myid
C上执行
mkdir -p /data/zookeeper/data/
echo "3" > /data/zookeeper/data/myid
配置环境变量
#set zookeeper environment
export ZK_HOME=/data/zookeeper/
export PATH=$PATH:$ZK_HOME/bin
启动命令:
zkServer.sh start
停止命令:
zkServer.sh stop
重启命令:
zkServer.sh restart
查看集群节点状态:
zkServer.sh status
配置使用systemd启停ZooKeeper
创建并编辑/usr/lib/systemd/system/zkServer.service文件,文件内容如下:
[Unit]
Description=ZooKeeper Server
Documentation=https://zookeeper.apache.org/
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
#User=zookeeper
#Group=zookeeper
WorkingDirectory=/data/zookeeper
Environment=ZOO_LOG_DIR=/data/zookeeper/logs
ExecStart=/data/zookeeper/bin/zkServer.sh start
ExecStop=/data/zookeeper/bin/zkServer.sh stop
#ExecRestart=/data/zookeeper/bin/zkServer.sh restart
#ExecStatus=/data/zookeeper/bin/zkServer.sh status
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
使用systemd启停zookeeper。
启动
systemctl start zkServer
停止
systemctl stop zkServer
设置为开机启动
systemctl enable zkServer.service
ZooKeeper 的性能调优方向
对 ZooKeeper 的性能进行调优可以帮助提高集群的吞吐量、减少延迟,并提升系统的稳定性。以下是一些常见的 ZooKeeper 性能调优策略:
-
适当配置硬件资源:ZooKeeper 的性能受到硬件资源的限制,因此首先需要确保集群的硬件资源足够。包括 CPU、内存、磁盘 I/O 等方面的资源。对于磁盘,建议使用高性能的 SSD 硬盘,以提升写入和读取的速度。
-
合理配置网络:ZooKeeper 集群的性能也受到网络的影响,因此需要确保集群节点之间的网络连接质量良好,延迟较低。可以考虑使用高性能的网络设备,并将 ZooKeeper 节点部署在同一数据中心或同一局域网内。
-
优化配置文件参数:ZooKeeper 的配置文件中包含一些参数可以用来优化性能,例如:
tickTime
:设置心跳间隔,可以根据实际情况调整,默认为 2000ms。initLimit
和syncLimit
:分别设置初始同步限制和同步限制,可以根据集群规模和负载情况适当调整。maxClientCnxns
:限制单个客户端的最大连接数,防止客户端过多导致服务器负载过高。
-
合理分配内存:ZooKeeper 的性能受到 JVM 内存的影响,可以通过设置 JVM 的堆内存大小来优化性能。一般情况下,建议为 ZooKeeper 分配足够的内存,以减少垃圾回收对性能的影响。
-
使用 SSD 硬盘:ZooKeeper 集群的性能也受到磁盘 I/O 的影响,因此使用 SSD 硬盘可以显著提高写入和读取的速度,从而提升整个集群的性能。
-
监控和调优:定期监控 ZooKeeper 集群的性能指标,如吞吐量、延迟、负载等,及时发现和解决性能瓶颈。可以使用一些监控工具和性能分析工具来帮助进行调优,如 Prometheus、Grafana 等。