Zookeeper集群搭建

介绍:

  通过Docker搭建Zookeeper集群,本文在一台机器上搭建zk集群(伪集群),说是伪集群是因为没有实现在多台服务器上搭建,但是从另一个角度来说,这确实也是一个真正的集群,因为使用Docker容器化技术。

实现过程:

  步骤:

    1.首先在docker里拉取Zookeeper镜像

docker pull zookeeper:3.4.14  #这里没有拉取最新版,在实验时我拉取了最新版,出了一些问题

     2.构建docker-compose.yml,创建在/usr/local下创建docker目录,用于构建docker-compose.yml,在docker目录下创建zookeeper目录(创建的这些目录更具自己的习惯来定)

version: '3.1'
services:
    zoo1:
        image: zookeeper:3.4.14    #这里要指明版本,不然运行的时候docker回去拉取最新的zookeeper版本运行
        restart: always
        hostname: zoo1  #主机名,这里是模拟,所以使用主机名(局域网内可以通过主机名进行互通)
        ports:
            - 2181:2181  
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo2:
        image: zookeeper:3.4.14
        restart: always
        hostname: zoo2
        ports:
            - 2182:2181
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo3:
        image: zookeeper:3.4.14
        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=zoo3:2888:3888

     3.运行docker-compose(需要安装docker-compose,下面说)

docker-compose up -d

     4.运行成功后进入容器查看情况

docker exec -it  容器ID  bash

     5.进入各容器查看那个是Leader , 那个是Follower

#进入到容器内部ZK的bin目录
./zkServer.sh status

     Zookeeper集群模式配置文件(conf/zoo.cfg)

clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=192.168.0.1:2888:3888
server.2=192.168.0.2:2888:3888
server.3=192.168.0.3:2888:3888

  initLimit:配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 initLimit(默认为 10) 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5 * 2000 = 10 秒

  syncLimit:配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2 * 2000 = 4 秒

定时清理(Zookeeper 从 3.4.0 开始提供了自动清理快照和事务日志的功能)以下两个参数配合使用:

  autopurge.purgeInterval:指定了清理频率,单位是小时,需要填写一个 1 或更大的整数,默认是 0,表示不开启自己清理功能。

  autopurge.snapRetainCount:指定了需要保留的文件数目。默认是保留 3 个。

  maxClientCnxns:限制连接到 Zookeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制。

  server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器。B 是这个服务器的 IP 地址。C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口(2888);D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口(3888)。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

    ZK常用命令

./zkServer .sh start   #启动服务

./zkServer .sh stop   #停止服务

./zkServer .sh restart  #重启服务

./zkServer .sh status   #服务状态

 

  安装docker-compose

     Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具。
使用 Docker Compose 不再需要使用 shell 脚本来启动容器。(通过 docker-compose.yml 配置)

      Github源  

curl -L https://github.com/docker/compose/releases/download/1.23.0-rc3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

      给予权限

chmod +x /usr/local/bin/docker-compose

    

生命不止,折腾不息
原文地址:https://www.cnblogs.com/steakliu/p/11837641.html