From f3d28f2d597b8c0b95242eaa42900bf7027d57d1 Mon Sep 17 00:00:00 2001 From: zeekling Date: Sun, 22 Sep 2024 23:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=BB=E5=A4=87=E5=80=92?= =?UTF-8?q?=E6=8D=A2=E8=AF=A6=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/attach/主备倒换实现流程图.eddx | Bin 0 -> 31870 bytes common/zk_failover.md | 56 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 common/attach/主备倒换实现流程图.eddx create mode 100644 common/zk_failover.md diff --git a/common/attach/主备倒换实现流程图.eddx b/common/attach/主备倒换实现流程图.eddx new file mode 100644 index 0000000000000000000000000000000000000000..4e82d2298ba69fd42877309787ccdb3d56b3fa51 GIT binary patch literal 31870 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 literal 0 HcmV?d00001 diff --git a/common/zk_failover.md b/common/zk_failover.md new file mode 100644 index 0000000..7daff69 --- /dev/null +++ b/common/zk_failover.md @@ -0,0 +1,56 @@ + + +# 简介 + +HDFS的NameNode、Yarn的ResourceManager都是依靠ZK实现主备倒换的。核心的类为:ZKFailoverController.java, +选举的核心类为ActiveStandbyElector.java + +## 主备选举 + +主备选举的核心类是ActiveStandbyElector。在初始化的时候需要创建zk连接并且尝试在zk上面创建文件。在创建连接或者创建文件的时候都会有回调事件。 + +回调处理的函数主要包含: + + +### 创建node节点回调 + +入口函数如下: +```java +public synchronized void processResult(int rc, String path, Object ctx, + String name) { +// ..... +} +``` + +处理流程图如下: + +![zk_failver_001](https://pan.zeekling.cn//zeekling/hadoop/common/zk_failover_001.png) + + + +### 监控回调 + +入口函数如下: +```java +public synchronized void processResult(int rc, String path, Object ctx, + Stat stat) { +// ... +} +``` + +处理流程如下: + +![zk_failver_003](https://pan.zeekling.cn//zeekling/hadoop/common/zk_failover_003.png) + +### 事件回调 + +入口函数如下: + +```java +synchronized void processWatchEvent(ZooKeeper zk, WatchedEvent event) { + // .. +} +``` + +![zk_failver_002](https://pan.zeekling.cn//zeekling/hadoop/common/zk_failover_002.png) +