0


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

文章目录


前言

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


Zookeeper简介

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

特征/保障

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

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

ZK安装

根目录下新建

soft

目录用来存放下载的资源包

mkdir ~/soft

soft

目录中下载我们本次操作所需要的

zookeeper

bin

关键字

编译好

的包

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:3888
server.2=1.xx.xxx.231:2888:3888
server.3=120.xx.xxx.51:2888:3888
server.4=175.xx.xxx.240:2888:3888

#ip地址不是本机网卡时开启quorumListenOnAllIPs=true

创建咱们配置中刚配好的

/var/soft/zookeeper

目录

因为咱们需要创建

多级

目录,所以加上

-p
mkdir -p /var/soft/zookeeper

配置

myid
cd /var/soft/zookeeper

vi myid

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

至此,咱们

zookeeper集群

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

在这里插入图片描述

我们在其他机器上提前建立好

/opt/soft

目录

mkdir /opt/soft

在我们配置好的第一台机器上

/opt

目录中逐个执行以下命令,

执行命令后会有一段时间阻塞传输文件,可以开启多个连接窗口进行多台机器同步传输节省时间
scp -r ../soft/zookeeper/ 1.xx.xxx.231:pwd

:将

soft

目录下

zookeeper

文件夹远程传输到目标机器相同路径下,由于我们刚刚已经提前创建好

/opt/soft

目录了 所以直接执行命令即可

cd /opt/soft

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

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

创建其他机器的

/var/soft/zookeeper

目录,并将对应的

id

号覆盖到对应目录

myid

文件中

第二台机器创建目录及

myid
mkdir -p /var/soft/zookeeper

echo2> /var/soft/zookeeper/myid

cat /var/soft/zookeeper/myid

第三台机器创建目录及

myid
mkdir -p /var/soft/zookeeper

echo3> /var/soft/zookeeper/myid

cat /var/soft/zookeeper/myid

第四台机器创建目录及

myid

📢配置

三台

的兄弟这一个就可以

跳过

mkdir -p /var/soft/zookeeper

echo4> /var/soft/zookeeper/myid

cat /var/soft/zookeeper/myid

接下来我们配置一下环境变量,将

ZOOKEEPER_HOME/bin

追加到

PATH

中,这样我们就可以在任何地方使用

zk

的相关命令了

因为我这边用的

目录都相同

,所以直接

Ctrl+C\V

就可以了

vi /etc/profile
#jdk1.8exportJAVA_HOME=/usr/local/share/jdk1.8.0_202

#zookeeperexportZOOKEEPER_HOME=/opt/soft/zookeeper

exportPATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

📢兄弟🚪,以下命令在当前bash环境下读取并执行FileName中的命令

. /etc/profile

source /etc/profile

等效

. /etc/profile

ZK应用

查看zk启动命令辅助,可以看到

zkServer.sh

后可以接

start

|

start-foreground

|

stop

|

version

|

restart

|

status

|

print-cmd

等参数

zkServer.sh help

在这里插入图片描述

我们用

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节点创建时的事务idctime节点创建时间mZxid节点最近一次更新时的事务idmtime节点最近一次更新的时间cversion子节点数据更新次数dataVersion本节点数据更新次数aclVersion节点ACL(授权信息)的更新次数ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0dataLength节点数据长度,本例中为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

节点的内容为

aaa

get

查看

[zk: localhost:2181(CONNECTED)12]set /rhys "aaa"[zk: localhost:2181(CONNECTED)13] get -e /rhys
aaa
-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会自动生成一串

序列

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

在这里插入图片描述

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

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

在这里插入图片描述


结尾语

到这里,咱们

ZK集群

成功安装配置

好了,也简单的

验证了应用

都是正常的,如果你觉得本篇文章对你

有帮助

的话,希望兄弟🚪

收藏

一下,万一以后用得着呢~~

在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_44977377/article/details/123810632
版权归原作者 倪N 所有, 如有侵权,请联系我们删除。

“【Zookeeper】分布式集群(详细图文)”的评论:

还没有评论