diff --git a/hadoop-hdds/docs/content/concept/OzoneManager.zh.md b/hadoop-hdds/docs/content/concept/OzoneManager.zh.md index 2070c463cc79..3fc7fbf583a7 100644 --- a/hadoop-hdds/docs/content/concept/OzoneManager.zh.md +++ b/hadoop-hdds/docs/content/concept/OzoneManager.zh.md @@ -24,50 +24,100 @@ summary: Ozone Manager 是 Ozone 主要的命名空间服务,它管理了卷 limitations under the License. --> -
- -注意:本页面翻译的信息可能滞后,最新的信息请参看英文版的相关页面。 - -
+![Ozone Manager](OzoneManager.png) Ozone Manager(OM)管理 Ozone 的命名空间。 -当向 Ozone 写入数据时,你需要向 OM 请求一个块,OM 会返回一个块并记录下相关信息。当你想要读取那个文件时,你也需要先通过 OM 获取那个块的地址。 +当向 Ozone 写入数据时,你需要向 Ozone Manager 请求一个块,Ozone Manager 会返回这个块并记录下相关信息。当你想要读取那个文件时,你则需要先通过 Ozone Manager 获取那个块的地址。 -OM 允许用户在卷和桶下管理键,卷和桶都是命名空间的一部分,也由 OM 管理。 +Ozone Manager 还允许用户在卷和桶下组织键,卷和桶都是命名空间的一部分,也由 Ozone Manager 管理。 -每个卷都是 OM 下的一个独立命名空间的根,这一点和 HDFS 不同,HDFS 提供的是单个根目录的文件系统。 +每个卷都是 OM 下一个独立命名空间的根,这一点和 HDFS 不同,HDFS 提供的是单个根目录的文件系统。 -与 HDFS 中单根的树状结构相比,Ozone 的命名空间是卷的集合,或者可以看作是个森林,因此可以非常容易地部署多个 OM 来进行扩展。 +Ozone 的命名空间是卷的集合,或者可以看作是相对于 HDFS 单根树状结构的森林。因此,Ozone 可以非常容易地支持部署多个 OM 来进行扩展。 ## Ozone Manager 元数据 OM 维护了卷、桶和键的列表。它为每个用户维护卷的列表,为每个卷维护桶的列表,为每个桶维护键的列表。 -OM 使用 Apache Ratis(Raft 协议的一种实现)来复制 OM 的状态,这为 Ozone 提供了高可用性保证。 +Ozone Manager 使用 Apache Ratis(一种 Raft 协议的开源实现)来复制 Ozone Manager 的状态,这为 Ozone 提供了高可用保证。 ## Ozone Manager 和 Storage Container Manager -为了方便理解 OM 和 SCM 之间的关系,我们来看看写入键和读取键的过程。 +我们可以通过跟踪一个键的读写过程来方便地理解 Ozone Manager 和 Storage Container Manager 之间的关系。 ### 写入键 -* 为了向 Ozone 中的某个卷下的某个桶的某个键写入数据,用户需要先向 OM 发起写请求,OM 会判断该用户是否有权限写入该键,如果权限许可,OM 分配一个块用于 Ozone 客户端数据写入。 +![Write Path](OzoneManager-WritePath.png) -* OM 通过 SCM 请求分配一个块(SCM 是数据节点的管理者),SCM 选择三个数据节点,分配新块并向 OM 返回块标识。 +* 为了向 Ozone 中写入键,客户端需要告诉 Ozone Manager 将键写入哪一个卷下的哪一个桶中。一旦 Ozone Manager 确认了允许您向该桶中写入键,则 OM 需要分配一个块用于客户端写入数据; -* OM 在自己的元数据中记录下块的信息,然后将块和块 token(带有向该块写数据的授权)返回给用户。 +* 为了分配一个用于写入的块,Ozone Manager 会向 Storage Container Manager(SCM) 发送一个请求。 SCM 作为数据节点的管理器,会选取三个可用于客户端写入的数据节点,然后分配块并将块 ID 返回给 Ozone Manager ; -* 用户使用块 token 证明自己有权限向该块写入数据,并向对应的数据节点写入数据。 +* Ozone Manager 会将块的信息记录在它的元数据当中,并将块和块令牌(将数据写入块的安全权限)返回给客户端; -* 数据写入完成后,用户会更新该块在 OM 中的信息。 +* 客户端使用块令牌来证明自己有权限向该块写入数据,并且将数据写入对应的数据节点; +* 数据写入完成以后,客户端就会向 Ozone Manager 中更新该块的信息。 -### 读取键 -* 键读取相对比较简单,用户首先向 OM 请求该键的块列表。 - -* OM 返回块列表以及对应的块 token。 +### 读取键 -* 用户连接数据节点,出示块 token,然后读取键数据。 \ No newline at end of file +![Read Path](OzoneManager-ReadPath.png) + +* 键的读取相对比较简单,客户端首先向 Ozone Manager 请求该键的块列表; + +* Ozone Manager 会返回块列表以及对应的块令牌,允许客户端从数据节点读取数据; + +* 客户端连接到数据节点,并提供对应的块令牌,然后从数据节点上读取数据即可。 + + +## Ozone Manager 的主要组件 + +为了详细地了解 Ozone Manager ,本节针对它所提供的网络服务和持久化状态提供一个快速概述。 + +Ozone 为客户端和管理命令提供网络服务,主要的服务如下: + + * 键、桶、卷 / 增删改查 + * 分块上传(Initiate, Complete…) + * 支持大文件的多步上传 + * 与文件系统相关的调用(针对分层查询而非对象存储的扁平化命名空间进行了优化) + * GetFileStatus, CreateDirectory, CreateFile, LookupFile + * ACL 相关 + * 使用 [内部 ACLs]({{< ref path="security/SecurityAcls.zh.md" lang="zh" >}}) 代替 [Ranger]({{< ref path="security/SecurityWithRanger.zh.md" lang="zh" >}}) 管理访问控制列表 + * 授权令牌(获取 / 刷新 / 取消) + * 用于安全相关 + * 管理 API + * 获取 S3 的访问密钥 + * ServiceList(用于服务发现) + * DBUpdates(用于 [Recon]({{< ref path="feature/Recon.md" lang="en" >}}) 下载快照) + + **持久化状态** + +以下数据将保存在 Ozone Manager 端的指定 RocksDB 目录中: + + * 卷 / 桶 / 键 表 + * 这些都由 OM 负责管理 + * 键的元数据包含用于查找数据的块 ID(其中又包含容器的 ID) + * OpenKey 表 + * 存放已经被创建,但是还未被提交的键 + * 授权令牌表 + * 用于安全相关 + * PrefixInfo 表 + * 使用特定的索引表来存储目录级的 ACL 信息,并为分层查询提供更好的性能 + * S3 密钥表 + * 用于 S3 密钥的管理 + * 分块上传信息表 + * 用于跟踪正在进行的分块上传 + * 删除表 + * 跟踪应从数据节点上删除的块 + +## 需要关注的配置项 + +配置项 | 默认值 | 描述 +----|---------|------------ +ozone.om.address | 0.0.0.0:9862 | OM 的 RPC 地址,客户端需要用到 +ozone.om.http-address | 0.0.0.0:9874 | 默认的 HTTP Server 地址和端口 +ozone.metadata.dirs | none | 存储持久化数据的目录(RockDB) +