文章目录
前言
兄弟🚪晚上好~好些天没更新了,这些天老忙了,今天咱们开始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集群就
成功安装配置好了,也简单的
验证了应用都是正常的,如果你觉得本篇文章对你
有帮助的话,希望兄弟🚪
收藏一下,万一以后用得着呢~~

版权归原作者 倪N 所有, 如有侵权,请联系我们删除。