sxd-zookeeper 初识
2021-07-15 10:18:14 0 举报
介绍zookeeper安装、数据存储的结构,基本原理、连接原理、zab原理、paxos、主节点恢复、分布式锁的实现
作者其他创作
大纲/内容
linux 目录不可存数据
z3/zoo.cfg
leader
4个节点到5个节点
命令查询
follow
快速恢复leader
从:会从主获取之间的差异-获取文件
myid:3zxid:8
强一致性
zookeeper 有2种状态1 可用状态2 不可用状态
安装jdk
ClientB
启动命令cd /usr/local/Cellar/apache-zookeeper-3.6.0-bin./bin/zkServer.sh start-foreground study/z1/zoo.cfgstart-foreground 控制台打印
分布式锁
集群恢复
observer
eg: 04节点先发现
client
wirte
4.4 ok
会有权重1. 经验最丰富的zxid2.myid
持久节点
session + e
ok
为什么选zk做分布式锁
争抢锁只能一个人抢到
node可以存数据
过程中,停止对外提供服务
leader 挂掉了
3个节点到4个节点
2
2种场景
执行ls /
集群服务下
create -e
特征/保证
follower 1
node 02
锁:就是保证强一致性
CP允许网络异常的情况下,提高一致性
客户端2
03发送投票包
原理信息
create [-s] [-e] [-c] [-t ttl] path [data] [acl]create /a 创建一个持久化的节点create -e /a 创建一个临时的节点
客户端连接
04发送投票包
一致性(Consistency)
主要配置
myid:4zxid:7
4.3 write
[zk: 127.0.0.1:2181(CONNECTED) 32] ls -s /a[]cZxid = 0x400000011 创建时的idctime = Sat Jun 05 00:15:28 CST 2021 创建时间mZxid = 0x400000011 修改时的idmtime = Sat Jun 05 00:15:28 CST 2021pZxid = 0x400000011. 下一层目录的,最后创建时的idcversion = 0 创建的版本dataVersion = 0 数据版本aclVersion = 0 acl版本ephemeralOwner = 0x0 临时节点归属者dataLength = 0 数据长度
1. 以熟悉的文件系统目录树结构为样式的数据模型2. ZooKeeper 数据保存在内存中3. 可以实现高吞吐量和低延迟
释放
对一致性理论的一个补充
原子性 - 更新要么成功要么失败。没有部分结果。
AP高可用
node 03
zk
./bin/zkServer.sh status study/z1/zoo.cfg
创建一个子节点
弱一致性
BASE 理论
连接原理
z2/zoo.cfg
如果server端挂了,创建的临时节点会丢失吗??不会!!!!!redis 集群会统一试图。。验证方式--事物id1. 先创建一个节点 ,记录当前事物id ,其他都不要做任何操作2. 启用2个客户端3. 创建一个目录,查看当前目录事物id,会发现递增了3个,2+1=3
follower 3sync 如过不同步则去不到最新的数据
修改配置文件
1
leader 挂了
callback
临时节点
否决
./bin/zkCli.sh -server 127.0.0.1:2183 客户端连接:LearnerSessionTracker@116] - Committing global session 0x3000025c9ed0002 服务端对应的日志 记录当前绘画 session 0x3000025c9ed0002
选举过程
提供写、删
第一次启动集群
主从复制
watch /abc
临时节点丢失了,数据也都没了
每个客户端都监听父节点,有客户端变动,通知其他节点
clientPort=2181server.1=localhost:2287:3387server.2=localhost:2288:3388server.3=localhost:2289:3389[:observer]dataDir=/usr/local/Cellar/apache-zookeeper-3.6.0-bin/study/z2
200ms恢复
每个客户端都监听自己的前一个节点
客户端3
node 05
z1/zoo.cfg
follower
数据同步 没有同步完
设计
客户端1
各自发送投票包
paxos:基于2段式提交原子:成功、失败 没有中间状态 (队列+ 2PC)广播:分布式多节点的,并不全部都知道(过半)zk的数据存在内存,log存日志
安装 启动
set 新值
中间会有3秒延迟
follower 2sync 可选项
抢到的锁释放问题(成功、异常退出)
CAP
数据存储参数详解
session (会话)
下载zookeeper
复制
ZooKeeper 实现非常重视高性能、高可用、严格有序的访问。ZooKeeper 的性能方面意味着它可以用于大型分布式系统。可靠性方面使其不会成为单点故障。严格的排序意味着可以在客户端实现复杂的同步原语。
最终投票结果
get 报错
myid:1zxid:8
99.9999
数据
create/update
资源
最终一致性
4.1.log
比较强的一致性分布式协调
clientPort=2181server.1=localhost:2287:3387server.2=localhost:2288:3388server.3=localhost:2289:3389[:observer]dataDir=/usr/local/Cellar/apache-zookeeper-3.6.0-bin/study/z3
create -s 创建一个序列化的节点 create -s /a => Created /a0000000005
时序性
cd /usr/local/Cellar/apache-zookeeper-3.6.0-bin./bin/zkCli.sh -server 127.0.0.1:2181./bin/zkCli.sh -server 127.0.0.1:2182./bin/zkCli.sh -server 127.0.0.1:2183
db1
watch
发送投票包
选举端口连接
4.1 log
1. 可用性比较强,一致性比较弱(当然你可以设置强一致,但是我们选择的原因就是高性能)2. 适合存储数据
[zk: 127.0.0.1:2181(CONNECTED) 35] create /a/a1 a1 Created /a/a1[zk: 127.0.0.1:2181(CONNECTED) 36] ls -s /a/a1[]cZxid = 0x400000013ctime = Sat Jun 05 00:26:23 CST 2021mZxid = 0x400000013mtime = Sat Jun 05 00:26:23 CST 2021pZxid = 0x400000013cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 2numChildren = 0
参与投票选举leader是否同意写、删除
get 拿到历史数据
zookeeper分布式协调扩展,可靠性,时序性快速!!!
如果数据不强一致
将当前目录设置一个新的值[zk: 127.0.0.1:2181(CONNECTED) 33] set /a a[zk: 127.0.0.1:2181(CONNECTED) 34] ls -s /a[]cZxid = 0x400000011 ctime = Sat Jun 05 00:15:28 CST 2021mZxid = 0x400000012 他递增了一个mtime = Sat Jun 05 00:22:29 CST 2021pZxid = 0x400000011cversion = 0dataVersion = 1 数据版本增加了aclVersion = 0ephemeralOwner = 0x0dataLength = 1 数据长度,如果更改则改,不动则不动numChildren = 0
数据如果强一致
增、删、改操作由leader发起
创建文件夹、cp配置文件、myidstudy/z1 zoo.cfg myid ->1 study/z2 zoo.cfg myid ->2study/z3 zoo.cfg myid ->3
node 01: 2票node 03: 3票node 04: 1票
client2
node 04
client1
事件:eventcreatechangedeletechildren
5. ok
myid 和 server.1 对应上
3ge2节点
通知
拓展性
Paxos 分布式数据一致性协议zab z:zookeeper、a :atom原子、b:broadcast 广播
C / A 只能满足一个
心跳验证
CA一致性/高可用不存在
create /abc
顺序一致性 - 来自客户端的更新将按发送顺序应用。
ls /abc :查看路径下的文件 ls -s /abc :查看具体详情get /abc :查看路径下的文数据 get -s /abc :查看具体详情stat /abc 查询路径的状态
集群形态
分区容错性(Partition tolerance)
分布式协调框架
zookeeper 基础概念
分布式协调 配置。 协调
node 01
角色
分片
及时性 - 系统的客户视图保证在特定时间范围内是最新的。
节点变动,每个客户端都有回掉,顺时压力大
常用命令
sharding 分片
ClientA
无法达到100%
安装 验证 及简单使用
[zk: 127.0.0.1:2181(CONNECTED) 36] ls -s /a[a1]cZxid = 0x400000011. ctime = Sat Jun 05 00:15:28 CST 2021mZxid = 0x400000012mtime = Sat Jun 05 00:22:29 CST 2021pZxid = 0x400000013 值变为创建/a/a1 这个节点的id了cversion = 1 版本加1,记录当前节点下,下面节点增、改 了多少次dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 1numChildren = 1 数量加1,记录子节点的个数
选举端口号被连的情况linux : netstat -natp | grep 3888 (集群部署时,部署在多个节点上)linux: netstat -natp | egrep '(2388|3888)' 开启正则,监听多个端口号macos: lsof -n -P i:3387
可靠性
可用性(Availability)
基本操作
数据 可靠、可用最终一致性
命令都有-w 的参数watch 只能被触发一次。如果要一直获得 znode 的创建和删除的通知,那么就需要不断的在znode上开启观察模式。如果在该 path 下节点发生变化,会产生 NodeChildrenChanged 事件,删除节点,会产生 NodeDeleted 事件
redis
观察者:不参与投票放大查询功能
单一系统映像 - 无论连接到哪个服务器,客户端都将看到相同的服务视图。即,即使客户端故障转移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。
如果延迟
tickTime=2000 心跳超时时间initLimit=10 初始化连接次数syncLimit=5 请求、应答 次数dataDir=/usr/local/data 数据存放目录maxClientCnxns=60 客户端连接数peerType=observer 配置为观察者(不参与投票)server.X=ip:2288:3388server.2=localhost:2288:3388 2888 用来和领导层通信 2888 用来选举领导层
否决,都比自己小
zookeeper目录结构
watch. 监控
leader3. zxid:84.1 log4.2 ok
clientPort=2181server.1=localhost:2287:3387server.2=localhost:2288:3388server.3=localhost:2289:3389[:observer]dataDir=/usr/local/Cellar/apache-zookeeper-3.6.0-bin/study/z1
序列节点
并发问题跟不上能跟的上的商业我们不买
tcp 主节点连接线
不要把它作为数据库使用
2 create /ab
数据库
另外一个客户端也是可以看到,并且信息都是一志的
1 create /ab
db2
锁分为单节点、分布式锁
zookeeper 分布式协调框架
增、删 只在主节点上执行二进制安全 客户端需要去约定编解码方式事物id递增的方式:create set 客户端连接 客户端断开连接cZxid = 0x400000011 0x4前三位表示集群主导的唯一值,后面是16进制表示,当挂了的时候,每次前缀应该都是递增加一,保证数量不能重复ctime = Sat Jun 05 00:15:28 CST 2021 创建时间mZxid = 0x400000012 修改时候,分配到的修改idmtime = Sat Jun 05 00:22:29 CST 2021 修改时间pZxid = 0x400000013 当前目录下的包含下一集文件列表cversion = 1 创建的版本号,默认0,如果有修改,则递增dataVersion = 1 数据的版本号,默认0,如果有修改,则递增aclVersion = 0ephemeralOwner = 0x0dataLength = 1numChildren = 1 下一级文件的数量
模型
call back
Peer state changed: 查找是leading还是following
发生条件
允许部分节点失败仍然可以对外提供服务
01发送投票包
myid:2zxid:8
leader 选举
4.2 ok
建立在网络可靠性和集群状态是ok
可靠性 - 应用更新后,它将从那时起一直存在,直到客户端覆盖更新
zk paxos
队列
0 条评论
下一页