Centos7 环境使用 Docker 安装 Zookeeper 集群详解

简介: Centos7 环境使用 Docker 安装 Zookeeper 集群详解

在工作中, 如果你的项目依赖于zookeeper服务, 你又不想再开个那么笨重的虚拟机挂载zookeeper, 那么在本机上安装docker是你的不二选择

没有在Mac OS上安装Docker的, 可参考 MAC OSX Docker安装教程2018

此教程同样适用于CentOS, CentOS上安装 Docker 参考 Centos7如何安装Docker

1 镜像下载

# 没有指定TAG既是安装Hub上latest版本
docker pull zookeeper
# 列出docker所有镜像
docker images

出现下列信息既是安装成功

REPOSITORY TAG IMAGE ID CREATED SIZE
zookeeper latest d60e1940f7d8 6 hours ago 211MB

2 启动zk镜像

docker run --name zookeeper -d -p 2181:2181 zookeeper
  • —name :创建一个名称为 zookeeper 的容器
  • -p :将容器的 2181 端口挂载到宿主机的 2181 端口
  • -d : 容器以后台的形式运行
# 查看zookeeper的启动日志
docker logs -f zookeeper
# 查看docker所有运行的容器
docker ps
# 表示zookeeper容器正在运行中
CONTAINER ID   IMAGE      COMMAND    CREATED     STATUS      PORTS     NAMES 
d980b7aa8c47   zookeeper  ...                 ...                 ...                 ...       zookeeper

3 使用zk命令行客户端连接zk

# 进入zookeeper容器
docker exec -it zookeeper /bin/bash

# 进入容器内部bin目录下
cd bin

# 客户端请求连接服务器
./zkCli.sh

# 客户端连接服务器成功标志
Welcome to ZooKeeper!

# h - 客户端命令帮助
[zk: localhost:2181(CONNECTED) 0] h
ZooKeeper -server host:port cmd args
    addauth scheme auth
    close
    config [-c] [-w] [-s]
    connect host:port
    create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    delete [-v version] path
    deleteall path
    delquota [-n|-b] path
    get [-s] [-w] path
    getAcl [-s] path
    history
    listquota path
    ls [-s] [-w] [-R] path
    ls2 path [watch]
    printwatches on|off
    quit
    redo cmdno
    removewatches path [-c|-d|-a] [-l]
    rmr path
    set [-s] [-v version] path data
    setAcl [-s] [-v version] [-R] path acl
    setquota -n|-b val path
    stat [-w] path
    sync path
    
# 展示制定目录下结构
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
# 创建一个节点并对节点进行赋值
[zk: localhost:2181(CONNECTED) 1] create /test name
Created /test
# 再次查看目录
[zk: localhost:2181(CONNECTED) 2] ls /
[test, zookeeper]
# 获取节点的内容
[zk: localhost:2181(CONNECTED) 3] get /test
name

至此一个单机版的zk节点就完成了,可以通过idea中的zk插件进行连接测试或使用代码api验证

如果只需要一个节点,就不用向下进行了

$\color{red}{为了方便区别名称,将名称为zookeeper的容器删除,为组建集群做准备}$

执行命令删除 docker rm -f zookeeper

4 zk的docker容器集群搭建

下面介绍的方法, 只是搭建集群的一种方式, 如果觉得麻烦可以使用 docker-compose 来搭建

4.1 启动三个zk节点

docker run -d --name zk1 -p 2181:2181 -d zookeeper
docker run -d --name zk2 -p 2182:2181 -d zookeeper
docker run -d --name zk3 -p 2183:2181 -d zookeeper

4.2 获取zk容器的ip地址

通过docker inspect {container_name}命令, 返回的是一个关于docker容器信息的一个json串,根据"IPAddress": "172.17.0.2", 我们可以获取到所有zookeeper单节点的ip地址

  • zk1:172.17.0.2
  • zk2:172.17.0.3
  • zk3:172.17.0.4

4.3 修改配置文件

