blob: c7305be6c242daf11612e1b79c662bd0a29d879a [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Apache Ozone Documentation">
<title>Documentation for Apache Ozone</title>
<link href="../../css/bootstrap.min.css" rel="stylesheet">
<link href="../../css/ozonedoc.css" rel="stylesheet">
<link href="../../swagger-resources/swagger-ui.css" rel="stylesheet">
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '34']);
var d=document, g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#sidebar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="../../zh/index.html" class="navbar-left ozone-logo">
<img src="../../ozone-logo-small.png"/>
</a>
<a class="navbar-brand hidden-xs" href="../../zh/index.html">
Apache Ozone/HDDS Documentation
</a>
<a class="navbar-brand visible-xs-inline" href="#">Apache Ozone</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="https://github.com/apache/ozone">Source</a></li>
<li><a href="https://ozone.apache.org">Apache Ozone</a></li>
<li><a href="https://apache.org">ASF</a></li>
</ul>
</div>
</div>
</nav>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-sm-2 col-md-2 sidebar" id="sidebar">
<ul class="nav nav-sidebar">
<li class="">
<a href="../../zh/index.html">
<span>概述</span>
</a>
</li>
<li class="">
<a href="../../zh/start.html">
<span>快速入门</span>
</a>
</li>
<li class="">
<a href="../../zh/concept.html">
<span>概念</span>
</a>
<ul class="nav">
<li class="">
<a href="../../zh/concept/overview.html">概览</a>
</li>
<li class="">
<a href="../../zh/concept/ozonemanager.html">Ozone Manager</a>
</li>
<li class="active">
<a href="../../zh/concept/storagecontainermanager.html">Storage Container Manager</a>
</li>
<li class="">
<a href="../../zh/concept/datanodes.html">数据节点</a>
</li>
<li class="">
<a href="../../zh/concept/containers.html">Containers</a>
</li>
<li class="">
<a href="../../zh/concept/recon.html">Recon</a>
</li>
</ul>
</li>
<li class="">
<a href="../../zh/feature.html">
<span>特性</span>
</a>
<ul class="nav">
<li class="">
<a href="../../zh/feature/decommission.html">Decommissioning</a>
</li>
<li class="">
<a href="../../zh/feature/erasurecoding.html">纠删码</a>
</li>
<li class="">
<a href="../../zh/feature/om-ha.html">高可用 OM</a>
</li>
<li class="">
<a href="../../zh/feature/scm-ha.html">高可用 SCM</a>
</li>
<li class="">
<a href="../../zh/feature/dn-merge-rocksdb.html">在DataNode上合并Container的RocksDB</a>
</li>
<li class="">
<a href="../../zh/feature/prefixfso.html">基于前缀的文件系统优化</a>
</li>
<li class="">
<a href="../../zh/feature/topology.html">拓扑感知能力</a>
</li>
<li class="">
<a href="../../zh/feature/quota.html">Ozone 中的配额</a>
</li>
<li class="">
<a href="../../zh/feature/recon.html">Recon 服务器</a>
</li>
<li class="">
<a href="../../zh/feature/reconfigurability.html">动态加载配置</a>
</li>
</ul>
</li>
<li class="">
<a href="../../zh/security.html">
<span>安全</span>
</a>
<ul class="nav">
<li class="">
<a href="../../zh/security/secureozone.html">安全化 Ozone</a>
</li>
<li class="">
<a href="../../zh/security/securingtde.html">透明数据加密</a>
</li>
<li class="">
<a href="../../zh/security/gdpr.html">Ozone 中的 GDPR</a>
</li>
<li class="">
<a href="../../zh/security/securingdatanodes.html">安全化 Datanode</a>
</li>
<li class="">
<a href="../../zh/security/securings3.html">安全化 S3</a>
</li>
<li class="">
<a href="../../zh/security/securityacls.html">Ozone 访问控制列表</a>
</li>
<li class="">
<a href="../../zh/security/securitywithranger.html">Apache Ranger</a>
</li>
</ul>
</li>
<li class="">
<a href="../../zh/interface.html">
<span>编程接口</span>
</a>
<ul class="nav">
<li class="">
<a href="../../zh/interface/javaapi.html">Java API</a>
</li>
<li class="">
<a href="../../zh/interface/o3fs.html">Ozone 文件系统</a>
</li>
<li class="">
<a href="../../zh/interface/csi.html">CSI 协议</a>
</li>
<li class="">
<a href="../../zh/interface/s3.html">S3 协议接口</a>
</li>
<li class="">
<a href="../../zh/interface/reconapi.html">Recon API</a>
</li>
</ul>
</li>
<li class="">
<a href="../../zh/tools.html">
<span>工具</span>
</a>
</li>
<li class="">
<a href="../../zh/recipe.html">
<span>使用配方</span>
</a>
</li>
<li><a href="../../design.html"><span><b>Design docs</b></span></a></li>
<li class="visible-xs"><a href="#">References</a>
<ul class="nav">
<li><a href="https://github.com/apache/ozone"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> Source</a></li>
<li><a href="https://ozone.apache.org"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> Apache Ozone</a></li>
<li><a href="https://apache.org"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> ASF</a></li>
</ul></li>
</ul>
</div>
<div class="col-sm-10 col-sm-offset-2 col-md-10 col-md-offset-2 main-content">
<div class="col-md-9">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../../zh/index.html">Home</a></li>
<li class="breadcrumb-item" aria-current="page"><a href="../../zh/concept.html">概念</a></li>
<li class="breadcrumb-item active" aria-current="page">Storage Container Manager</li>
</ol>
</nav>
<div class="pull-right">
<a href="../../concept/storagecontainermanager.html"><span class="label label-success">English</span></a>
</div>
<div class="col-md-9">
<h1>Storage Container Manager</h1>
<!---
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.
-->
<p>Storage Container Manager (SCM) 是<em>块空间管理</em>的 leader 节点,其主要职责是创建和管理<a href="../../concept/containers.html">容器</a>,而容器也是 Ozone 的主要复制单元。</p>
<p>
<img src="StorageContainerManager.png" alt='Storage Container Manager' class="img-responsive" /></p>
<h2 id="主要职责">主要职责</h2>
<p>Storage Container Manager (SCM) 为 Ozone 集群提供了多项关键功能,承担了集群管理器、证书颁发机构、块管理器以及复制管理器的角色。</p>
<p>SCM 负责创建 Ozone 集群。当通过 <code>init</code> 命令启动 SCM 时,SCM 将创建担任证书颁发机构所需的集群 ID 和根证书。同时,SCM 负责管理集群中数据节点的整个生命周期。</p>
<ol>
<li>
<p>SCM 作为块管理器,负责将块分配给相应的数据节点,客户端可以直接读写这些块;</p>
</li>
<li>
<p>SCM 负责跟踪所有块的副本,当有数据节点或磁盘掉线,SCM 侦测到后,会启动相应的数据节点复制缺失的块,以确保高可用;</p>
</li>
<li>
<p><strong>SCM 的证书颁发机构</strong> 负责为集群中的每个服务颁发身份证书,这种证书架构可以很方便地在网络层启用双向认证(mTLS)。同时,Ozone 的块令牌也依赖于这种证书架构。</p>
</li>
</ol>
<h2 id="主要组件">主要组件</h2>
<p>针对 Storage Container Manager 的详细视图,本节提供有关网络服务和持久化数据的快速概述。</p>
<h3 id="storage-container-manager-提供的网络服务">Storage Container Manager 提供的网络服务:</h3>
<ul>
<li>管道: 列出/删除/激活/停用
<ul>
<li>管道是形成一组复制组的数据节点</li>
<li>SCM 负责划分 Raft group</li>
</ul>
</li>
<li>容器: 创建/列出/删除容器</li>
<li>管控相关的请求</li>
<li>安全模式的状态查看/修改</li>
<li>复制管理器的启动/停止</li>
<li>证书鉴权服务</li>
<li>其他服务组件所需</li>
<li>数据节点的心跳协议
<ul>
<li>从数据节点到 SCM(默认是30秒)</li>
<li>数据节点上报容器和节点的状态</li>
<li>SCM 可以添加命令到心跳回包中</li>
</ul>
</li>
</ul>
<p>注意:客户端不能直接连接 SCM 。</p>
<h3 id="持久化状态">持久化状态</h3>
<p>以下数据持久化在 Storage Container Manager 端的指定 RocksDB 目录中</p>
<ul>
<li>管道
<ul>
<li>服务器的复制组,维护以用于查找新容器或块分配的组</li>
</ul>
</li>
<li>容器
<ul>
<li>容器是基本的复制单元,数据用于防止复制不足或过度复制。</li>
</ul>
</li>
<li>删除块
<ul>
<li>块数据在后台删除时,需要一个列表来跟踪进度</li>
</ul>
</li>
<li>有效证书,失效证书
<ul>
<li>由内部证书颁发机构来授权其他 Ozone 服务</li>
</ul>
</li>
</ul>
<h2 id="需要关注的配置选项">需要关注的配置选项</h2>
<table>
<thead>
<tr>
<th>配置项</th>
<th>默认值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>ozone.scm.container.size</td>
<td>5GB</td>
<td>Ozone 使用的默认容器的大小</td>
</tr>
<tr>
<td>ozone.scm.block.size</td>
<td>256MB</td>
<td>数据块的默认大小</td>
</tr>
<tr>
<td>hdds.scm.safemode.min.datanode</td>
<td>1</td>
<td>能够启动实际工作所需的最小数据节点数</td>
</tr>
<tr>
<td>ozone.scm.http-address</td>
<td>0.0.0.0:9876</td>
<td>SCM 服务端使用的 HTTP 地址</td>
</tr>
<tr>
<td>ozone.metadata.dirs</td>
<td>none</td>
<td>存储持久化数据的目录(RocksDB)</td>
</tr>
</tbody>
</table>
<a class="btn btn-success btn-lg" href="../../zh/concept/datanodes.html">Next >></a>
</div>
</div>
</div>
</div>
</div>
<div class="push"></div>
</div>
<footer class="footer">
<div class="container">
<span class="small text-muted">
Version: 1.5.0-SNAPSHOT, Last Modified: February 26, 2024 <a class="hide-child link primary-color" href="https://github.com/apache/ozone/commit/1b48186a0107711235abcd2636977ae0242f6be8">1b48186</a>
</span>
</div>
</footer>
<script src="../../js/jquery-3.5.1.min.js"></script>
<script src="../../js/ozonedoc.js"></script>
<script src="../../js/bootstrap.min.js"></script>
</body>
</html>