【Docker搭建】3. 在Docker中搭建Zookeeper集群

docker pull zookeeper

docker run --name zk1 -d zookeeper

apt-get update
apt-get install vim
  • 进入配置文件后,需要添加如下配置,不然下面无法查看 Zookeeper 运行状态
    4lw.commands.whitelist=*

添加后的配置文件:

dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=localhost:2888:3888;2181
4lw.commands.whitelist=*
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 5
  • shell2:
    docker run --name zk2 -d zookeeper
  • shell3:
    docker run --name zk3 -d zookeeper

  • shell2:
    docker exec -it zk2 /bin/bash

  • shell3:
    docker exec -it zk3 /bin/bash
apt-get update
apt-get install vim
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
4lw.commands.whitelist=*
clientPort=2181
server.1=0.0.0.0:2888:3888
server.2=172.17.0.8:2888:3888
server.3=172.17.0.9:2888:3888

这里请注意: zk1 容器对应的本机ip地址,也就是 server.1 的ip地址为 0.0.0.0。并且其他集群容器的ip也因人而异,这里只是拿我本机的 172.17.0.7 做示范。大家还是要用 docker inspect zk1 查看自己的容器 ip 地址哦~
如果是 zk2 的配置文件,则应是:

clientPort=2181
server.1=172.17.0.7:2888:3888
server.2=0.0.0.0:2888:3888
server.3=172.17.0.9:2888:3888

再次注意:无论 zk 几, clientPort是不需要改的,统一用 2181就好。

vi /data/myid

如果是 zk2 ,就把 1删掉,输入 2。 zk3 同理。

docker restart zk1
docker restart zk2
docker restart zk3

echo stat | nc 172.17.0.7 2181
echo stat | nc 172.17.0.8 2181
echo stat | nc 172.17.0.9 2181

[root@VM-0-16-centos ~]# echo stat | nc 172.17.0.7 2181
Zookeeper version: 3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
Clients:
 /172.17.0.1:34874[0](queued=0,recved=1,sent=0)
 /175.0.122.47:53135[1](queued=0,recved=12,sent=12)

