ZooKeeper 集群模式安装
下载地址: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
Docker 模式安装
# 容器间通过 hostname 访问,不能使用默认的网桥 docker network create zookeeper_net # 这里为了方便,都部署在一台机器上,实际使用时应在不同机器部署,且对使用者只用暴露 2181 端口即可 # 创建三个节点 docker run -d --restart always --hostname zoo1 --network zookeeper_net \ -e ZOO_MY_ID=1 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181" \ -p 2181:2181 -p 2888:2888 -p 3888:3888 -p 8080:8080 \ --name zoo1 zookeeper docker run -d --restart always --hostname zoo2 --network zookeeper_net \ -e ZOO_MY_ID=2 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181" \ -p 2182:2181 -p 2889:2888 -p 3889:3888 -p 8081:8080 \ --name zoo2 zookeeper docker run -d --restart always --hostname zoo3 --network zookeeper_net \ -e ZOO_MY_ID=3 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181" \ -p 2183:2181 -p 2890:2888 -p 3890:3888 -p 8082:8080 \ --name zoo3 zookeeper
可视化 UI:zoonavigator 和 zk-web,连接地址输入主机名即可
docker run -d --restart unless-stopped --network zookeeper_net \ -e HTTP_PORT=9000 \ -p 8888:9000 \ --name zoonavigator elkozmon/zoonavigator docker run -d --restart always --network zookeeper_net \ -e HTTP_PORT=8080 \ -e USER=admin -e PASSWORD=admin \ -e ZK_DEFAULT_NODE=zoo1:2181/ \ -p 8888:8080 \ --name zk-web tobilg/zookeeper-webui
三、手动安装下的启动
# 启动 /opt/zookeeper-3.4.14/bin/zkServer.sh start # 停止 /opt/zookeeper-3.4.14/bin/zkServer.sh stop # 查看状态 /opt/zookeeper-3.4.14/bin/zkServer.sh status
启动一台节点,查看状态发现并没有在工作
ZooKeeper 集群需要有一半以上的机器在运行时才可以工作,这里为三台节点,那么就需要至少启动两台节点才能工作
启动两台集群后再查看状态
https://zookeeper.apache.org/doc/current/zookeeperAdmin.html