1 使用docker-compose方式

  1. 拉取 Zookeeper 镜像:docker pull zookeeper:版本号
  2. 创建并编写vi docker-compose.yaml

    1. version: '3.3'
    2. services:
    3. zoo1:
    4. image: zookeeper:3.4.13
    5. restart: always
    6. hostname: zoo1
    7. container_name: zoo1
    8. ports:
    9. - "2181:2181"
    10. environment:
    11. ZOO_MY_ID: 1
    12. ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    13. zoo2:
    14. image: zookeeper:3.4.13
    15. restart: always
    16. hostname: zoo2
    17. container_name: zoo2
    18. ports:
    19. - "2182:2181" # 将docker容器中的2181端口映射到宿主机的2182端口
    20. environment:
    21. ZOO_MY_ID: 2
    22. ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    23. zoo3:
    24. image: zookeeper:3.4.13
    25. restart: always
    26. hostname: zoo3
    27. container_name: zoo3
    28. ports:
    29. - "2183:2181"
    30. environment:
    31. ZOO_MY_ID: 3
    32. ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
  3. 在 docker-compose.yaml 所在目录创建并启动容器,然后查看集群中一个容器的zookeeper状态

    1. docker-compose -p zk_cluster up -d # 创建并启动容器
    2. docker exec -it zoo1 bash ./bin/zkServer.sh status # 查看zoo1容器中zookeeper的状态

    2 纯手工方式

    2.1 准备好3个节点的配置文件

    zoo.cfg默认在/usr/local/etc/zookeeper目录下。在这个目录下创建zoo1.cfg zoo2.cfg zoo3.cfg。其中,各个节点需要配置相应的dataDir,clientPort。
    另外,server.1, server.2, server.3是集群配置信息,表明构成集群的3个节点。例如:server.A=B:D:D. 这里的A是一个数字,表示服务器的编号。B是这个服务器的ip地址。C是zookeeper服务器之间通信端口。D是Leader选举的端口。

  4. zoo1.cfg 配置文件 ```shell zookeeper $ cat zoo1.cfg

    The number of milliseconds of each tick

    tickTime=2000

    The number of ticks that the initial

    synchronization phase can take

    initLimit=10

    The number of ticks that can pass between

    sending a request and getting an acknowledgement

    syncLimit=5

    the directory where the snapshot is stored.

    do not use /tmp for storage, /tmp here is just

    example sakes.

    dataDir=/usr/local/var/run/zookeeper/zk1/data

    the port at which the clients will connect

    clientPort=2181

    the maximum number of client connections.

    increase this if you need to handle more clients

    maxClientCnxns=60

    #

    Be sure to read the maintenance section of the

    administrator guide before turning on autopurge.

    #

    http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    #

    The number of snapshots to retain in dataDir

    autopurge.snapRetainCount=3

    Purge task interval in hours

    Set to “0” to disable auto purge feature

    autopurge.purgeInterval=1

server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389

  1. 2. zoo2.cfg 配置文件
  2. ```shell
  3. zookeeper $ cat zoo2.cfg
  4. # The number of milliseconds of each tick
  5. tickTime=2000
  6. # The number of ticks that the initial
  7. # synchronization phase can take
  8. initLimit=10
  9. # The number of ticks that can pass between
  10. # sending a request and getting an acknowledgement
  11. syncLimit=5
  12. # the directory where the snapshot is stored.
  13. # do not use /tmp for storage, /tmp here is just
  14. # example sakes.
  15. dataDir=/usr/local/var/run/zookeeper/zk2/data
  16. # the port at which the clients will connect
  17. clientPort=2182
  18. # the maximum number of client connections.
  19. # increase this if you need to handle more clients
  20. #maxClientCnxns=60
  21. #
  22. # Be sure to read the maintenance section of the
  23. # administrator guide before turning on autopurge.
  24. #
  25. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  26. #
  27. # The number of snapshots to retain in dataDir
  28. #autopurge.snapRetainCount=3
  29. # Purge task interval in hours
  30. # Set to "0" to disable auto purge feature
  31. #autopurge.purgeInterval=1
  32. server.1=localhost:2287:3387
  33. server.2=localhost:2288:3388
  34. server.3=localhost:2289:3389
  1. zoo3.cfg 配置文件 ```shell zookeeper $ cat zoo3.cfg

    The number of milliseconds of each tick

    tickTime=2000

    The number of ticks that the initial

    synchronization phase can take

    initLimit=10

    The number of ticks that can pass between

    sending a request and getting an acknowledgement

    syncLimit=5

    the directory where the snapshot is stored.

    do not use /tmp for storage, /tmp here is just

    example sakes.

    dataDir=/usr/local/var/run/zookeeper/zk3/data

    the port at which the clients will connect

    clientPort=2183

    the maximum number of client connections.

    increase this if you need to handle more clients

    maxClientCnxns=60

    #

    Be sure to read the maintenance section of the

    administrator guide before turning on autopurge.

    #

    http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    #

    The number of snapshots to retain in dataDir

    autopurge.snapRetainCount=3

    Purge task interval in hours

    Set to “0” to disable auto purge feature

    autopurge.purgeInterval=1

server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389

  1. 4. 创建data目录和myid文件
  2. ```shell
  3. #创建如下data目录
  4. /usr/local/var/run/zookeeper/zk1/data
  5. /usr/local/var/run/zookeeper/zk2/data
  6. /usr/local/var/run/zookeeper/zk3/data
  7. #创建如下myid文件
  8. data $ cat /usr/local/var/run/zookeeper/zk1/data/myid
  9. 1
  10. data $ cat /usr/local/var/run/zookeeper/zk2/data/myid
  11. 2
  12. data $ cat /usr/local/var/run/zookeeper/zk3/data/myid
  13. 3
  1. 启动3个zookeeper ```shell $ zkServer start /usr/local/etc/zookeeper/zoo1.cfg ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo1.cfg Starting zookeeper … STARTED

$ zkServer start /usr/local/etc/zookeeper/zoo2.cfg ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo2.cfg Starting zookeeper … STARTED

$ zkServer start /usr/local/etc/zookeeper/zoo3.cfg ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo3.cfg Starting zookeeper … STARTED

  1. 6. 查看各个节点的状态:1leader2follower
  2. ```shell
  3. $ zkServer status /usr/local/etc/zookeeper/zoo1.cfg
  4. ZooKeeper JMX enabled by default
  5. Using config: /usr/local/etc/zookeeper/zoo1.cfg
  6. Mode: follower
  7. zkServer status /usr/local/etc/zookeeper/zoo2.cfg
  8. ZooKeeper JMX enabled by default
  9. Using config: /usr/local/etc/zookeeper/zoo2.cfg
  10. Mode: follower
  11. $ zkServer status /usr/local/etc/zookeeper/zoo3.cfg
  12. ZooKeeper JMX enabled by default
  13. Using config: /usr/local/etc/zookeeper/zoo3.cfg
  14. Mode: leader
  1. 进入zookeeper集群内部,登陆各个节点 ```shell $ zkCli -server localhost:2181 Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

$ zkCli -server localhost:2182 $ zkCli -server localhost:2183

在zk1上新建一个node,到zk2和3上能够马上查看到

[zk: localhost:2181(CONNECTED) 1] create /test-zk1 “test-zk1” Created /test-zk1

[zk: localhost:2182(CONNECTED) 1] get /test-zk1 test-zk1 cZxid = 0x100000007 ctime = Sat Mar 13 22:05:00 CST 2021 mZxid = 0x100000007 mtime = Sat Mar 13 22:05:00 CST 2021 pZxid = 0x100000007 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0

[zk: localhost:2183(CONNECTED) 0] get /test-zk1 test-zk1 cZxid = 0x100000007 ctime = Sat Mar 13 22:05:00 CST 2021 mZxid = 0x100000007 mtime = Sat Mar 13 22:05:00 CST 2021 pZxid = 0x100000007 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 ```