美文网首页Java技术栈
Docker搭建Zookeeper集群(神器)

Docker搭建Zookeeper集群(神器)

作者: 程序员七哥 | 来源:发表于2019-08-29 00:54 被阅读0次

    大家好,我是程序员小罗,这是我的技术学习笔记。

    起因

    由于最近在学习zookeeper的原理,所以需要在安装一个集群来实验一些特性加深理解。

    但是问题来了,我们作为个人学习者,要搭建集群又没有那么多机器,要么就是搭建伪集群,或者就是需要安装一个虚拟机软件(比如vmWare),装多个虚拟机。 这两种方法我之前都试过,都不太理想,一个需要改端口,一种需要安装很多虚拟机,而且换了电脑也不好迁移。每次都得搞重复的配置,实现是太令人烦恼了;

    目标

    综上,上述的痛点,都不是我们愿意做的。接下来,就要介绍今天我用的神器:Docker

    使用Docker 基本上不用我们装环境之类的配置,比如安装 jdk。现在我们直接可以从镜像仓库拉别人制作好的镜像,简直不要太方便,直接运行即可。

    今天我要搭建的是一个由四台 zk 构成的 zk 集群,其中一台为 Leader,两台 Follower,一台 Observer。

    talk is cheap,show me your code, 接着往下看吧!


    实战

    不管你现在用的windows 还是linux 系统,首先你需要安装好Docker环境。 这里就不在叙述了,官网下载安装即可。

    如果对Docker 基本操作不熟悉的话,可以看我之前写的 Docker入门(镜像、容器、仓库)

    PS: 本次所制作的镜像,可以直接保存到自己的私服,以后随时随地直接拉取运行即可。一次制作,到处运行

    私服的搭建也可以看我之前写的Docker入门。

    获取镜像

    docker pull zookeeper:3.4.11 这里我选择了3.4.11 版本。

    设置docker固定ip

    因为我们要搭建的是集群环境,所以ip地址必须固定,因此需要自定义一种网络类型。

    创建自定义网络类型,并且指定网段

    sudo docker network create --subnet=192.168.0.0/24 staticnet

    通过docker network ls可以查看到网络类型中多了一个 staticnet

    使用新的网络类型创建并启动容器

    chong@L MINGW64 ~
    $ docker run --name zookeeper-1 --restart always --net staticnet --ip 192.168.0.10 -d zookeeper:3.4.11
    61a331b2584b6ef949e2183892c5a73a2e214b7071d4879993f7cbba41c836ed
    
    

    通过docker inspect可以查看容器 ip为192.168.0.10,关闭容器并重启,发现容器ip并未发生改变。

    进入容器进行配置

    由于容器在后台运行,因此我们需要进入容器,有三种方式,有兴趣的可以看我之前写的 Docker入门(镜像、容器、仓库)

    $ docker exec -ti 61a bash   # 61a为容器id
    

    登入后,我们只需要做2件事:

    1. 修改zoo.cfg

    在 zoo.cfg 文件中添加 zk 集群节点列表

    bash-4.4# vi /conf/zoo.cfg
    clientPort=2181
    dataDir=/data
    dataLogDir=/datalog
    tickTime=2000
    initLimit=5
    syncLimit=2
    maxClientCnxns=60
    server.1=192.168.0.10:2888:3888
    server.2=192.168.0.11:2888:3888
    server.3=192.168.0.12:2888:3888
    server.4=192.168.0.13:2888:3888:observer
    
    
    1. 创建 myid 文件

    在一步的zoo.cfg文件中我们可以看到dataDir的路径,在/data 目录中创建表示当前主机编号的 myid 文件。该主机编号要与 zoo.cfg 文件中设置的编号一致。

    bash-4.4# echo 1 > /data/myid
    

    保存修改后的镜像

    因为我们上面对正在运行的容器做了三点修改,这也正是我们需要的集群配置,所以我们要将这个容器制作成镜像,如下操作:

    $ docker commit -m "create zk1" -a "coderluo" 61a zookeeper-1:3.4.11
    sha256:455b27d32c83365790b7b6eff7d58021556858390d28d27b07aca206e83c507c
    
    chong@L MINGW64 ~
    $ docker images
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    zookeeper-1                  3.4.11              455b27d32c83        8 seconds ago       146MB
    39.108.186.135:5000/ubuntu   v1                  a2a15febcdf3        13 days ago         64.2MB
    zookeeper                    3.4.11              56d414270ae3        19 months ago       146MB
    
    

    使用docekr commit 进行基于已有的镜像进行创建,我的上一篇Docker入门中也有写。然后通过docker images 查看到zookeeper-1 这个镜像已经存在了。

    到这里一台镜像已经制作好了,接下来就是一样的事情重复干几遍:

    • 进入容器
    • 修改myid
    • 保存修改制作为新镜像

    查询容器id

    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
    61a331b2584b        zookeeper:3.4.11    "/docker-entrypoint.…"   About an hour ago   Up 12 minutes       2181/tcp, 2888/tcp, 3888/tcp   zookeeper-1
    
    

    进入容器执行修改(第2,3台都执行此操作):

    $ docker exec -ti 61a bash
    bash-4.4# echo 2 > /data/myid
    bash-4.4# cat /data/myid
    2
    bash-4.4# exit
    exit
    
    

    创建新的镜像(第2,3台都执行此操作):

    $ docker commit -m "create zookeeper-2" -a "coderluo" 61a zookeeper-2:3.4.11
    sha256:c775aff13fd3b2fc30066f6fc5f8a5ee429be3052b790c8e02cf74b5e4bf71e9
    

    完成后,这里要注意,第四台主机因为我们要让他作为Observer,所以他需要在zoo.cfg中增加一行配置:

    peerType=observer

    1.png

    然后在执行上面和第2,3台机器一样的操作。

    最后我们查看当前所有的镜像,不出意外的话下图展示的你也都有了:

    2.png

    到这里,今天的学习就要接近尾声了,最后一步

    依次启动4台zookeeper实例

    直接按照我下面的命令一次执行即可:

    chong@L MINGW64 ~
    $  docker run --name zookeeper-1 --restart always --net staticnet --ip 192.168.0.10 -d zookeeper-1:3.4.11 #第一台
    35acd4f798c8154047f30af184145d8b4124ec8a4e8e4a549db0d333a1c33785
    chong@L MINGW64 ~
    $  docker run --name zookeeper-2 --restart always --net staticnet --ip 192.168.0.11 -d zookeeper-2:3.4.11 #第二台
    7ef30c809183dc223e42e891880ad8c85381fac11d15da5c0455400b915c77bb
    
    chong@L MINGW64 ~
    $  docker run --name zookeeper-3 --restart always --net staticnet --ip 192.168.0.12 -d zookeeper-3:3.4.11 #第三台
    f138451dd21ce5217eb6e4472116b3ffa32e9ea2afbcaae44ee4d633040299f9
    chong@L MINGW64 ~
    $  docker run --name zookeeper-4 --restart always --net staticnet --ip 192.168.0.13 -d zookeeper-4:3.4.11 #第四台
    c662d3438db74414c9b0178bc756b6cf96cd0458cbc226e8854da4a06337d656
    
    

    查看运行状态:

    $ docker ps -a
    CONTAINER ID        IMAGE                COMMAND                  CREATED              STATUS              PORTS                          NAMES
    c662d3438db7        zookeeper-4:3.4.11   "/docker-entrypoint.…"   6 seconds ago        Up 4 seconds        2181/tcp, 2888/tcp, 3888/tcp   zookeeper-4
    f138451dd21c        zookeeper-3:3.4.11   "/docker-entrypoint.…"   24 seconds ago       Up 23 seconds       2181/tcp, 2888/tcp, 3888/tcp   zookeeper-3
    7ef30c809183        zookeeper-2:3.4.11   "/docker-entrypoint.…"   41 seconds ago       Up 39 seconds       2181/tcp, 2888/tcp, 3888/tcp   zookeeper-2
    35acd4f798c8        zookeeper-1:3.4.11   "/docker-entrypoint.…"   About a minute ago   Up About a minute   2181/tcp, 2888/tcp, 3888/tcp   zookeeper-1
    
    

    总结

    至此我们今天要搭建的四台zk实例组成的集群已经搞定了,有没有感觉到有了Docker 简直是神奇啊,只有亲身体会下才能感觉他的便利。

    欢迎在留言区讨论,今天就到这里啦,可以愉快的学习第zk的底层原理了。

    Docker 入门基础知识,可以看我整理的这篇文章:

    Docker入门(镜像、容器、仓库)

    相关文章

      网友评论

        本文标题:Docker搭建Zookeeper集群(神器)

        本文链接:https://www.haomeiwen.com/subject/nbxbectx.html