IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【ZooKeeper】ZooKeeper企业应用 -> 正文阅读

[大数据]【ZooKeeper】ZooKeeper企业应用

分布式锁独占实现Active Master选举

分布式选举,所采用的时分布式锁实现。
整体架构思路:
在这里插入图片描述
选举机制执行步骤:
初始状态:

/cluster_ha
	/ActiveMaster
	/StandbyMaster

bigdata02上线,先自动成为standy

/cluster_ha
	/ActiveMaster
	/StandbyMaster
		/bigdata02

然后去创建锁节点ElectorLock

/cluster_ha
	/ActiveMaster
	/ElectorLock
	/StandbyMaster
		/bigdata02

如果bigdata02创建锁节点成功,则从StandbyMaster下删除自己,然后再ActiveMaster下创建自己

/cluster_ha
	/ActieMaster
		/bigdata02
	/ElectorLock
	/StandbyMaster

如果bigdata02宕机,则对应active znode被删除

/cluster_ha
	/Active_Master
	/StandbyMaster

如果bigdata02为active,然后bigdata03上线,则状态为:

/cluster_ha
	/ActiveMaster
		/bigdata02
	/ElectorLock
	/StandbyMaster
		/bigdata03

实现思路:
1、准备动作:ZooKeeper的状态:有/ActiveMaster节点和/StandbyMaster节点,但是下面都没有信息的,/ElectorLock是不存在的
2、bigdata02一上线,发现自动成为standby角色,所以把自己的信息注册到/StandbyMaster节点下
3、bigdata02再去查看/ActiveMaster节点下是否有子节点,如果有就证明有active角色,如果没有,去争抢分布式锁,如果没有抢到,其他节点中成为了active,如果抢到了,则把自己的信息在/StandbyMaster里面删除,再更新到/ActiveMaster节点下面
4、bigdata03上线,发现/ActiveMaster节点下有子节点,有active,就自动成为standby角色,会监听/ActiveMaster
znode监听:NodeChildrenChanged,只要/ActiveMaster的子节点个数发生变化,ZooKeeper系统进行通知。/ActiveMaster下面只能有一个子节点。如果减少,bigdata03会收到通知:active master宕机了
5、bigdata04上线,行为和bigdata03一致
6、假设bigdata02宕机,bigdata02跟ZooKeeper系统维持的会话就断开,由于创建的锁和/ActiveMaster下面的子节点都是临时节点,这俩节点自动被ZooKeeper系统删除。由于bigdata03和bigdata04监听了这个事件,都会收到通知,active master不存在了,它们都去争抢成为active,先去抢/ElectorLock锁。最终创建这个ElectorLock锁成功的只会是一台服务器,谁创建成功,谁就成为active。

建议:使用ZooKeeper的API框架,Curator来实现HA,LeaderLatch LeaderSelector,减轻代码编写的复杂度。如HBase,Flink等,使用Curator来封装实现选举的。

分布式时序锁实现分布式队列

两种方案:
基于redis的实现 ap实现
基于zookeeper的实现 cp实现
在这里插入图片描述
CAP理论:
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

分布式集群配置管理

以HDFS的配置管理为例,HDFS集群有1000个datanode,现在管理员有一个操作:想把默认的3个副本这个参数,改成4个副本,怎么高效实现?
简单方案:写一个脚本,修改配置文件,全局分发,然后滚动重启。
高效方案:更改某一参数会响应全局

通过ZooKeeper的监听机制来实现,所有datanode都去监听ZooKeeper上的配置信息,如果任何一个客户端更改了配置,则所有DataNode都能立即收到通知,然后做相应回调处理即可。

配置管理,三种常见动作:
1、新增配置
1)如果把所有配置信息,都存储在一个节点,如果更改某一个配置,这个znode节点的值就发生变化。a:1-b:2=>a:1-b:2-c:2 zk.getData()
2)如果每一个配置,通过一个znode节点存储,znode节点名称是key,znode节点的值是value,增加配置,就是多创建一个子znode zk.getChildren()
2、删除配置
1)如果把所有配置信息,都存储在一个节点,如果更改某一个配置,这个znode节点的值就发生变化。a:1-b:2-c:2=>a:1-b:2 zk.getData()
2)如果每一个配置,通过一个znode节点存储,znode节点名称是key,znode节点的值是value,减少配置,就是删除一个子znode zk.getChildren()
3、修改配置
1)如果把所有配置信息,都存储在一个节点,如果更改某一个配置,这个znode节点的值就发生变化。a:1-b:2=>a:1-b:22 zk.getData()
2)如果每一个配置,通过一个znode节点存储,znode节点名称是key,znode节点的值是value,修改配置,就是修改某一个子znode zk.getData()

最终,采用第2)种方式,用一个znode来保存一项配置。
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:41:07  更:2022-10-17 12:44:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 22:27:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码