一、准备
3台虚拟机安装linux,centos7.
网络连接使用NAT模式
二、docker安装zookeeper
1.启动docker 服务
service docker start
2.查找镜像
docker search zookeeper
3.下载镜像
docker pull zookeeper
4. 主机上建立挂载目录
mkdir -p /opt/zookeeper/data
mkdir -p /opt/zookeeper/conf
5. 分别设置每台机器的server id
cd /opt/zookeeper/data
touch myid
echo 0 > myid
id分别要对应配置文件中的id,即server.0,server.1,server.2
6.编写 zookeeper 配置文件zoo.cfg,配置文件放在/opt/zookeeper/conf 目录下
cd /opt/zookeeper/conf
vim zoo.cfg
clientPort=2181
dataDir=/data
dataLogDir=/data/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.0=192.168.137.129:2888:3888
server.1=192.168.137.130:2888:3888
server.2=192.168.137.131:2888:3888
注意:若安装单机版zookeeper,则配置文件如下:
clientPort=2181
dataDir=/data
dataLogDir=/data/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
7.在三台机器上分别启动容器 (使用docker-compose编排zookeeper步骤为8-14步)
docker run --network host -v /opt/zookeeper/data:/data -v /opt/zookeeper/conf:/conf --name zookeeper_rh -d docker.io/zookeeper
注意:
命令说明:
--network host: 使用主机上的网络配置,如果不用这种模式,而用默认的bridge模式,会导致容器跨主机间通信失败
-v /opt/zookeeper/data:/data:主机的数据目录挂载到容器/data下
-v /opt/zookeeper/conf:/conf: 主机的配置目录挂载到容器的/conf下,容器内的zkServer.sh默认会读取/conf/zoo.cfg下的配置
8.编排zookeeper.yml
cd /opt/zookeeper/dockerfile
vim zookeeper.yml
zookeeper_rh:
image: zookeeper
container_name: zookeeper_rh
restart: always
volumes:
- /opt/zookeeper/data:/data
- /opt/zookeeper/conf:/conf
ports:
- "2181:2181"
9.构建zookeeper容器
docker-compose -f /opt/zookeeper/dockerfile/zookeeper.yml up
10.启动容器
docker-compose -f /opt/zookeeper/dockerfile/zookeeper.yml start
11.编辑开机启动脚本
cd /opt/zookeeper/dockerfile
vim boot_zookeeper
#!/bin/bash
#chkconfig:2345 30 80
case $1 in
start)
docker-compose -f /opt/zookeeper/zookeeper.yml start
;;
stop)
docker-compose -f /opt/zookeeper/zookeeper.yml stop
;;
restart)
docker-compose -f /opt/zookeeper/zookeeper.yml restart
;;
*)
echo "require start|stop|restart" ;;
esac
12.上传 boot_zookeeper到/etc/init.d/
cp boot_zookeeper /etc/init.d
13. 添加执行权限
chmod +x /etc/init.d/boot_zookeeper
14.加入开机启动
chkconfig --add boot_zookeeper
15.开启2181端口
vim /etc/sysconfig/iptables
# 加入如下代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
16.保存退出后重启防火墙
service iptables restart
17.查看容器状态
选择一台服务器,进入容器,在zookeeper的bin目录下执行 ./zkServer.sh status,可看到该节点是leader还是follower
docker ps
docker exec -it 546 bash
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
546a2cf471ad zookeeper "/docker-entrypoint.…" 27 minutes ago Up 27 minutes zookeeper_1
[root@localhost ~]# docker exec -it 546 bash
root@localhost:/apache-zookeeper-3.7.0-bin# docker exec -it 546 bashdocker exec -it 546 bash
bash: docker: command not found
root@localhost:/apache-zookeeper-3.7.0-bin# ls
LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf docs lib
root@localhost:/apache-zookeeper-3.7.0-bin# cd bin
root@localhost:/apache-zookeeper-3.7.0-bin/bin# ls
README.txt zkCli.cmd zkEnv.cmd zkServer-initialize.sh zkServer.sh zkSnapShotToolkit.sh zkSnapshotComparer.sh zkTxnLogToolkit.sh
zkCleanup.sh zkCli.sh zkEnv.sh zkServer.cmd zkSnapShotToolkit.cmd zkSnapshotComparer.cmd zkTxnLogToolkit.cmd
root@localhost:/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@localhost:/apache-zookeeper-3.7.0-bin/bin#