官网: Apache ZooKeeper
Zookeeper集群的工作是超过半数才能对外提供服务,成员数量一般为奇数台
环境:
操作系统: centos7
软件版本: zookeeper-3.4.12.tar.gz
防火墙:全关
三台服务器改主机名:
hostnamectl set-hostname kafka-1
hostnamectl set-hostname kafka-2
hostnamectl set-hostname kafka-3
三台服务器互相解析:
vim /etc/hosts
192.168.148.141 kafka-1
192.168.148.142 kafka-2
192.168.148.143 kafka-3
三台服务器同时操作:
1.布署java环境
yum -y install wget
wget https://d6.injdk.cn/oraclejdk/8/jdk-8u341-linux-x64.rpm
yum localinstall jdk-8u341-linux-x64.rpm -y
2.安装zookeeper
tar xf zookeeper-3.4.12.tar.gz -C /usr/local/
ln -s /usr/local/zookeeper-3.4.12/ /usr/local/zookeeper
3.修改配置文件
#cd /usr/local/zookeeper/conf
#cp zoo_sample.cfg zoo.cfg
#egrep -v "^$|^#" zoo.cfg
tickTime=2000 #Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔initLimit=10 #这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,#而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。#当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,#那么表明这个客户端连接失败。总的时间长度就是 10*2=20 秒syncLimit=5 #这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,#总的时间长度就是5*2=10秒dataDir=/data/zookeeper/data #快照日志的存储路径dataLogDir=/data/zookeeper/datalog #事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录#这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多clientPort=2181 #这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求server.1=192.168.148.141:2888:3888server.2=192.168.148.142:2888:3888server.3=192.168.148.143:2888:3888#server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到数据目录下面myid文件里#192.168.148.141为IP地址,第一个端口是leader和follower之间的通信端口,默认是2888,服务启动后,只有leader会监听这个端口#第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888
4.创建数据目录及服务器id
(每台机器的id不一样)
mkdir /data/zookeeper/data{,log} -p
echo 1 > /data/zookeeper/data/myid
5.在所有机器上启动服务并查看
# /usr/local/zookeeper/bin/zkServer.sh start #启动服务
# /usr/local/zookeeper/bin/zkServer.sh status #查看状态
zk集群自动分配一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来
# netstat -tanp |grep -E "2888|3888"
# jps #查看运行的进程号
9969 QuorumPeerMain
13767 Jps
6.几点重要说明
1)、myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。
2)、zoo.cfg 文件是zookeeper配置文件在conf目录里。
3)、log4j.properties文件是zk的日志输出文件, 在conf目录里. 用java写的程序基本上有个共同点:日志都用log4j来进行管理。
4)、zkEnv.sh和zkServer.sh文件
zkServer.sh 主管理程序文件
zkEnv.sh 是主要配置zookeeper集群启动时配置环境变量的文件
5)、还有一个需要注意: zookeeper不会主动的清除旧的快照和日志文件,这个是操作者的责任。
清理方法:
一. 脚本+计划任务清理
二. 使用bin/zkCleanup.sh这个脚本清理,具体使用方法找官方文档
三. 从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过在zoo.cfg中配置两个参数实现:
autopurge.purgeInterval 清理频率,单位是小时,默认是0,表示不开启自动清理功能
autopurge.snapRetainCount 需要保留的文件数目, 默认是保留3个
7.zookeeper端口:
连接客户端(kafka):2181
leader和folower通信:2888
选举新的leader:3888