Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion hadoop-hdds/docs/content/concept/OzoneManager.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ Ozone Manager 使用 Apache Ratis(一种 Raft 协议的开源实现)来复

为了详细地了解 Ozone Manager ,本节针对它所提供的网络服务和持久化状态提供一个快速概述。

### Ozone Manager 提供的网络服务

Ozone 为客户端和管理命令提供网络服务,主要的服务如下:

* 键、桶、卷 / 增删改查
Expand All @@ -93,7 +95,7 @@ Ozone 为客户端和管理命令提供网络服务,主要的服务如下:
* ServiceList(用于服务发现)
* DBUpdates(用于 [Recon]({{< ref path="feature/Recon.md" lang="en" >}}) 下载快照)

**持久化状态**
### 持久化状态

以下数据将保存在 Ozone Manager 端的指定 RocksDB 目录中:

Expand Down
116 changes: 116 additions & 0 deletions hadoop-hdds/docs/content/concept/Recon.zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
---
title: "Recon"
date: "2020-10-27"
weight: 8
menu:
main:
parent: 概念
summary: Recon 作为 Ozone 的管理和监视控制台。
---
<!---
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决任何问题。


## 高层次设计

{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}

<br/>

在较高的层次上,Recon 收集和汇总来自 Ozone Manager(OM)、Storage Container Manager(SCM)和数据节点(DN)的元数据,并充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM 或 SCM 过载。

Recon 维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。

Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键时间点的指标。

## Recon 和 Ozone Manager

{{<figure src="/concept/ReconOmDesign.png" width="800px">}}

<br/>

Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID 的 RPC 调用,定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则会再次请求一个完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可能会显示陈旧的信息,因为本地数据库不会总是同步的。

## Recon 和 Storage Container Manager

{{<figure src="/concept/ReconScmDesign.png" width="800px">}}

<br/>

Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。

## <a name="task-framework"></a> 任务框架

Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。

`ReconOmTask`的一个示例是`ContainerKeyMapperTask`,它在 RocksDB 中持久化保留了容器 -> 键映射。当容器被报告丢失或处于不健康的运行状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务有两种情况的实现:

- 完整快照(reprocess())
- 增量更新(process())

当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。

`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`、`MIS_REPLICATED`、`UNDER_REPLICATED`、`OVER_REPLICATED`)持久化保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。

## Recon 和 Prometheus

Recon 可以与任何配置为收集指标的 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/指标]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。

## API 参考

[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})

## 持久化状态

