• 容器化系列


    本文简要说明了如何在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是固定写法,无需改动。
  • 相关阅读:
    Exchange 2013与 Office Web Apps 整合
    SharePoint2013 以其他用户登录和修改AD域用户密码 功能
    sharepoint 2010 自定义页面布局
    sharepoint 2010 记录管理 对象模型
    SharePoint2010 对象模型 关联列表
    在SharePoint Server 2010中更改“我的网站”
    xenapp 6.5 客户端插件第一次安装总是跳到官网
    如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
    在Win7 Hyper-v虚拟机中挂接真实机的声卡
    win8 中如何删除 共享文件夹 用户名和密码
  • 原文地址:https://www.cnblogs.com/yorkwu/p/9858306.html
Copyright © 2020-2023  润新知