- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
Zookeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务式环境中协调和管理服务是一个复杂的过程。Zookeeper通过简单的架构和API解决了这个问题。Zookeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
在分布式系统中,需要有zookeeper作为分布式协调组件,协调分布式系统中的状态。
zk在实现分布式锁上,可以做到强一致性(顺序一致性)。
下载地址:https://zookeeper.apache.org/releases.html
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
# zookeeper时间配置的基本单位
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
# zookeeper数据存储目录及日志保存(如果没有知名dataLogDir, 则日志也保存在这个文件中)
dataDir=/usr/local/zookeeper/zkdata
#dataLogDir=/usr/local/zookeeper/zkdata
# 对客户端提供的端口号
clientPort=2181
# 单位客户端与zookeeper最大并发连接数(处理更多客户端)
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
# 自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除
autopurge.purgeInterval=1
conf
中zoo_sample.cfg
为 zoo.cfg
cp zoo_sample.cfg zoo.cfg
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin
bin/zkServer.sh start conf/zoo.cfg
bin/zkServer.sh status
bin/zkServer.sh stop conf/zoo.cfg
Cli连接本地服务器
bin/zkCli.sh
Cli连接指定服务器
bin/zkCli.sh -server 192.168.56.21:2181
zk中数据是保存在节点上的,节点就是znode,多个znode支架构成一棵树的目录结构。
创建节点
create /test1
create /test1/sub1
ls /
ls /test1
创建节点test2
,并放入数据abc
create /test2 abc
获取数据
get /test2
data:保存数据
acl:权限(定义什么用户能操作此节点,并且进行怎样的操作)
c:create创建权限,允许该节点下创建子节点
w:write更新权限,允许更新该节点的数据
r:read读取权限,允许读取该节点的内容以及子节点的列表信息
d:delete删除权限,允许删除该及诶单的子节点
a:admin管理者权限,允许对该节点进行alc权限设置
stat:描述当前znode的元数据
child:当前节点的子节点
create /test5
create -s /test5
create -e /test5
临时节点维持心跳:
zk的数据是运行在内存中,zk提供了2中持久化机制:
zk通过两种的时间间隔内做一次内存数据的快照,把该时刻的内存数据保存在快照文件中。
1、创建持久节点
create /test5
2、创建持久序号
节点(并发很严重时)
create -s /test5
3、创建临时节点
create -e /test5
4、创建临时序号节点
create -e -s /test6
5、Container节点(3.5.3版本新增)
# 创建容器节点
create -c /mycontainer
# 创建子节点
create /mycontainer/sub1
create /mycontainer/sub2
# 删除子节点
delete /mycontainer/sub1
delete /mycontainer/sub2
6、TTL节点
zookeeper.extendTypesEnabled=true
get -s /test2
delete /test1
deleteall /test1
按照数据版本号删除(乐观锁删除)delete -v 版本 /节点
delete -v 1 /test2
addauth digest charles:123456
create /test-node abc auth:charles:123456:cdwra
其他会话读取,权限不足提醒
官网:https://curator.apache.org/
Curator是Netflix公司开源的一套zookeeper客户端框架,Curator是对Zookeeper支持最好的客户端框架。Curator封装了大部分Zookeeper的功能,比如Leader选举、分布式锁等,减少了技术人员在使用Zookeeper时的底层细节开发的工作。
引入依赖
https://www.bilibili.com/video/BV1Ph411n7Ep?p=14
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.7.1</version>
</dependency>
1、在/usr/local/zookeeper
中创建zk1~zk4,然后 新建 myid
文件
echo 1 > ./zk1/myid
echo 2 > ./zk2/myid
echo 3 > ./zk3/myid
echo 4 > ./zk4/myid
2、编写zoo.cfg文件
伪分布式(4个)
# The number of milliseconds of each tick(zookeeper时间配置的基本单位)
tickTime=2000
# The number of ticks that the initial
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
# 修改为对应的zk1、zk2、zk3、zk4
dataDir=/usr/local/zookeeper/zkdata/zk1
# 对客户端提供的端口号
clientPort=2181
# 2001为集群通信端口,3001为集群选举端口,observer表示不参数集群选举
server.1=192.168.56.20:2001:3001
server.2=192.168.56.20:2002:3002
server.3=192.168.56.20:2003:2003
# server.4=192.168.56.23=2004:2004:observer
3、启动3台Zookeeper
./bin/zkServer.sh start ./conf/zoo1.cfg
./bin/zkServer.sh start ./conf/zoo2.cfg
./bin/zkServer.sh start ./conf/zoo3.cfg
1、创建数据存放目录
mkdir -p /usr/local/zookeeper/zkdata
2、修改 zoo.cfg
cp zoo_sample.cfg zoo.cfg
# The number of milliseconds of each tick
tickTime=10000
# The number of ticks that the initial
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
# zookeeper数据存储目录及日志保存(如果没有知名dataLogDir, 则日志也保存在这个文件中)
dataDir=/usr/local/zookeeper/zkdata
#dataLogDir=/usr/local/zookeeper/zkdata
# 客户端默认端口 2181
clientPort=2181
# 单位客户端与zookeeper最大并发连接数(处理更多客户端)
maxClientCnxns=60
# 自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除
autopurge.purgeInterval=1
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
server.1=192.168.56.20:2888:3888
server.2=192.168.56.21:2888:3888
server.3=192.168.56.22:2888:3888
# server.4=192.168.56.23=:2888:3888:observer
3、将zookeeper目录发送到其他节点
scp -r /usr/local/zookeeper/ 192.168.56.21:/usr/local
scp -r /usr/local/zookeeper/ 192.168.56.22:/usr/local
4、分别修改三台机器 myid
echo 1 > /usr/local/zookeeper/zkdata/myid
echo 2 > /usr/local/zookeeper/zkdata/myid
echo 3 > /usr/local/zookeeper/zkdata/myid
5、编写操作 zookeeper 集群的脚本
cd /usr/local/zookeeper/bin
vim zk.sh
# 添加如下内容
#!/bin/bash
case $1 in
"start"){
for i in master slave1 slave2
do
echo ---------- $i zookeeper 启动 ----------
ssh $i "/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in master slave1 slave2
do
echo ---------- $i zookeeper 停止 ----------
ssh $i "/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in master slave1 slave2
do
echo ---------- $i zookeeper 状态 ----------
ssh $i "/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkServer.sh status"
done
}
;;
esac
# 保存退出后,修改zk.sh脚本执行权限
chmod +x ./zk.sh
脚本说明:
# 启动集群命令
./zk.sh start
# 停止集群命令
./zk.sh stop
# 查看集群状态命令
./zk.sh status
6、启动集群
/usr/local/zookeeper/bin/zk.sh start
或
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin
./bin/zkServer.sh start ./conf/zoo.cfg
工具连接
bin/zkCli.sh
参考地址:
https://www.bilibili.com/video/BV1Ph411n7Ep
https://blog.csdn.net/u011109589/article/details/124907414
我最近安装了一个带有 Exhibitor 的新 ZK 节点,它开始正常。当我执行 telnet localhost 2181 然后运行 stats 以查看版本时,即使我安装了 3.4.11,我仍然
每 the zookeeper docs , 可以创建一种以“ super ”用户身份访问 Zookeeper 集合的方法。这样做的方向在配置和连接方法方面都有些模糊。它确实巧妙地表明这只能通过 Ja
场景如下: Znode 创建:create/config 12345(例如创建于12/12/12) 更新此配置,设置/config 34567(例如在 2013 年 12 月 12 日修改) 一个月后
使用Zookeeper API,是否可以知道当前服务器是否是Zookeeper集群的leader? 文档提到领导者看到了所有追随者中最高的zxid。。是否有可能以某种方式检查? 最佳答案 您可以从不同
我正在学习 ZooKeeper 并研究备份存储在 ZooKeeper 中的数据的选项。 ZooKeeper 写入两个数据文件,快照和事务日志。人们经常提到快照是“模糊的”,需要重放事务日志以获取最新状
用例:一个池中有 100 个服务器;我想在每个服务器上启动一个 ZooKeeper 服务,服务器应用程序(ZooKeeper 客户端)将使用 ZooKeeper 集群(读/写)。那么就没有单点故障。
我正在运行 3 节点 zookeeper 集群来处理 Storm 和 kafka.Zookeeper 数据目录占用了我系统中的所有空间。我不知道如何清理它。因为,我不想完全删除数据,因为我会丢失进程的
我是 Zookeeper 的新手,试图了解它是否适合我的用例。 我有 1000 万个分层数据,我想将它们存储在 Zookeeper 中。 10M 键值对,键值对大小分别为 1KB。 因此,在没有复
在 here 有人说: "even if you read from a different follower every time, you'll never see version 3 of th
Zookeeper 临时节点是否写入磁盘? 我知道在 Zookeeper 确认写入客户端之前,正常的 Zookeeper 节点已写入磁盘。 但是,临时节点仅在客户端 session 期间持续,因此如果
在开发阶段使用zookeeper大约6个月后,虽然运行良好,但其数据目录的大小增长到 6 GIG !而且还在增加。下面列出了一些系统规范: zookeeper version: 3.4.6 numbe
我试图了解 Apache ZooKeeper 在裂脑情况下的内部工作原理。假设有一个由 5 个服务器组成的集群:A、B、C、D 和 E,其中 A 是领导者。现在假设子簇 {A, B} 与子簇 {C,
动物园管理员专家。 我问的问题对你来说可能很基础,但我是 ZK 的新手,我还没有掌握该工具,所以请原谅。考虑到这一点,这是我的问题。 假设我有一个由 5 个服务器组成的 ZK 集群,我有 3 个法定人
我正在尝试了解 Zookeeper 中的分层仲裁。文档 here 举了一个例子,但我仍然不确定我是否理解它。我的问题是,如果我有一个双节点 Zookeeper 集群(我知道不推荐这样做,但为了这个例子
我们使用的是2.3.0版本的curator-framework连接pom文件中的zookeeper。 org.apache.curator curator-fram
我们在开发机器上有一个独立的 zookeeper 设置。除了这台 testdev 机器之外,它适用于所有其他开发机器。 尝试通过 testdev 连接到 zookeeper 时,我们一遍又一遍地收到此
zookeeper 事务日志变得非常大(数千兆字节!)并且集群的每台机器中始终存在一个或最多两个事务日志文件,因为知道可能存在多个快照! .. 引入 autopurge.purgeInterval 和
本文整理了Java中org.apache.flink.shaded.zookeeper.org.apache.zookeeper.ZooKeeper.getSessionId()方法的一些代码示例,展
我需要一些帮助来使用 zookeeper-shell.sh 验证 znode(path) 是否存在于 zookeeper 中 示例:bin/zookeeper-shell.sh zk:9091 ls/
我需要使用 tcpdump 调试我的 kafka 消费者和 zookeeper 之间交换的数据。我浏览了 zookeeper 文档,但找不到任何关于 zookeeper 通信协议(protocol)的
我是一名优秀的程序员,十分优秀!