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
View Code

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:zoonavigatorzk-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

posted @ 2019-04-21 11:17  江湖小小白  阅读(528)  评论(0编辑  收藏  举报