ZK--简介,部署
官网:https://zookeeper.apache.org/
本文zk版本:3.7.0
一、简介
ZooKeeper 是一个高可用的分布式数据管理与系统协调软件,它可以为分布式应用提供状态同步、配置管理、名称服务、群组服务、分布式锁及队列、以及 Leader 选举等服务。
特性:
- 顺序一致性:从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中
- 原子性: 所有事物请求的处理结果在整个集群中所有机器上的应用情况是一致的
- 单一视图: 无论客户端连接的是哪个zookeeper服务器,其看到的服务端数据模型都是一致的
- 可靠性: 一旦服务端成功的应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直保留下来,除非有另一个事务又对其进行了改变
- 实时性: 保证在一定的时间内各个客户端看到的系统信息是一致的
zookeeper server 角色:
- Leader:leader负责进行投票的发起和决议,更新系统状态
- Follower:Follower用于接受客户请求并向客户端返回结果,在选主过程中参与投票
- Observer:Observer可以接受客户端连接,将写请求转发给leader节点。但Observer不参加投票过程,只同步leader的状态。Observer的目的是为了扩展系统,提高读取速度。
ZooKeeper的数据模型是一个ZNode节点树,是一个类型与标准文件系统的层次结构;节点类型有
- 临时节点(EPHEMERAL):临时创建的,会话结束节点自动被删除,也可以手动删除,临时节点不能拥有子节点
- 临时顺序节点(EPHEMERAL_SEQUENTIAL):具有临时节点特征,但是它会有序列号,分布式锁中会用到该类型节点
- 持久节点(PERSISTENT):创建后永久存在,除非主动删除
- 持久顺序节点(PERSISTENT_SEQUENTIAL):该节点创建后持久存在,相对于持久节点它会在节点名称后面自动增加一个10位数字的序列号
二、安装部署
2.1 安装java环境
参考:https://www.cnblogs.com/Xinenhui/p/16254076.html
2.2 下载安装
各服务器关闭防火墙和selinux
包地址:https://zookeeper.apache.org/releases.html
useradd -s /bin/false -M -r zookeeper
mkdir /data/zookeeper/data{,log} -p
tar -xvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/
mv /usr/local/apache-zookeeper-3.7.0-bin/ /usr/local/zookeeper
cp /usr/local/zookeeper/zoo_sample.cfg /usr/local/zookeeper/zoo.cfg
2.3 配置文件(单机部署不需要写入server,2.4步骤也省略)
[root@zk ~]# grep -v "#\|^$" /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/datalog
clientPort=2181
server.1=192.168.198.xxx:2888:3888
server.2=192.168.198.xxx:2888:3888
server.3=192.168.198.xxx:2888:3888
配置介绍:
- tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位毫秒
- initLimit: Zookeeper 接受客户端(ZK集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数,当超过这个时间还没有收到客户端的返回信息,那么表明这个客户端连接失败
- syncLimit:标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度
- dataDir:快照日志的存储路径
- dataLogDir:事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录 这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
- clientPort:客户端连接 Zookeeper 服务器的端口
- server.x:标识zk集群的服务器,这个标识要写到数据目录下面myid文件里,每个id对应且唯一
- 2888:leader和follower之间的通信端口
- 3888:leader选举的端口
2.4 创建myid文件,每个节点的myid需要对应且唯一
echo 1 > /data/zookeeper/data/myid
2.5 启动服务
#启动 /usr/local/zookeeper/bin/zkServer.sh start #关闭 /usr/local/zookeeper/bin/zkServer.sh stop #查看状态 /usr/local/zookeeper/bin/zkServer.sh status
三、注意事项
-
myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,它是整个zk集群用来发现彼此的一个重要标识
- zoo.cfg 文件是zookeeper配置文件,在conf目录里
-
log4j.properties文件是zk的日志输出文件,在conf目录里(用java写的程序基本上日志都用log4j来进行管理)
-
zkServer.sh 主管理程序文件,是主要配置zookeeper集群启动时配置环境变量的文件
- zookeeper不会主动的清除旧的快照和日志文件,这个是操作者的责任,清理方法:
- 脚本+计划任务清理
- 使用bin/zkCleanup.sh这个脚本清理,具体使用方法找官方文档
- 从3.4.0开始 zookeeper提供了自动清理snapshot和事务日志的功能 通过在zoo.cfg中配置两个参数实现:
autopurge.purgeInterval 清理频率,单位是小时,默认是0,表示不开启自动清理功能
autopurge.snapRetainCount 需要保留的文件数目,默认是保留3个