下载地址:https://zookeeper.apache.org/releases.html
DockerHub:https://registry.hub.docker.com/_/zookeeper
ZooKeeper 集群为主(Leader)从(Follower)模式
一、安装
手动安装
至少需要准备三台节点(这里为h136、h138、h140),ZooKeeper 需要 JDK,关于 JDK 的安装这里不做记录
# 解压 tar -zxf /opt/zookeeper-3.4.14.tar.gz -C /opt/ # 创建配置文件 cp /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg # 编辑配置(修改下数据存放路径) vim /opt/zookeeper-3.4.14/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/opt/zookeeper-3.4.14/zkData clientPort=2181 #maxClientCnxns=60 #autopurge.snapRetainCount=3 #autopurge.purgeInterval=1
本地模式到这里就可以直接启动了,集群模式还需要配置编号与集群信息
Docker 模式安装
docker run -d --restart always \ # -v /home/dsw/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \ -v /home/dsw/zookeeper/data:/data \ -v /home/dsw/zookeeper/datalog:/datalog \ -v /home/dsw/zookeeper/logs:/logs \ -e "ZOO_INIT_LIMIT=10" \ -e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \ -p 2181:2181 -p 2888:2888 -p 3888:3888 -p 8080:8080 \ --name some-zookeeper zookeeper
访问 IP:8080/commands 可以看到 zookeeper 的信息
二、集群配置
手动安装
配置编号与集群信息
# 在数据目录下创建 myid,类容为编号,先按照上面的路径创建数据目录 mkdir -p /opt/zookeeper-3.4.14/zkData # 创建编号文件,内容随意,保证每个节点不同即可 vim /opt/zookeeper-3.4.14/zkData/myid 136 # 配置节点信息,添加以下配置,这里为三个节点 vim /opt/zookeeper-3.4.14/conf/zoo.cfg server.136=h136:2888:3888 server.138=h138:2888:3888 server.140=h140:2888:3888 # server.A=B:C:D # A 几号服务器,集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件的内容就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server # B 服务器的 ip 地址 # C 是这个服务器与集群中的 Leader 服务器交换信息的端口 # D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口
同步到其它节点,然后修改 myid 文件
# 这里使用 rsync 工具,scp 也可以 rsync -av /opt/zookeeper-3.4.14 h138:/opt/ rsync -av /opt/zookeeper-3.4.14 h140:/opt/ # 修改其他节点上的 myid 文件 vim /opt/zookeeper-3.4.14/zkData/myid
手动安装集群就完了,然后启动即可。另附上一些其它配置说明:https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration
# 通信心跳数,Zookeeper 服务器与客户端心跳时间,单位毫秒 # Zookeeper 使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳,时间单位为毫秒。 # 它用于心跳机制,并且设置最小的 session 超时时间为两倍心跳时间。(session 的最小超时时间是 2*tickTime) tickTime=2000 # LF 初始通信时限 # 集群中的 Follower 跟随者服务器与 Leader 领导者服务器之间初始连接时能容忍的最多心跳数(tickTime 的数量),用它来限定集群中的 Zookeeper 服务器连接到 Leader 的时限。 initLimit=10 # LF 同步通信时限 # 集群中 Leader 与 Follower 之间的最大响应时间单位,假如响应超过 syncLimit * tickTime,Leader 认为 Follwer 死掉,从服务器列表中删除 Follwer。 syncLimit=5 # 数据文件目录+数据持久化路径,主要用于保存Zookeeper中的数据。 dataDir=/tmp/zookeeper # 客户端连接端口,监听客户端连接的端口。 clientPort=2181 # 将事务日志写入 dataLogDir 而不是 dataDir dataLogDir=/tmp/zookeeper/log