Docker搭建伪集群

323 阅读2分钟

前段时间学习dubbo,由于之前用文件安装的zookeeper伪集群被删除了,所以就用docker搭建的,其实集群和伪集群都是大同小异,虚拟机是centos7

安装docker(略)

启动docker服务

systemctl start docker

搜索镜像

docker search zookeeper

下载镜像

docker pull zookeeper

主机上建立挂载目录和zookeeper配置文件

创建三个zookeeper子节点的存储数据的文件的日志目录

mkdir -p /opt/zookeeper/zookeeper0/data
mkdir -p /opt/zookeeper/zookeeper0/logs
mkdir -p /opt/zookeeper/zookeeper1/data
mkdir -p /opt/zookeeper/zookeeper1/logs
mkdir -p /opt/zookeeper/zookeeper2/data
mkdir -p /opt/zookeeper/zookeeper2/logs

创建各自的myid和zoo.cfg

cd /opt/zookeeper/zookeeper0/data
echo 0 > myid
cd ../
touch zoo.cfg
vi zoo.cfg

zoo.cfg配置如下

clientPort=2181
dataDir=/data
dataLogDir=/data/logs
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.0=192.168.90.128:2888:3888
server.1=192.168.90.129:2888:3888
server.2=192.168.90.130:2888:3888

同样的配置另外两个节点myid分别为1、2,clientPort分别为2182、2183

server.0=192.168.90.128:2888:3888 server.1=192.168.90.129:2888:3888 server.2=192.168.90.130:2888:3888 server.x x表示myid

一次启动三个docker容器

docker run -d --network host -v /opt/zookeeper/zookeeper0/data:/data -v /opt/zookeeper/zookeeper0/logs:/logs -v
/opt/zookeeper/zookeeper0/zoo.cfg:/conf/zoo.cfg
--name zk0 zookeeper:latest

docker run -d --network host -v /opt/zookeeper/zookeeper1/data:/data -v /opt/zookeeper/zookeeper1/logs:/logs -v
/opt/zookeeper/zookeeper1/zoo.cfg:/conf/zoo.cfg
--name zk1 zookeeper:latest

docker run -d --network host -v /opt/zookeeper/zookeeper2/data:/data -v /opt/zookeeper/zookeeper2/logs:/logs -v
/opt/zookeeper/zookeeper2/zoo.cfg:/conf/zoo.cfg
--name zk2 zookeeper:latest

命令说明

  • --network host: 使用主机上的网络配置,如果不用这种模式,而用默认的bridge模式,会导致容器跨主机间通信失败
  • -v /opt/zookeeper/zookeeper0/data:/data:主机的数据目录挂载到容器/data下
  • -v /opt/zookeeper/zookeeper0/zoo.cfg:/conf/zoo.cfg: 主机的配置配置文件挂载到容器的/conf/zoo.cfg下,容器内的zkServer.sh默认会读取/conf/zoo.cfg下的配置

都启动完成后,每台主机的2181/2888/3888端口都会开放出来了

检查容器的启动情况:

docker exec -it 容器id /bin/bash

查看zookeeper启动日志

docker logs 容器id/容器名称