> 文档中心 > 【Zookeeper】分布式集群(详细图文)

【Zookeeper】分布式集群(详细图文)

文章目录

  • 前言
    • Zookeeper简介
    • 特征/保障
    • ZK安装
    • ZK配置
    • ZK应用
    • 结尾语

前言

兄弟🚪晚上好~好些天没更新了,这些天老忙了,今天咱们开始Zookeeper打卡,依旧是从安装开始 ~ 配合官网来进行演示操作 ~


Zookeeper简介

ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。 所有这些类型的服务都以某种形式被分布式应用程序使用。 每次实施它们时,都会进行大量工作来修复不可避免的错误和竞争条件。 由于实现这些服务的难度,应用程序最初通常会忽略它们,这使得它们在发生变化时变得脆弱并且难以管理。 即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。 因此,Apache ZooKeeper 致力于开发和维护一个开源服务器,以实现高度可靠的分布式协调。

特征/保障

ZooKeeper 非常快速且非常简单。 但是,由于它的目标是成为构建更复杂服务(例如同步)的基础,因此它提供了一组保证。 这些是:

保证 释义
顺序一致性 来自客户端的更新将按照它们发送的顺序应用。
原子性 更新成功或失败。 没有部分结果。
单一系统映像 客户端将看到相同的服务视图,而不管它连接到的服务器如何。 即,即使客户端故障转移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。
可靠性 应用更新后,它将从那时起持续存在,直到客户端覆盖更新。
及时性 系统的客户视图保证在特定时间范围内是最新的。

ZK安装

根目录下新建soft目录用来存放下载的资源包

mkdir ~/soft

soft目录中下载我们本次操作所需要的zookeeperbin关键字编译好的包

cd ~/soft/wget --no-check-certificate  https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz

解压ZK压缩包

tar xf apache-zookeeper-3.8.0-bin.tar.gz

opt目录中新建soft文件夹存放我们解压后可执行zookeeper程序包

mkdir /opt/soft
mv apache-zookeeper-3.8.0-bin /opt/soft/zookeeper

ZK配置

找到应用包的conf目录

cd /opt/soft/zookeeper/conf/

备份zoo_sample.cfg文件

cp zoo_sample.cfg  zoo.cfg

我们修改备份出来的zoo.cfg,尽量不要直接修改原文件,因为不小心改错保存了那很浪费时间的,甚至可能得重新下载解压一条龙服务

在这里插入图片描述

编辑zoo.cfg

vi zoo.cfg

如图修改好dataDir路径,这个路径一般修改到var目录下我们自建的soft/zookeeper目录中去

📢兄弟们,咱们需要注意的是如果我们是在多台服务器上进行集群搭建的话需要在配置文件中加上quorumListenOnAllIPs=true配置,如果不配置这条就会出现连接报错,如果兄弟🚪是用VM创建的多个独立LInux系统去搭建的话那就不需要配置,这边我感觉大多数兄弟能来找zookeeper的相关教程说明都具有一定开发经验的,应该不需要教程了,但是(如果有好兄弟需要VM搭建教程的话下方留言我可以出一版~)

📢再说一句兄弟🚪,我配置4台是看到leader选举想验证一下的,正常配置奇数台就可以了,比如3台就可以,也就是下面配置里到server.4就可以删除掉

在这里插入图片描述

server.1=101.xxx.xxx.40:2888:3888server.2=1.xx.xxx.231:2888:3888server.3=120.xx.xxx.51:2888:3888server.4=175.xx.xxx.240:2888:3888#ip地址不是本机网卡时开启quorumListenOnAllIPs=true

创建咱们配置中刚配好的/var/soft/zookeeper目录

因为咱们需要创建多级目录,所以加上-p

mkdir -p /var/soft/zookeeper

配置myid

cd /var/soft/zookeepervi myid

在这里插入图片描述【Zookeeper】分布式集群(详细图文)

至此,咱们zookeeper集群的第一台机器配置就完成了,接下来咱们开始配置其他机器

在这里插入图片描述

我们在其他机器上提前建立好/opt/soft目录

mkdir /opt/soft

在我们配置好的第一台机器上/opt目录中逐个执行以下命令,执行命令后会有一段时间阻塞传输文件,可以开启多个连接窗口进行多台机器同步传输节省时间

scp -r ../soft/zookeeper/ 1.15.184.231:pwd:将soft目录下zookeeper文件夹远程传输到目标机器相同路径下,由于我们刚刚已经提前创建好/opt/soft目录了 所以直接执行命令即可

cd /opt/softscp -r  ../soft/zookeeper/ 1.xx.xxx.231:`pwd`scp -r  ../soft/zookeeper/ 175.xx.xxx.240:`pwd`#如果有兄弟想要再配更多机器的,自行传输相关文件到更多的目标机器,操作同上,更换IP地址即可