* [OM database]({{< ref "concept/OzoneManager.zh.md#持久化状态" >}})的本地副本
* [SCM database]({{< ref "concept/StorageContainerManager.zh.md#持久化状态" >}})的本地副本
* 以下数据在 Recon 中持久化在指定的 RocksDB 目录下:
* ContainerKey 表
* 存储映射(容器,键) -> 计数
* ContainerKeyCount 表
* 存储容器 ID -> 容器内的键数
* 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
* GlobalStats 表
* 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
* FileCountBySize 表
* 跟踪集群中文件大小范围内的文件数量
* ReconTaskStatus 表
* 跟踪在[Recon 任务框架](#task-framework)中已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
* ContainerHistory 表
* 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。当一个容器被报告丢失时,它被用来确定最后已知的数据节点。
* UnhealthyContainers 表
* 随时跟踪集群中所有不健康的容器(MISSING、UNDER_REPLICATED、OVER_REPLICATED、MIS_REPLICATED)


## 需要关注的配置项

配置项 |默认值 | <div style="width:300px;">描述</div>
----|---------|------------
ozone.recon.http-address | 0.0.0.0:9888 | Recon web UI 监听的地址和基本端口。
ozone.recon.address | 0.0.0.0:9891 | Recon 的 RPC 地址。
ozone.recon.db.dir | none | Recon Server 存储其元数据的目录。
ozone.recon.om.db.dir | none | Recon Server 存储其 OM 快照 DB 的目录。
ozone.recon.om.snapshot<br>.task.interval.delay | 10m | Recon 以分钟间隔请求 OM DB 快照。
ozone.recon.task<br>.missingcontainer.interval | 300s | 定期检查集群中不健康容器的时间间隔。
ozone.recon.sql.db.jooq.dialect | DERBY | 请参考 [SQL 方言](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html) 来指定不同的方言。
ozone.recon.sql.db.jdbc.url | jdbc:derby:${ozone.recon.db.dir}<br>/ozone_recon_derby.db | Recon SQL database 的 jdbc url。
ozone.recon.sql.db.username | none | Recon SQL数据库的用户名。
ozone.recon.sql.db.password | none | Recon SQL数据库的密码。
ozone.recon.sql.db.driver | org.apache.derby.jdbc<br>.EmbeddedDriver | Recon SQL数据库的 jdbc driver。

Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ SCM 负责创建 Ozone 集群。当通过 `init` 命令启动 SCM 时,SCM 将

针对 Storage Container Manager 的详细视图,本节提供有关网络服务和持久化数据的快速概述。

**Storage Container Manager 提供的网络服务:**
### Storage Container Manager 提供的网络服务:

* 管道: 列出/删除/激活/停用
* 管道是形成一组复制组的数据节点
Expand All @@ -62,7 +62,7 @@ SCM 负责创建 Ozone 集群。当通过 `init` 命令启动 SCM 时,SCM 将

注意:客户端不能直接连接 SCM 。

**持久化状态**
### 持久化状态

以下数据持久化在 Storage Container Manager 端的指定 RocksDB 目录中

Expand All @@ -83,4 +83,4 @@ ozone.scm.container.size | 5GB | Ozone 使用的默认容器的大小
ozone.scm.block.size | 256MB | 数据块的默认大小
hdds.scm.safemode.min.datanode | 1 | 能够启动实际工作所需的最小数据节点数
ozone.scm.http-address | 0.0.0.0:9876 | SCM 服务端使用的 HTTP 地址
ozone.metadata.dirs | none | 存储持久化数据的目录(RocksDB)
ozone.metadata.dirs | none | 存储持久化数据的目录(RocksDB)
23 changes: 3 additions & 20 deletions hadoop-hdds/docs/content/feature/Recon.zh.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Recon"
title: "Recon 服务器"
weight: 7
menu:
main:
Expand All @@ -23,27 +23,10 @@ summary: Recon 是 Ozone 中用于分析服务的网页用户界面(Web UI)
limitations under the License.
-->

Recon Ozone 中用于分析服务的网页用户界面(Web UI)。它是一个可选组件,但强烈建议您使用,因为它可以增加可视性
Recon 作为 Ozone 的管理和监听控制台。它是一个可选组件,但强烈建议将其添加到集群中,因为 Recon 可以在关键时刻帮助您对集群进行故障排除。请参阅 [Recon 架构]({{< ref "concept/Recon.zh.md" >}}) 以获得详细的架构概述和 [Recon API]({{< ref path="interface/ReconApi.zh.md" >}}) 文档,以获得 HTTP API 参考

Recon 从 Ozone 集群中**收集**所有数据,并将其存储在 SQL数据库中,以便进一步分析。

1. Ozone Manager 的数据是通过异步过程在后台下载的。OM 会定期创建 RocksDB 快照,并将增量数据复制到 Recon 进行处理。

2. 数据节点不仅可以将心跳发送到 SCM,也能发送到 Recon。Recon 可以成为心跳的唯读(Read-only)监听器,并根据收到的信息更新本地数据库。

当 Recon 配置完成时,我们便可以启动服务。
Recon 是一个自带 HTTP 网页服务器的服务,可以通过以下命令启动。

{{< highlight bash >}}
ozone --daemon start recon
{{< /highlight >}}

## 需要关注的配置项

配置项 | 默认值 | 描述
-------|--------|-----
ozone.recon.http-address | 0.0.0.0:9888 | Recon web UI 监听的地址和基本端口。
ozone.recon.address | 0.0.0.0:9891 | Recon 的 RPC 地址。
ozone.recon.db.dir | none | Recon Server 存储其元数据的目录。
ozone.recon.om.db.dir | none | Recon Server 存储其 OM 快照 DB 的目录。
ozone.recon.om.snapshot.task.interval.delay | 10m | Recon 以分钟间隔请求 OM DB 快照。

Loading