zoukankan      html  css  js  c++  java
  • 容器化系列

    本文简要说明了如何在Docker容器中启动和配置Zookeeper。

    1 准备工作

    1.1 下载zookeeper镜像

    $ docker pull zookeeper:3.4
    

    1.2 单点模式

    • 安装Docker CE

    1.3 集群模式

    • 安装Docker EE

    • 创建一个名为zk-overlay的network

      $ docker network create -d overlay zk-overlay

    2 启动Zookeeper

    2.1 单点模式启动

    $ docker run --name some-zookeeper --restart always -d zookeeper:3.4
    

    启动后会EXPOSE端口:2181, 2888, 3888。并设置为始终重启。

    2.2 集群模式启动

    a, 编写集群启动文件zk-stack.yml:
    version: '3.1'
    
    services:
      zoo1:
        image: zookeeper:3.4
        networks:
          zk-overlay:
            aliases:
              - zoo1
        restart: always
        hostname: zoo1
        ports:
          - 2181:2181
        environment:
          ZOO_MY_ID: 1
          ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    
      zoo2:
        image: zookeeper:3.4
        networks:
          zk-overlay:
            aliases:
              - zoo2
        restart: always
        hostname: zoo2
        ports:
          - 2182:2181
        environment:
          ZOO_MY_ID: 2
          ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
    
      zoo3:
        image: zookeeper:3.4
        networks:
          zk-overlay:
            aliases:
              - zoo3
        restart: always
        hostname: zoo3
        ports:
          - 2183:2181
        environment:
          ZOO_MY_ID: 3
          ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
          
    networks:
      zk-overlay:
        external:
          name: zk-overlay
    
    b, 创建一个overlay网络
    $ docker network create --attachable -d overlay zk-overlay 
    

    注意要添加参数--attachable,否则之后创建的客户端容器无法加入这个网络。

    c, 在Swarm Manager主机上运行
    $ docker stack deploy -c zk-stack.yml some-zookeeper
    

    3个zookeeper服务器容器将以swarm的复制模式启动 。端口2181-2183将对外暴露。

    c, 查看集群状态

    登录到运行Zookeeper容器的主机,查看容器id

    $ docker ps | grep zookeeper
    
    # zk容器列表
    8d5b86f4bb18        zookeeper:3.4   "/docker-entrypoin..."   3 hours ago         Up 3 hours             2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp                                  some-zookeeper_zoo1_1
    a614e3211de7        zookeeper:3.4   "/docker-entrypoin..."   3 hours ago         Up 3 hours             2888/tcp, 3888/tcp, 0.0.0.0:2182->2181/tcp                                  some-zookeeper_zoo2_1
    

    进入zk容器

    $ docker exec -it <container id> bash
    

    查看zk状态

    $ zkServer.sh status
    # 状态信息
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Mode: leader      # 是显示leader或者follower
    

    3 配置Zookeeper

    3.1 配置文件

    Zookeeper配置位于/conf。更改它的一种方法是将配置文件作为卷安装:

    $ docker run --name some-zookeeper --restart always -d -v $(pwd)/zoo.cfg:/conf/zoo.cfg zookeeper:3.4
    

    3.2 环境变量

    如果zoo.cfg未提供文件,则使用ZooKeeper推荐的默认值。可以使用以下环境变量覆盖它们。

    $ docker run -e "ZOO_INIT_LIMIT=10" --name some-zookeeper --restart always -d zookeeper:3.4
    
    ZOO_TICK_TIME

    默认为2000。zk的tickTime,以毫秒为单位。
    ZK中所有时间都是以这个时间单元为基础,进行整数倍配置。

    ZOO_INIT_LIMIT

    默认为5。zk的initLimit。
    Zookeeper等待客户端初始化连接的响应时,最长能等待多少个tickTime。例如默认设置为 5,表示超过5个心跳的时间(也就是ZOO_TICK_TIME)长度后 ,Zookeeper 服务器还没有收到客户端的返回信息,就认为这个客户端连接失败。总的超时时间等于ZOO_INIT_LIMITZOO_TICK_TIME=52000=10000毫秒

    ZOO_SYNC_LIMIT

    默认为2。zk的syncLimit
    Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime。例如默认设置为2,表示超过2个心跳的时间(也就是ZOO_TICK_TIME)长度后 ,Leader 与 Follower通信超时。

    ZOO_MAX_CLIENT_CNXNS

    默认为60。zk的maxClientCnxns
    单个客户端与单台zk服务器之间的连接数的限制,是ip级别的,如果设置为0,那么表明不作任何限制。

    3.3 复制模式

    如果要以复制模式运行Zookeeper,则必须使用下面的环境变量。

    ZOO_MY_ID

    id必须在整体中是唯一的,并且应该具有介于1和255之间的值。请注意,如果使用/data已包含该myid文件的目录启动容器,则此变量不会产生任何影响。

    ZOO_SERVERS

    此变量允许您指定Zookeeper集合的计算机列表。每个条目都有server.id=host:port:port。参赛作品以空格分隔。请注意,如果使用/conf已包含该zoo.cfg文件的目录启动容器,则此变量不会产生任何影响。

    3.4 数据的存储位置

    /data和/datalog分别用来保存内存数据库的快照和更新数据库的事务日志。

    放置事务日志的位置要考虑对性能的影响。专用的事务日志设备保持良好性能的关键。将日志置于繁忙的设备上会对性能产生负面影响。

    生产环境中zookeeper的数据文件需要保证持久性,可通过挂载数据目录到Gluster FS Volume。

    4 连接Zookeeper

    4.1 单点模式

    前提:单点模式启动一个名为some-zookeeper的zookeeper服务器容器。
    从一个Zookeeper客户端容器的命令行连接到Zookeeper服务器容器:

    $ docker run -it --rm --link some-zookeeper:zookeeper zookeeper:3.4 zkCli.sh -server zookeeper
    

    注意:

    • 参数--link后的some-zookeeper要和zookeeper服务器容器的名称一致;
    • 参数-server zookeeper是固定写法,无需改动。

    4.2 集群模式

    前提:集群模式启动一组zookeeper服务器容器。
    从一个Zookeeper客户端容器的命令行连接到Zookeeper服务器容器:

    $ docker run -it --rm --network zk-overlay --link zoo1:zookeeper zookeeper:3.4 zkCli.sh -server zookeeper
    

    注意:

    • 参数--network后的zk-overlay要和zookeeper集群的网络一致;
    • 参数--link后的zoo1,要和集群启动文件中的参数hostname: zoo1保持一致;
    • 参数-server zookeeper是固定写法,无需改动。
  • 相关阅读:
    Go的几种函数式编程范例
    换零钱和快速幂
    随笔不是博客
    leetcode-51
    leetcode-50
    拨号器
    简易计算器的实现
    python入门:1-100所有数的和
    python入门:输出1-10以内除去7的所有数(简)
    python入门:输出1-10以内除去7的所有数(自写)
  • 原文地址:https://www.cnblogs.com/yorkwu/p/9858306.html
Copyright © 2011-2022 走看看