分布式学习(三)用docker来搭建自己的zookeeper集群!
前言
作为一个穷学生,自然是租不起集群环境的,租不起咋办呢?一般都有两种解决方案来模拟集群
- 搭建虚拟机来模拟集群: 这种方式能最大程度的模拟在单机下模拟集群,但是极其消耗磁盘,我果断放弃
- 用端口号来模拟多主机:这种方式只是单纯的执行了多个zookeeper应用
作为轻量级的虚拟机,我选择容器来模拟集群环境,有如下优点:
- 部署方便: 制作一个镜像,然后创建容器即可,不用对每一个容器再安装环境
- 轻量:一个容器也就占用几百兆
注:本博文只是我作为小白的尝试,如有错误,多谢指正
镜像制作
首先,我们需要制作一个安装了zookeeper的镜像,dockerhub上有现成的镜像,但是为了实践,我决定自己做一个
- 先pull一个centos7镜像来作为我们的底层镜像
docker pull centos:7.0
docker run -it --name zkc centos:7.0 /bin/bash # 创建并进入容器
- 在这个容器中搭建我们的zk环境
a. 搭建jdk环境(这里就不罗嗦了)
b. 搭建zookeeper环境(这里网上也一大堆)
c. 安装网络包net-tools(后面需要用到)
yum -y install net-tools
d.打包为镜像文件
docker commit zkc zk:1.0
看一下:
docker images应该能看到我们制作的镜像
配置集群
接下来配置我们的集群环境
首先创建zookeeper中需要的文件在我们宿主机上
mkdir /usr/zookeeper/zk1 /usr/zookeeper/zk2 /usr/zookeeper/zk3 # 为三个节点都创建
mkdir /usr/zookeeper/conf # 三个节点共享配置文件
然后在每个节点目录下分别创建data目录和logs目录,并在data目录下创建文件myid并分别写上 0, 1, 2
在conf文件夹中创建zoo.cfg
创建三个容器,并挂载以上文件夹,还要映射一下端口:
docker run -v /usr/zookeeper/zk1/data:/usr/zookeeper/data -v /usr/zookeeper/zk1/logs:/usr/zookeeper/logs -v /usr/zookeeper/conf:/usr/zookeeper/conf -p 2001:2888 -p 3001:3888 --name zk1 -d -it zk /bin/bash
docker run -v /usr/zookeeper/zk2/data:/usr/zookeeper/data -v /usr/zookeeper/zk2/logs:/usr/zookeeper/logs -v /usr/zookeeper/conf:/usr/zookeeper/conf -p 2002:2888 -p 3002:3888 --name zk2 -d -it zk /bin/bash
docker run -v /usr/zookeeper/zk3/data:/usr/zookeeper/data -v /usr/zookeeper/zk3/logs:/usr/zookeeper/logs -v /usr/zookeeper/conf:/usr/zookeeper/conf -p 2003:2888 -p 3003:3888 --name zk3 -d -it zk /bin/bash
然后分别在容器中查看一下该容器的ip地址
ifconfig
在zoo.cfg中写入配置文件:
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/usr/zookeeper/logs
dataDir=/usr/zookeeper/data
clientPort=2181
server.0=172.17.0.2:2001:3001 // 这里的地址为你docker容器的ip地址
server.1=172.17.0.3:2002:3002
server.2=172.17.0.4:2003:3003
至此zookeeper集群搭建完毕!
测试!
我们来试一下
开三个终端,分别进入三个容器中:
然后进入该容器的zookeeper/bin目录,运行服务:
zkServer.sh start
然后运行客户端:
zkClient.sh -server localhost:2181
进入成功!
然后我们试一试在一个节点中添加数据:
create /qq 123
然后在另一个节点中查看一下:
ok,搭建成功!