Latency min/avg/max: 1/6.75/19
Received: 13
Sent: 12
Connections: 2
Outstanding: 0
Zxid: 0x300000004
Mode: follower
Node count: 8
[root@VM-0-16-centos ~]# echo stat | nc 172.17.0.8 2181
Zookeeper version: 3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
Clients:
 /172.17.0.1:36698[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x300000004
Mode: leader
Node count: 8
Proposal sizes last/min/max: 664/36/664
[root@VM-0-16-centos ~]# echo stat | nc 172.17.0.9 2181
Zookeeper version: 3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
Clients:
 /172.17.0.1:56788[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x300000004
Mode: follower
Node count: 8

可以看到 zk2 成了 leader, zk1 和 zk3 为 follwer。集群初步部署成功。

修改容器映射端口本来是需要在通过镜像运行成容器时通过 -p 宿主机端口:容器 端口指定的,但是前面我没有指定,直接运行了,导致后面通过 Java API 操作不了,这时候就需要将宿主机端口映射到容器端口上,这样就可以通过 宿主机ip + 宿主机与容器映射的端口 访问了。

[root@VM-0-16-centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
f0fbc33f40c6        zookeeper           "/docker-entrypoint.…"   29 hours ago        Up 31 minutes       2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp                 zk3
b458e209c005        zookeeper           "/docker-entrypoint.…"   29 hours ago        Up 31 minutes       2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp                 zk2
90e7ee5bbbae        zookeeper           "/docker-entrypoint.…"   29 hours ago        Up 31 minutes       2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zk1

找到对应的三个 zk 容器ID分别为

  • 90e7ee5bbbae zk1
  • b458e209c005 zk2
  • f0fbc33f40c6 zk3
docker stop zk1
docker stop zk2
docker stop zk3
[root@VM-0-16-centos containers]# ls -al
total 44
drwx-----x 11 root root 4096 Mar  8 17:36 .
drwx--x--x 14 root root 4096 Mar  8 11:27 ..

drwx-----x  4 root root 4096 Mar  8 11:27 0f83816cf30aa27a1735d771f1e7b0114677005911c64d1b3840039b23559bff
drwx------  4 root root 4096 Mar  8 11:27 5d4d66b999ac246b32669bb790fb76015261cabd47a098cd9a85046bbd81ec19
drwx-----x  4 root root 4096 Mar  9 15:31 617d7e4721db4e5a175882d90d024621de39712841c866d60279dffb856b0561
drwx------  4 root root 4096 Mar  8 11:27 89bc5384ee62b95c64f8247b0af5eb2c7b0ae287cb444a7ddd7e2ecd0aee2764
drwx-----x  4 root root 4096 Mar  9 15:31 90e7ee5bbbaedb0d4cdde377583e224ff2142198e480e3da13789c8d8f41b067
drwx-----x  4 root root 4096 Mar  8 11:27 a06988405363fd774e18e1a5bdcf8d108d3767fd947e5f12214db2ccb43992b9
drwx-----x  4 root root 4096 Mar  9 15:31 b458e209c00501b8bd7ddd34eddacbe6800ce6e0ad69f9eb9a860a4d7e0999a3
drwx-----x  4 root root 4096 Mar  8 11:28 dac93cc33388f0c63a71475bbcc83e0c0f410c9e011bb9f1849adc17edf915d6
drwx-----x  4 root root 4096 Mar  9 15:31 f0fbc33f40c62e5745244b12269b303fbb6c4f3965281c7954e304f3681a9855

根据前面查到的容器id,进入 hostconfig.json然后修改对应的配置

vi 容器ID/hostconfig.json
如果之前没有端口映射, 应该有这样的一段:
"PortBindings":{}
增加一个映射, 这样写:
"PortBindings":{"2181/tcp":[{"HostIp":"","HostPort":"2181"}]}
前一个数字是容器端口, 后一个是宿主机端口.

而修改现有端口映射更简单, 把端口号改掉就行.

这里以zk1为例,其他两个分别修改为 "2182/tcp":[{"HostIp":"","HostPort":"2182"}] ,"2183/tcp":[{"HostIp":"","HostPort":"2183"}]
  • 启动 docker 服务
    systemctl start docker
  • 启动三个容器
docker start zk1
docker start zk2
docker start zk3

外部客户端就可以通过 宿主机ip + 宿主机 与容器映射的端口连接到该Zookeeper集群了

启动容器
docker start zk?

停止容器
docker stop zk?

重启容器
docker restart zk?

进入容器
docker exec -it zk?bash

删除容器
docker rm zk?

查看日志
docker logs -f zk?

Original: https://www.cnblogs.com/zilongmao/p/14486291.html
Author: 无尽函数
Title: 【Docker搭建】3. 在Docker中搭建Zookeeper集群

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608971/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • bash 中 echo & printf

    首先列一下今天收获的消息 sh是: Bourne Shell(/usr/bin/sh或/bin/sh) bash是: Bourne Again Shell(/bin/bash) p…

    Linux 2023年6月6日
    093
  • 大数库GMP测试

    任务详情 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到GMP官网htt…

    Linux 2023年6月8日
    095
  • Linux 如何设置开机自启动脚本

    https://blog.csdn.net/weixin_40343504/article/details/82457990 Original: https://www.cnblo…

    Linux 2023年6月13日
    0100
  • Docker Manager for Kubernetes

    一、Kubernetes介绍 Kubernets是Google开源的容器集群系统,是基于Docker构建一个容器的调度服务,提供资源调度,均衡容灾,服务注册,动态伸缩等功能套件; …

    Linux 2023年6月14日
    079
  • [云计算]OpenStack这一篇就够了!

    OpenStack简介 OpenStack背景介绍 OpenStack应用场景 OpenStack发展历程 OpenStack架构 架构设计原则 架构全景图 核心服务组件 系统通信…

    Linux 2023年6月13日
    0230
  • 每周一个linux命令(tree)

    安装tree命令 yum install tree -y 显示当前目录下的一级目录结构 tree -L 1 目录信息说明 bin: 系统常用命令所在目录 boot: 系统启动相关的…

    Linux 2023年6月8日
    095
  • redis 使用lua 生成流水号

    在实际的业务场景中,我们会用到流水号。之前的流水号做法是,使用redis的全局锁。然后对数据库进行更新,数据库更新 这个也会有一些问题,比如对于同一个流水号,多个线程去更新,由于事…

    Linux 2023年5月28日
    091
  • muduo源码分析之Buffer

    这一次我们来分析下 muduo中 Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们…

    Linux 2023年6月13日
    088
  • map_set使用说明

    map_set使用说明 map的底层结构大致是一个哈希表,set的底层结构大致是一个红黑树 不代表全部! set #include"map_set.h" //s…

    Linux 2023年6月13日
    089
  • Linux搭建SVN服务器详细教程

    前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置。 SVN是subversion的缩写,是一个开放源代码的版本控制系统,…

    Linux 2023年6月7日
    091
  • windows环境下启动多个redis服务(搭建redis集群)

    windows环境下启动多个redis服务(搭建redis集群一) 最终效果:本地安装好3个(多个)端口的redis服务。 1.下载并安装Redis 下载地址:https://gi…

    Linux 2023年5月28日
    093
  • acl/客户端缓存/多级缓存

    redis6安装注意点 我们课程里忽略了,就不去安装了,仅仅只提供安装文档,redis6的安装其实和redis5安装差不多,只是需要注意gcc的版本需要提高,不然编译会出错。参考慕…

    Linux 2023年5月28日
    089
  • linux 命令 df -h 查不到新添加的硬盘

    云平台:腾讯云系统:ubuntu 20.04 第一部分:缘由 1、我的一台云服务器上挂载了两块硬盘。一块 50G 系统盘、一块 400G 数据盘。然后我查询目前在 Linux 系统…

    Linux 2023年5月27日
    0327
  • ssl证书的选型,你知道多少?

    介绍 目前互联网常用的HTTP协议是非常不安全的明文传输协议。而SSL协议及其继任者TLS协议,是一种实现网络通信加密的安全协议,可在客户端(浏览器)和服务器端(网站)之间建立一条…

    Linux 2023年6月6日
    076
  • 【Leetcode】768. 最多能完成排序的块 II

    arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个”块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 …

    Linux 2023年6月6日
    088
  • 服务器部署 Vue 和 Django 项目的全记录

    本篇记录我在一个全新服务器上部署 Vue 和 Django 前后端项目的全过程,内容包括服务器初始配置、安装 Django 虚拟环境、python web 服务器 uWSGI 和反…

    Linux 2023年6月7日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球