Docker 搭建Zookeeper集群
环境准备
依赖
- CentOS7.6
安装Docker
参照安装(点击)
单实例(Without Docker)
安装JDK
去官网上下载1.8版本的tar.gz ,如果使用yum安装或者下载rpm包安装,则会缺少Scala2.11需要的部分文件。
tar xf jdk-8u221-linux-x64.tar -C /usr/lib/jvm
rm -rf /usr/bin/java
ln -s /usr/lib/jvm/jdk1.8.0_221/bin/java /usr/bin/java
编辑文件
vim /etc/profile.d/java.sh
添加
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:$PATH
然后使环境变量生效
source /etc/profile
执行以下命令检查环境变量
[root@vm1 bin]# echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_221
[root@vm1 bin]# echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_221
下载安装包
从官网获取下载地址
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.6-bin.tar.gz
注意不要下载非bin版本
解压
tar xf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/
配置
拷贝sample配置为启动配置
cd /opt/apache-zookeeper-3.5.6-bin/bin
cp -rf ../conf/zoo_sample.cfg ../conf/zoo.cfg
启动
sh zkServer.sh start
如果启动失败可以使用以下命令来查看错误
sh zkServer.sh start-foreground
测试
sh zkCli.sh
集群安装(Without Docker)
准备
启动三台虚拟机,vm1、vm2、vm3在一个子网当中。三台机器按照单实例模式进行安装。
配置
在三台机器上执行以下命令添加集群配置
cat >> /opt/apache-zookeeper-3.5.6-bin/conf/zoo.cfg <<EOF
server.1=vm1:2888:3888
server.2=vm2:2888:3888
server.3=vm3:2888:3888
EOF
各台机器上分别设置zookeeper id
#vm1
mkdir -p /tmp/zookeeper
echo "1" > /tmp/zookeeper/myid
#vm2
mkdir -p /tmp/zookeeper
echo "2" > /tmp/zookeeper/myid
#vm3
mkdir -p /tmp/zookeeper
echo "3" > /tmp/zookeeper/myid
启动
在三台机器上分别执行
sh zkServer.sh start
测试
curl http://vm1:8080/commands/monitor
curl http://vm2:8080/commands/monitor
curl http://vm3:8080/commands/monitor
基本单实例(With Docker)
docker run --name zookeeper --hostname zookeeper \
--restart=always -p 2181:2181 -p 8080:8080 -d \
zookeeper:latest
overlay网络集群(With Docker)
准备基础环境
部署三台机器vm1,vm2,vm3。基础环境和单实例一样。
创建swarm overlay网络
启动命令
docker run -d --name=zookeeper-1 --hostname=zookeeper-1 --network=overlay --restart=always -p 2181:2181 -p 8080:8080 -e ZOO_MY_ID=1 -e ZOO_SERVERS="server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181" -v /etc/localtime:/etc/localtime zookeeper
docker run -d --name=zookeeper-2 --hostname=zookeeper-2 --network=overlay --restart=always -p 2181:2181 -p 8080:8080 -e ZOO_MY_ID=2 -e ZOO_SERVERS="server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181" -v /etc/localtime:/etc/localtime zookeeper
docker run -d --name=zookeeper-3 --hostname=zookeeper-3 --network=overlay --restart=always -p 2181:2181 -p 8080:8080 -e ZOO_MY_ID=3 -e ZOO_SERVERS="server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181" -v /etc/localtime:/etc/localtime zookeeper
查看leader
分别对vm1,vm2,vm3执行命令
curl http://vm1:8080/commands/monitor
curl http://vm2:8080/commands/monitor
curl http://vm3:8080/commands/monitor
显示结果
{
"version" : "3.5.5-390fe37ea45dee01bf87dc1c042b5e3dcce88653, built on 05/03/2019 12:07 GMT",
"avg_latency" : 0,
"max_latency" : 0,
"min_latency" : 0,
"packets_received" : 0,
"packets_sent" : 0,
"num_alive_connections" : 0,
"outstanding_requests" : 0,
"server_state" : "leader",
"znode_count" : 5,
"watch_count" : 0,
"ephemerals_count" : 0,
"approximate_data_size" : 182,
"open_file_descriptor_count" : 46,
"max_file_descriptor_count" : 1048576,
"last_client_response_size" : -1,
"max_client_response_size" : -1,
"min_client_response_size" : -1,
"followers" : 2,
"synced_followers" : 2,
"pending_syncs" : 0,
"last_proposal_size" : -1,
"max_proposal_size" : -1,
"min_proposal_size" : -1,
"command" : "monitor",
"error" : null
}
server_state显示为leader,否则是follower
使用zkCli.sh客户端访问
docker run -it --rm --network overlay zookeeper zkCli.sh -server zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
Docker Stack 搭建(With Docker)
创建目录
在vm1,vm2,vm3上执行以下命令创建目录
#vm1
mkdir -p /opt/volumns/zookeeper-1/data
mkdir -p /opt/volumns/zookeeper-1/datalog
#vm2
mkdir -p /opt/volumns/zookeeper-2/data
mkdir -p /opt/volumns/zookeeper-2/datalog
# vm3
mkdir -p /opt/volumns/zookeeper-3/data
mkdir -p /opt/volumns/zookeeper-3/datalog
编写zookeeper.yaml
vim /root/zookeeper.yaml
添加文本
version: "3"
services:
zookeeper-1:
image: zookeeper
hostname: zookeeper-1
networks:
- overlay
ports:
- 2181:2181
- 8080:8080
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181
volumes:
- /etc/localtime:/etc/localtime
- /opt/volumns/zookeeper-1/data:/data
- /opt/volumns/zookeeper-1/datalog:/datalog
deploy:
restart_policy:
condition: on-failure
replicas: 1
placement:
constraints:
- node.hostname==vm1
zookeeper-2:
image: zookeeper
hostname: zookeeper-2
networks:
- overlay
ports:
- 2182:2181
- 8081:8080
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181
volumes:
- /etc/localtime:/etc/localtime
- /opt/volumns/zookeeper-2/data:/data
- /opt/volumns/zookeeper-2/datalog:/datalog
deploy:
restart_policy:
condition: on-failure
replicas: 1
placement:
constraints:
- node.hostname==vm2
zookeeper-3:
image: zookeeper
hostname: zookeeper-3
networks:
- overlay
ports:
- 2183:2181
- 8082:8080
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181
volumes:
- /etc/localtime:/etc/localtime
- /opt/volumns/zookeeper-3/data:/data
- /opt/volumns/zookeeper-3/datalog:/datalog
deploy:
restart_policy:
condition: on-failure
replicas: 1
placement:
constraints:
- node.hostname==vm3
networks:
overlay:
driver: overlay
其中,ZOO_SERVERS地址的2181端口号不可省略,否则客户端无法访问
Docker stack启动
docker stack deploy -c zookeeper.yaml zookeeper
查看启动状态
docker stack ps zookeeper --no-trunc
显示
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
r0rawp7cl3vjwrpdbgb4yjyry zookeeper_zookeeper-3.1 zookeeper:latest@sha256:4879178a575d76d5720602f81107be4d165107ab03de0b26669605a5d39d656d vm3 Running Running 2 minutes ago
mfw7c7pgjb13nxwggfbbcm0n8 zookeeper_zookeeper-2.1 zookeeper:latest@sha256:4879178a575d76d5720602f81107be4d165107ab03de0b26669605a5d39d656d vm2 Running Running 2 minutes ago
3x7670knbjuh8uhk8f9uwhnmh zookeeper_zookeeper-1.1 zookeeper:latest@sha256:4879178a575d76d5720602f81107be4d165107ab03de0b26669605a5d39d656d vm1 Running Running 2 minutes ago
测试
启动容器测试
docker run -it --rm zookeeper zkCli.sh -server vm1:2181
输入
create /test hello
在另一个实例上检查是否存在
docker run -it --rm zookeeper zkCli.sh -server vm1:2182
输入
ls /test