Zookeeper分布式集群(详细图文)
Posted 倪N
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
echo 2 > /var/soft/zookeeper/myid
cat /var/soft/zookeeper/myid
第三台机器创建目录及
myid
mkdir -p /var/soft/zookeeper
echo 3 > /var/soft/zookeeper/myid
cat /var/soft/zookeeper/myid
第四台机器创建目录及
myid
📢配置
三台
的兄弟这一个就可以跳过
了
mkdir -p /var/soft/zookeeper
echo 4 > /var/soft/zookeeper/myid
cat /var/soft/zookeeper/myid
接下来我们配置一下环境变量,将
ZOOKEEPER_HOME/bin
追加到PATH
中,这样我们就可以在任何地方使用zk
的相关命令了因为我这边用的
目录都相同
,所以直接Ctrl+C\\V
就可以了
vi /etc/profile
#jdk1.8
export JAVA_HOME=/usr/local/share/jdk1.8.0_202
#zookeeper
export ZOOKEEPER_HOME=/opt/soft/zookeeper
export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin
export CLASSPATH=.:$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 节点创建时的事务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
节点的内容为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集群
就成功安装配置
好了,也简单的验证了应用
都是正常的,如果你觉得本篇文章对你有帮助
的话,希望兄弟🚪收藏
一下,万一以后用得着呢~~
以上是关于Zookeeper分布式集群(详细图文)的主要内容,如果未能解决你的问题,请参考以下文章