1、简介
1.1、zookeeper 简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
1.2、zookeeper github地址
github 地址
2、准备工作
2.1、安装 Docker
CentOS7 安装 Docker
2.2、创建 bridge 网络
#创建自定义网络
docker network create --driver bridge --subnet 172.0.0.0/16 woniu_network
#查看已存在网络
docker network ls
3、单机模式启动
3.1、创建挂载目录
# 创建 zookeeper 配置存放目录
mkdir -p /home/docker/zookeeper/alone/conf
# 创建 zookeeper 数据存放目录
mkdir -p /home/docker/zookeeper/alone/data
# 创建 zookeeper 数据日志存放目录
mkdir -p /home/docker/zookeeper/alone/datalog
# 创建 zookeeper 日志存放目录
mkdir -p /home/docker/zookeeper/alone/logs
3.2、创建配置文件
# zookeeper 配置存放目录
cd /home/docker/zookeeper/alone/conf
# 编辑配置文件
vi zoo.cfg
参考配置
# Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里
dataDir=/data
# 事物日志存储地点,如果没提供的话使用的则是 dataDir
dataLogDir=/datalog
# 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位
tickTime=2000
# 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=5
# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
syncLimit=2
# 默认值为3,不支持以系统属性方式配置。用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。此参数的最小值为3,如果配置的值小于3会自动调整到3
autopurge.snapRetainCount=3
# 默认值为0,单位为小时,不支持以系统属性方式配置。用于配置Zookeeper进行历史文件自动清理的频率。如果配置为0或负数,表示不需要开启定时清理功能
autopurge.purgeInterval=0
# 默认为60,不支持以系统属性方式配置。从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。
# 如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和
maxClientCnxns=60
# 3.5.0中的新功能:当设置为false时,可以在复制模式下启动单个服务器,单个参与者可以使用观察者运行,并且群集可以重新配置为一个节点,并且从一个节点。
# 对于向后兼容性,默认值为true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通过将“standaloneEnabled = false”或“standaloneEnabled = true”添加到服务器的配置文件来设置它。
standaloneEnabled=false
# 内嵌的管理控制台,停用这个服务
admin.enableServer=false
# 开启四字命令,将所有命令添加到白名单中
4lw.commands.whitelist=*
# 集群中服务的列表
server.1=localhost:2888:3888;2181
3.3、单机模式启动
# 启动命令
docker run -d --restart always \
--name zookeeper-alone \
--network woniu_network \
--ip 172.0.0.181 \
-p 2181:2181 \
-e ZOO_MY_ID=1 \
-v /home/docker/zookeeper/alone/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/alone/data:/data \
-v /home/docker/zookeeper/alone/datalog:/datalog \
-v /home/docker/zookeeper/alone/logs:/logs \
zookeeper
4、集群模式启动
4.1、创建主节点挂载目录
# 创建 zookeeper 主节点配置存放目录
mkdir -p /home/docker/zookeeper/master/conf
# 创建 zookeeper 主节点数据存放目录
mkdir -p /home/docker/zookeeper/master/data
# 创建 zookeeper 主节点数据日志存放目录
mkdir -p /home/docker/zookeeper/master/datalog
# 创建 zookeeper 主节点日志存放目录
mkdir -p /home/docker/zookeeper/master/logs
# 创建 zookeeper 节点1 配置存放目录
mkdir -p /home/docker/zookeeper/node1/conf
# 创建 zookeeper 节点1 数据存放目录
mkdir -p /home/docker/zookeeper/node1/data
# 创建 zookeeper 节点1 数据日志存放目录
mkdir -p /home/docker/zookeeper/node1/datalog
# 创建 zookeeper 节点1 日志存放目录
mkdir -p /home/docker/zookeeper/node1/logs
# 创建 zookeeper 节点2 配置存放目录
mkdir -p /home/docker/zookeeper/node2/conf
# 创建 zookeeper 节点2 数据存放目录
mkdir -p /home/docker/zookeeper/node2/data
# 创建 zookeeper 节点2 数据日志存放目录
mkdir -p /home/docker/zookeeper/node2/datalog
# 创建 zookeeper 节点2 日志存放目录
mkdir -p /home/docker/zookeeper/node2/logs
4.2、创建配置文件
# zookeeper 主节点配置存放目录
cd /home/docker/zookeeper/master/conf
# 编辑配置文件
vi zoo.cfg
# zookeeper 节点1 配置存放目录
cd /home/docker/zookeeper/node1/conf
# 编辑配置文件
vi zoo.cfg
# zookeeper 节点2 配置存放目录
cd /home/docker/zookeeper/node2/conf
# 编辑配置文件
vi zoo.cfg
参考配置
# Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里
dataDir=/data
# 事物日志存储地点,如果没提供的话使用的则是 dataDir
dataLogDir=/datalog
# 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位
tickTime=2000
# 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=5
# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
syncLimit=2
# 默认值为3,不支持以系统属性方式配置。用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。此参数的最小值为3,如果配置的值小于3会自动调整到3
autopurge.snapRetainCount=3
# 默认值为0,单位为小时,不支持以系统属性方式配置。用于配置Zookeeper进行历史文件自动清理的频率。如果配置为0或负数,表示不需要开启定时清理功能
autopurge.purgeInterval=0
# 默认为60,不支持以系统属性方式配置。从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。
# 如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和
maxClientCnxns=60
# 3.5.0中的新功能:当设置为false时,可以在复制模式下启动单个服务器,单个参与者可以使用观察者运行,并且群集可以重新配置为一个节点,并且从一个节点。
# 对于向后兼容性,默认值为true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通过将“standaloneEnabled = false”或“standaloneEnabled = true”添加到服务器的配置文件来设置它。
standaloneEnabled=false
# 内嵌的管理控制台,停用这个服务
admin.enableServer=false
# 开启四字命令,将所有命令添加到白名单中
4lw.commands.whitelist=*
# 集群中服务的列表
server.1=172.0.0.181:2888:3888;2181
server.2=172.0.0.182:2888:3888;2181
server.3=172.0.0.183:2888:3888;2181
4.3、集群模式启动
4.3.1、主节点启动
# 启动命令
docker run -d --restart always \
--name zookeeper-master \
--network woniu_network \
--ip 172.0.0.181 \
-p 2181:2181 \
-e ZOO_MY_ID=1 \
-v /home/docker/zookeeper/master/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/master/data:/data \
-v /home/docker/zookeeper/master/datalog:/datalog \
-v /home/docker/zookeeper/master/logs:/logs \
zookeeper
4.3.2、节点1 启动
# 启动命令
docker run -d --restart always \
--name zookeeper-node1 \
--network woniu_network \
--ip 172.0.0.182 \
-p 2182:2181 \
-e ZOO_MY_ID=2 \
-v /home/docker/zookeeper/node1/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/node1/data:/data \
-v /home/docker/zookeeper/node1/datalog:/datalog \
-v /home/docker/zookeeper/node1/logs:/logs \
zookeeper
4.3.3、节点2 启动
# 启动命令
docker run -d --restart always \
--name zookeeper-node2 \
--network woniu_network \
--ip 172.0.0.183 \
-p 2183:2181 \
-e ZOO_MY_ID=3 \
-v /home/docker/zookeeper/node2/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/node2/data:/data \
-v /home/docker/zookeeper/node2/datalog:/datalog \
-v /home/docker/zookeeper/node2/logs:/logs \
zookeeper
4.4、集群状态
# 在容器 zookeeper-master 中开启一个交互模式的终端
docker exec -it zookeeper-master /bin/bash
# 查看 zookeeper 状态
bin/zkServer.sh status