【Zookeeper】分布式集群(详细图文)在这里插入图片描述

创建其他机器的/var/soft/zookeeper目录,并将对应的id号覆盖到对应目录myid文件中

第二台机器创建目录及myid

mkdir -p /var/soft/zookeeperecho 2 > /var/soft/zookeeper/myidcat /var/soft/zookeeper/myid

第三台机器创建目录及myid

mkdir -p /var/soft/zookeeperecho 3 > /var/soft/zookeeper/myidcat /var/soft/zookeeper/myid

第四台机器创建目录及myid

📢配置三台的兄弟这一个就可以跳过

mkdir -p /var/soft/zookeeperecho 4 > /var/soft/zookeeper/myidcat /var/soft/zookeeper/myid

接下来我们配置一下环境变量,将ZOOKEEPER_HOME/bin追加到PATH中,这样我们就可以在任何地方使用zk的相关命令了

因为我这边用的目录都相同,所以直接Ctrl+C\V就可以了

vi /etc/profile
#jdk1.8export JAVA_HOME=/usr/local/share/jdk1.8.0_202#zookeeperexport ZOOKEEPER_HOME=/opt/soft/zookeeperexport PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/binexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

📢兄弟🚪,以下命令在当前bash环境下读取并执行FileName中的命令 . /etc/profilesource /etc/profile等效

. /etc/profile

在这里插入图片描述

ZK应用

查看zk启动命令辅助,可以看到zkServer.sh后可以接start|start-foreground|stop|version|restart|status|print-cmd等参数

zkServer.sh help

【Zookeeper】分布式集群(详细图文)

我们用start-foreground参数让zookeeper日志打在前台方便直接观察

这条命令咱们需要在配置好的几台机器上面按配置的序号顺序执行启动

leader选举:

  • 优先检查ZXID。ZXID比较大的服务器优先作为Leader。

  • 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。

这也就是我为什么上面配置4台机器的原因了,就是想看看myid为4的机器最后启动会不会被选举为新的leader

📢兄弟们正常启动用zkServer.sh start即可

#ZK启动zkServer.sh start-foreground

碰到类似报错不要惊慌兄弟🚪,这只是因为其他机器没启导致的,咱们继续将其他机器启动即可

在这里插入图片描述
在这里插入图片描述

再开一个连接窗口用来连接ZK的客户端
执行zkCli.sh启动客户端

zkCli.sh

命令参数释义:

参数 释义
cZxid 节点创建时的事务id
ctime 节点创建时间
mZxid 节点最近一次更新时的事务id
mtime 节点最近一次更新的时间
cversion 子节点数据更新次数
dataVersion 本节点数据更新次数
aclVersion 节点ACL(授权信息)的更新次数
ephemeralOwner 如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength 节点数据长度,本例中为hello world的长度

在根目录下创建一个新的rhys节点,内容为“”

[zk: localhost:2181(CONNECTED) 4] create /rhys ""Created /rhys

查看根节点

[zk: localhost:2181(CONNECTED) 5]   ls /[rhys, zookeeper]

rhys节点下创建一个新的ni节点,内容为“”

[zk: localhost:2181(CONNECTED) 6] create /rhys/ni ""Created /rhys/ni

查看rhys节点

[zk: localhost:2181(CONNECTED) 8] ls /rhys [ni]

设置rhys节点的内容为aaaget查看

[zk: localhost:2181(CONNECTED) 12] set /rhys "aaa"[zk: localhost:2181(CONNECTED) 13] get -e /rhysaaa

-e 代表创建临时节点,当创建该znode的client与zk的连接断开时,znode会被自动删除,临时模式znode不能有child node

[zk: localhost:2181(CONNECTED) 4] create -e /rhysni "aaaaa"Created /rhysni

-s 持久带序列,规避覆盖创建节点问题

[zk: localhost:2181(CONNECTED) 2] create -s /cover "cover"Created /cover0000000002[zk: localhost:2181(CONNECTED) 3] ls /[cover0000000002, rhys, rhysni, zookeeper]

zookeeper会自动生成一串序列,如果再有其他客户端并发下创建相同节点的话就会递增当前序列创建一个新的独立节点,有效的规避了覆盖创建的问题

【Zookeeper】分布式集群(详细图文)

咱们再连到另一台机器的客户端去创建相同的节点看看是什么情况

[zk: localhost:2181(CONNECTED) 0] create -s /cover "cover"Created /cover0000000003[zk: localhost:2181(CONNECTED) 1] ls /[cover0000000002, cover0000000003, rhys, rhysni, zookeeper]

【Zookeeper】分布式集群(详细图文)


结尾语

到这里,咱们ZK集群成功安装配置好了,也简单的验证了应用都是正常的,如果你觉得本篇文章对你有帮助的话,希望兄弟🚪收藏一下,万一以后用得着呢~~

在这里插入图片描述

名医百科医学知识库