# 进入容器
docker exec -it zk1 /bin/bash
# 容器中默认是没有vi或vim的
# 安装vim 
apt-get update
apt-get install vim
# 修改zk的配置文件
vim /conf/zoo.cfg
# 修改配置文件之后查看
cat /conf/zoo.cfg

clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
# 2888是zk集群之间通信的端口
# 3888是zk集群之间投票选主的端口
server.1=172.17.0.2:2888:3888
server.2=172.17.0.3:2888:3888
server.3=172.17.0.4:2888:3888
# 将1输出到/data/myid文件中
# 从配置中看出,zk1的服务名为server.1, 这 1 是指定的服务名称  
echo 1 > /data/myid

将zk2、zk3也按照zk1的步骤配置一遍,唯一的不同在于echo输出的是不同zk节点的服务名称

4.4 重启三个zk容器

# 将上面配置修改之后重启zk容器
docker restart zk1
docker restart zk2
docker restart zk3

4.5 验证集群状态

# 进入zk1容器
docker exec -it zk1 /bin/bash
cd bin
# 查看集群状态
./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

可以看出Mode是 follower, 证明 zk1 是从节点

Follower 角色

参与Leader的选举投票
参与事务请求提议的投票
处理客户端非事务请求,以及转发事务请求给Leader服务器

接下来进入zk2查看节点状态

docker exec -it zk2 /bin/bash
cd bin
./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

zk2的Model是 leader, 证明是主节点, zk3不用看也就知道是从节点。

Leader 角色

有且仅有一个Leader节点
客户端的写请求一定会发送到leader
客户端的读请求会根据算法发送到不同节点
集群内部的各个服务器(Follower、Observer)的调度者
事务请求的唯一调度者和处理者,保证集群事务处理的顺序性
leader接收所有客户端的写请求,然后转发给所有的follower节点
所有follower节点的数据都只会从leader上去同步,followert节点负责投票

zk还有一种节点角色是观望者

Observer 角色

不影响写性能的情况下去水平扩展zookeeper
直接为客户端服务但并不参与提案的投票,同时与leader进行数据交换(同步)

至此,整个基于docker的zk集群就算是搭建完毕了

大家可以进入zk的客户端使用命令进行创建、删除等操作,不出意外一处修改或者新增,整个集群数据都是保持一致的

虽然在 follower 也可以进行新增、修改数据节点,但是! $\color{red}{真正操作节点数据的只会是leader节点}$

5 致命三连

之前在一家公司面试时,面试官抛出了几个问题
小伙砸,简述下ZK的文件系统和通知机制
小伙砸,ZK的ZAB协议中的崩溃恢复和原子广播了解么?
小伙砸,ZK为什么能够做分布式锁?有什么优缺点?

一脸懵逼、二脸懵逼......呆若木鸡

带着一些疑问和探索的精神可以阅读️下方推荐,都有你想知道的

6 推荐阅读

《从Paxos到ZooKeeper:分布式一致性原理与实践 》
作者:倪超 花名:银时

最近有看到阿里中间件团队推出微服务引擎,公测期间免费 链接地址
相关文章
|
5月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1023 69
|
4月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
1591 2
|
5月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
445 78
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
551 5
|
4月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
724 16
|
5月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
434 10
|
5月前
|
运维 网络协议 Linux
CentOS下Bind服务的安装与故障排查
通过以上的步骤,您应该能够在CentOS系统上安装并配置BIND DNS服务,并进行基本的故障排查。
466 0
|
5月前
|
存储 Ubuntu Linux
安卓手机免root安装各种Linux系统:Ubuntu, Centos,Kali等
此外还可以安装Slackware、Archstrike等系统,还可以通过github查找方法安装更多有趣的东西。 昨日小编就是通过Termux安装的Kali Linux工具包。
|
Java Linux
Linux(centos 7.5)服务器安装Zookeeper
Linux(centos 7.5)服务器安装Zookeeper
192 0
|
Linux
Linux centos8安装zookeeper
Linux centos8安装zookeeper
313 0