blob: bf0e3bc36faaa78f520157871e122c181f870dea [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pegasus | Resource Management</title>
<link rel="stylesheet" href="/zh/assets/css/app.css">
<link rel="shortcut icon" href="/zh/assets/images/favicon.ico">
<link rel="stylesheet" href="/zh/assets/css/utilities.min.css">
<link rel="stylesheet" href="/zh/assets/css/docsearch.v3.css">
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/all.min.js"></script>
<script src="/assets/js/docsearch.v3.js"></script>
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Resource Management | Pegasus</title>
<meta name="generator" content="Jekyll v4.3.3" />
<meta property="og:title" content="Resource Management" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="背景介绍" />
<meta property="og:description" content="背景介绍" />
<meta property="og:site_name" content="Pegasus" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2024-04-22T13:02:52+00:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Resource Management" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-04-22T13:02:52+00:00","datePublished":"2024-04-22T13:02:52+00:00","description":"背景介绍","headline":"Resource Management","mainEntityOfPage":{"@type":"WebPage","@id":"/administration/resource-management"},"url":"/administration/resource-management"}</script>
<!-- End Jekyll SEO tag -->
</head>
<body>
<div class="dashboard is-full-height">
<!-- left panel -->
<div class="dashboard-panel is-medium is-hidden-mobile pl-0">
<div class="dashboard-panel-header has-text-centered">
<a href="/zh/">
<img src="/assets/images/pegasus-logo-inv.png" style="width: 80%;">
</a>
</div>
<div class="dashboard-panel-main is-scrollable pl-6">
<aside class="menu">
<p class="menu-label">Pegasus 产品文档</p>
<ul class="menu-list">
<li>
<a href="/zh/docs/downloads"
class="">
下载
</a>
</li>
</ul>
<p class="menu-label">编译构建</p>
<ul class="menu-list">
<li>
<a href="/zh/docs/build/compile-by-docker"
class="">
使用 Docker 完成编译(推荐)
</a>
</li>
<li>
<a href="/zh/docs/build/compile-from-source"
class="">
从源码编译
</a>
</li>
</ul>
<p class="menu-label">客户端库</p>
<ul class="menu-list">
<li>
<a href="/zh/clients/java-client"
class="">
Java 客户端
</a>
</li>
<li>
<a href="/zh/clients/cpp-client"
class="">
C++ 客户端
</a>
</li>
<li>
<a href="https://github.com/apache/incubator-pegasus/tree/master/go-client"
class="">
Golang 客户端
</a>
</li>
<li>
<a href="/zh/clients/python-client"
class="">
Python 客户端
</a>
</li>
<li>
<a href="/zh/clients/node-client"
class="">
NodeJS 客户端
</a>
</li>
<li>
<a href="/zh/clients/scala-client"
class="">
Scala 客户端
</a>
</li>
</ul>
<p class="menu-label">生态工具</p>
<ul class="menu-list">
<li>
<a href="/zh/docs/tools/shell"
class="">
Pegasus Shell 工具
</a>
</li>
<li>
<a href="https://github.com/pegasus-kv/admin-cli"
class="">
集群管理命令行
</a>
</li>
<li>
<a href="https://github.com/pegasus-kv/pegic"
class="">
数据访问命令行
</a>
</li>
</ul>
<p class="menu-label">用户接口</p>
<ul class="menu-list">
<li>
<a href="/zh/api/ttl"
class="">
TTL
</a>
</li>
<li>
<a href="/zh/api/single-atomic"
class="">
单行原子操作
</a>
</li>
<li>
<a href="/zh/api/redis"
class="">
Redis 适配
</a>
</li>
<li>
<a href="/zh/api/geo"
class="">
GEO 支持
</a>
</li>
<li>
<a href="/zh/api/http"
class="">
HTTP 接口
</a>
</li>
</ul>
<p class="menu-label">高效运维</p>
<ul class="menu-list">
<li>
<a href="/zh/administration/deployment"
class="">
集群部署
</a>
</li>
<li>
<a href="/zh/administration/config"
class="">
配置说明
</a>
</li>
<li>
<a href="/zh/administration/rebalance"
class="">
负载均衡
</a>
</li>
<li>
<a href="/zh/administration/monitoring"
class="">
可视化监控
</a>
</li>
<li>
<a href="/zh/administration/rolling-update"
class="">
集群重启和升级
</a>
</li>
<li>
<a href="/zh/administration/scale-in-out"
class="">
集群扩容缩容
</a>
</li>
<li>
<a href="/zh/administration/resource-management"
class="is-active">
资源管理
</a>
</li>
<li>
<a href="/zh/administration/cold-backup"
class="">
冷备份
</a>
</li>
<li>
<a href="/zh/administration/meta-recovery"
class="">
元数据恢复
</a>
</li>
<li>
<a href="/zh/administration/replica-recovery"
class="">
Replica 数据恢复
</a>
</li>
<li>
<a href="/zh/administration/zk-migration"
class="">
Zookeeper 迁移
</a>
</li>
<li>
<a href="/zh/administration/table-migration"
class="">
Table 迁移
</a>
</li>
<li>
<a href="/zh/administration/table-soft-delete"
class="">
Table 软删除
</a>
</li>
<li>
<a href="/zh/administration/table-env"
class="">
Table 环境变量
</a>
</li>
<li>
<a href="/zh/administration/remote-commands"
class="">
远程命令
</a>
</li>
<li>
<a href="/zh/administration/partition-split"
class="">
Partition-Split
</a>
</li>
<li>
<a href="/zh/administration/duplication"
class="">
跨机房同步
</a>
</li>
<li>
<a href="/zh/administration/compression"
class="">
数据压缩
</a>
</li>
<li>
<a href="/zh/administration/throttling"
class="">
流量控制
</a>
</li>
<li>
<a href="/zh/administration/experiences"
class="">
运维经验
</a>
</li>
<li>
<a href="/zh/administration/manual-compact"
class="">
Manual Compact 功能
</a>
</li>
<li>
<a href="/zh/administration/usage-scenario"
class="">
Usage Scenario 功能
</a>
</li>
<li>
<a href="/zh/administration/bad-disk"
class="">
坏盘检修
</a>
</li>
<li>
<a href="/zh/administration/whitelist"
class="">
Replica Server 白名单
</a>
</li>
<li>
<a href="/zh/administration/backup-request"
class="">
Backup Request
</a>
</li>
<li>
<a href="/zh/administration/hotspot-detection"
class="">
热点检测
</a>
</li>
</ul>
</aside>
</div>
</div>
<!-- main section -->
<div class="dashboard-main is-scrollable">
<nav class="navbar is-hidden-desktop">
<div class="navbar-brand">
<a href="/zh/" class="navbar-item">
<!-- Pegasus Icon -->
<img src="/assets/images/pegasus-square.png">
</a>
<div class="navbar-item">
<!--A simple language switch button that only supports zh and en.-->
<!--IF its language is zh, then switches to en.-->
<!--If you don't want a url to be relativized, you can add a space explicitly into the href to
prevents a url from being relativized by polyglot.-->
<a class="button is-light is-outlined is-inverted" href=" /administration/resource-management"><strong>En</strong></a>
</div>
<a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu">
<!-- Appears in mobile mode only -->
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div class="navbar-menu" id="navMenu">
<div class="navbar-end">
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
Pegasus 产品文档
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/docs/downloads"
class="navbar-item ">
下载
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
编译构建
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/docs/build/compile-by-docker"
class="navbar-item ">
使用 Docker 完成编译(推荐)
</a>
<a href="/zh/docs/build/compile-from-source"
class="navbar-item ">
从源码编译
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
客户端库
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/clients/java-client"
class="navbar-item ">
Java 客户端
</a>
<a href="/zh/clients/cpp-client"
class="navbar-item ">
C++ 客户端
</a>
<a href="https://github.com/apache/incubator-pegasus/tree/master/go-client"
class="navbar-item ">
Golang 客户端
</a>
<a href="/zh/clients/python-client"
class="navbar-item ">
Python 客户端
</a>
<a href="/zh/clients/node-client"
class="navbar-item ">
NodeJS 客户端
</a>
<a href="/zh/clients/scala-client"
class="navbar-item ">
Scala 客户端
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
生态工具
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/docs/tools/shell"
class="navbar-item ">
Pegasus Shell 工具
</a>
<a href="https://github.com/pegasus-kv/admin-cli"
class="navbar-item ">
集群管理命令行
</a>
<a href="https://github.com/pegasus-kv/pegic"
class="navbar-item ">
数据访问命令行
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
用户接口
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/api/ttl"
class="navbar-item ">
TTL
</a>
<a href="/zh/api/single-atomic"
class="navbar-item ">
单行原子操作
</a>
<a href="/zh/api/redis"
class="navbar-item ">
Redis 适配
</a>
<a href="/zh/api/geo"
class="navbar-item ">
GEO 支持
</a>
<a href="/zh/api/http"
class="navbar-item ">
HTTP 接口
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
高效运维
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/administration/deployment"
class="navbar-item ">
集群部署
</a>
<a href="/zh/administration/config"
class="navbar-item ">
配置说明
</a>
<a href="/zh/administration/rebalance"
class="navbar-item ">
负载均衡
</a>
<a href="/zh/administration/monitoring"
class="navbar-item ">
可视化监控
</a>
<a href="/zh/administration/rolling-update"
class="navbar-item ">
集群重启和升级
</a>
<a href="/zh/administration/scale-in-out"
class="navbar-item ">
集群扩容缩容
</a>
<a href="/zh/administration/resource-management"
class="navbar-item is-active">
资源管理
</a>
<a href="/zh/administration/cold-backup"
class="navbar-item ">
冷备份
</a>
<a href="/zh/administration/meta-recovery"
class="navbar-item ">
元数据恢复
</a>
<a href="/zh/administration/replica-recovery"
class="navbar-item ">
Replica 数据恢复
</a>
<a href="/zh/administration/zk-migration"
class="navbar-item ">
Zookeeper 迁移
</a>
<a href="/zh/administration/table-migration"
class="navbar-item ">
Table 迁移
</a>
<a href="/zh/administration/table-soft-delete"
class="navbar-item ">
Table 软删除
</a>
<a href="/zh/administration/table-env"
class="navbar-item ">
Table 环境变量
</a>
<a href="/zh/administration/remote-commands"
class="navbar-item ">
远程命令
</a>
<a href="/zh/administration/partition-split"
class="navbar-item ">
Partition-Split
</a>
<a href="/zh/administration/duplication"
class="navbar-item ">
跨机房同步
</a>
<a href="/zh/administration/compression"
class="navbar-item ">
数据压缩
</a>
<a href="/zh/administration/throttling"
class="navbar-item ">
流量控制
</a>
<a href="/zh/administration/experiences"
class="navbar-item ">
运维经验
</a>
<a href="/zh/administration/manual-compact"
class="navbar-item ">
Manual Compact 功能
</a>
<a href="/zh/administration/usage-scenario"
class="navbar-item ">
Usage Scenario 功能
</a>
<a href="/zh/administration/bad-disk"
class="navbar-item ">
坏盘检修
</a>
<a href="/zh/administration/whitelist"
class="navbar-item ">
Replica Server 白名单
</a>
<a href="/zh/administration/backup-request"
class="navbar-item ">
Backup Request
</a>
<a href="/zh/administration/hotspot-detection"
class="navbar-item ">
热点检测
</a>
</div>
</div>
</div>
</div>
</nav>
<nav class="navbar is-hidden-mobile">
<div class="navbar-start w-full">
<div class="navbar-item pl-0 w-full">
<!--TODO(wutao): Given the limitation of docsearch that couldn't handle multiple input,
I make searchbox only shown in desktop. Fix this issue when docsearch.js v3 released.
Related issue: https://github.com/algolia/docsearch/issues/230-->
<div id="docsearch"></div>
</div>
</div>
<div class="navbar-end">
<div class="navbar-item">
<!--A simple language switch button that only supports zh and en.-->
<!--IF its language is zh, then switches to en.-->
<!--If you don't want a url to be relativized, you can add a space explicitly into the href to
prevents a url from being relativized by polyglot.-->
<a class="button is-light is-outlined is-inverted" href=" /administration/resource-management"><strong>En</strong></a>
</div>
</div>
</nav>
<section class="hero is-info lg:mr-3">
<div class="hero-body">
<p class="title is-size-2 is-centered">资源管理</p>
</div>
</section>
<section class="section" style="padding-top: 2rem;">
<div class="content">
<h1 id="背景介绍">背景介绍</h1>
<p>Pegasus 主要用到的资源包括 CPU、磁盘、内存、网络等。对这些系统资源的使用负载不要太高,否则 Pegasus 服务可能会不稳定甚至崩溃。建议:</p>
<ul>
<li>单块磁盘的存储使用不要超过 80%。</li>
<li>内存使用不要超过每个节点的 80%。</li>
<li>网络连接数不要超过系统配置,建议连接数控制在 5 万以内。</li>
</ul>
<p>通过调整这些配置参数,可以减少一些磁盘存储容量的使用:</p>
<ul>
<li>设置 <code class="language-plaintext highlighter-rouge">max_replicas_in_group = 3</code>,参见 <a href="#replica 副本数管理">Replica 副本数管理</a></li>
<li>设置 <code class="language-plaintext highlighter-rouge">gc_disk_error_replica_interval_seconds = 3600</code><code class="language-plaintext highlighter-rouge">gc_disk_garbage_replica_interval_seconds = 3600</code>,参见 <a href="#垃圾目录管理">垃圾目录管理</a></li>
<li>设置 <code class="language-plaintext highlighter-rouge">checkpoint_reserve_min_count = 2</code><code class="language-plaintext highlighter-rouge">checkpoint_reserve_time_seconds = 1200</code>,参见 <a href="#rocksdb-checkpoints-管理">Rocksdb checkpoints 管理</a></li>
</ul>
<h1 id="replica-副本数管理">Replica 副本数管理</h1>
<p>Pegasus 推荐使用 3 副本(1 primary + 2 secondaries),在创建表的时候将 <code class="language-plaintext highlighter-rouge">-r</code> 参数设为 3。</p>
<p>但是在系统中实际存在的副本数可能不止 3 个,这是通过以下配置参数决定的:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[meta_server]
max_replicas_in_group = 4
</code></pre></div></div>
<p>该参数的意义是:允许一个 partition 中最多存在的副本数(包括活跃和不活跃的),默认为 4(表示允许保留 1 个不活跃的副本)。虽然正在提供服务的活跃副本是 3 个(1 primary + 2 secondary),但是在宕机恢复或者负载均衡过程中,replica 可能从 A 节点迁移到 B 节点,迁移完成后 A 节点上的数据实际上不需要了,但是在存储充足的情况下,可以继续将 A 节点的数据保留在磁盘上,如果将来 replica 重新迁移到 A 节点,这些数据还有可能被重用,避免重新传输数据。</p>
<p>如果想要节省磁盘存储使用量,及时删除无用的副本数据,就可以设置 <code class="language-plaintext highlighter-rouge">max_replicas_in_group = 3</code>,并重启 Meta Server 使配置生效,然后设置 <a href="rebalance">负载均衡</a> 状态为 <code class="language-plaintext highlighter-rouge">lively</code>,让 Meta Server 允许删除无用的副本数据。</p>
<h1 id="垃圾目录管理">垃圾目录管理</h1>
<p>Replica Server 中的 replica 目录如果不需要了或者损坏了,都会变成垃圾目录:不需要的目录会加 <code class="language-plaintext highlighter-rouge">.gar</code> 后缀,出错的目录会加 <code class="language-plaintext highlighter-rouge">.err</code> 后缀。这些目录不会被立即删除,因为考虑到某些极端情况下可能还有价值(例如系统崩溃时通过他们来找回数据)。</p>
<p>有两个配置参数决定这些目录的真正删除时机:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[replication]
gc_disk_error_replica_interval_seconds = 604800
gc_disk_garbage_replica_interval_seconds = 86400
</code></pre></div></div>
<p>对于这两种目录,会检查目录的最后修改时间(2.6 版本以前是目录的最后修改时间,2.6 开始是目录名中的时间戳字段),只有当最后修改时间与当前时间的差距超过了对应的参数时,才会执行删除。</p>
<p>如果想通过及时删除这些垃圾目录来节省磁盘存储使用量,可以减小这两个参数的值。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[replication]
gc_disk_error_replica_interval_seconds = 3600
gc_disk_garbage_replica_interval_seconds = 3600
</code></pre></div></div>
<ul>
<li>如果版本小于 1.11.3,需要重启 Replica Server 使配置生效。</li>
<li>如果版本在 1.11.3 到 2.1 之间,可以通过 <a href="remote-commands">远程命令</a><code class="language-plaintext highlighter-rouge">useless-dir-reserve-seconds</code> 命令来动态地同时修改这两个参数,不用重启 Replica Server 进程使其生效。例如将这两个参数修改为 0,用于紧急清理垃圾目录:
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&gt;&gt;&gt; remote_command -t replica-server useless-dir-reserve-seconds 0
</code></pre></div> </div>
<p>在确认清理完毕后,再还原为配置文件中的值:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&gt;&gt;&gt; remote_command -t replica-server useless-dir-reserve-seconds DEFAULT
</code></pre></div> </div>
</li>
<li>从版本 2.2 开始,可以通过 <a href="/zh/api/http">HTTP 接口</a> 动态修改这两个参数的值,不用重启 Replica Server 进程使其生效。</li>
</ul>
<h1 id="rocksdb-checkpoints-管理">RocksDB checkpoints 管理</h1>
<p>Replica Server 底层使用 RocksDB 存储数据,会定期生成 <a href="https://github.com/facebook/rocksdb/wiki/Checkpoints">checkpoint</a>。Checkpoint 目录会放在 replica 的 data 目录下,并以生成时的 <code class="language-plaintext highlighter-rouge">last_durable_decree</code> 作为作为后缀。</p>
<p>如下图,replica 的 data 目录下包含当前正在使用的 rdb 目录和若干个 checkpoint 目录:
<img src="/assets/images/checkpoint_dirs.png" alt="checkpoint_dirs.png" class="img-responsive" /></p>
<p>生成 checkpoint 时,checkpoint 中的文件都是通过硬链接方式生成的,而不是通过拷贝的方式。其中的一个 sstable 文件可能被 rdb 持有,也可能被一个或者多个 checkpoint 持有。只要任意一个在持有,该文件的数据就存在于磁盘盘上,消耗存储空间。只有 rdb 和所有的 checkpoint 都不持有该文件,他才会被删除。</p>
<p>RocksDB 后台在持续进行 compaction 操作,所以 checkpoint 中持有的 sstable 可能已经不被 rdb 所持有了(称其为过期)。如果 checkpoint 的保留时间太长,这些过期的 sstable 不能被及时删除,就会占用额外的磁盘存储空间。尤其对于写入量大的表,compaction 也会进行得更频繁,单个 sstable 文件的生命周期很短,如果 checkpoint 数保留得比较多的话,占用的存储空间很可能几倍于当前实际的数据大小。</p>
<p>以下配置参数决定了 checkpoint 删除的策略:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[pegasus.server]
checkpoint_reserve_min_count = 2
checkpoint_reserve_time_seconds = 1800
</code></pre></div></div>
<p>其中:</p>
<ul>
<li>checkpoint_reserve_min_count:表示 checkpoint 的最少保留个数,只有 checkpoint 个数超过这个限制的时候,最老的 checkpoint 才可能被删除。</li>
<li>checkpoint_reserve_time_seconds:表示 checkpoint 的最小保留时间,只有 checkpoint 生成时间距离当前时间超过这个值时,最老的才可能被删除。</li>
<li>只有当这两个参数所提供的限制条件同时满足时,checkpoint 才会被删除。</li>
</ul>
<p>如果想要节省磁盘存储使用量,及时删除过老的 checkpoint 目录,可以减小这两个参数。例如:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[pegasus.server]
checkpoint_reserve_min_count = 1
checkpoint_reserve_time_seconds = 1200
</code></pre></div></div>
<p>注意:不建议将 <code class="language-plaintext highlighter-rouge">checkpoint_reserve_time_seconds</code> 设得太小。考虑到对 learn 的影响,要大于 <code class="language-plaintext highlighter-rouge">replica_assign_delay_ms_for_dropouts</code> 的值(默认是 5 分钟)。</p>
<h2 id="设置表级配置">设置表级配置</h2>
<p>从 1.11.3 版本开始,支持通过 <a href="table-env">Table 环境变量</a> 动态修改指定表的这两项配置,可不重启 Replica Server 进程。例如:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&gt;&gt;&gt; use &lt;table_name&gt;
&gt;&gt;&gt; set_app_envs rocksdb.checkpoint.reserve_min_count 1
&gt;&gt;&gt; set_app_envs rocksdb.checkpoint.reserve_time_seconds 600
</code></pre></div></div>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="content is-small has-text-centered">
<div style="margin-bottom: 20px;">
<a href="http://incubator.apache.org">
<img src="/assets/images/egg-logo.png"
width="15%"
alt="Apache Incubator"/>
</a>
</div>
Copyright &copy; 2023 <a href="http://www.apache.org">The Apache Software Foundation</a>.
Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version
2.0</a>.
<br><br>
Apache Pegasus is an effort undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the Apache Incubator. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure, communications, and decision making process
have stabilized in a manner consistent with other successful ASF projects. While incubation status is
not necessarily a reflection of the completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.
<br><br>
Apache Pegasus, Pegasus, Apache, the Apache feather logo, and the Apache Pegasus project logo are either
registered trademarks or trademarks of The Apache Software Foundation in the United States and other
countries.
</div>
</div>
</footer>
</div>
<!-- right panel -->
<div class="dashboard-panel is-small is-scrollable is-hidden-mobile">
<p class="menu-label">
<span class="icon">
<i class="fa fa-bars" aria-hidden="true"></i>
</span>
本页导航
</p>
<ul class="menu-list">
<li><a href="#背景介绍">背景介绍</a></li>
<li><a href="#replica-副本数管理">Replica 副本数管理</a></li>
<li><a href="#垃圾目录管理">垃圾目录管理</a></li>
<li><a href="#rocksdb-checkpoints-管理">RocksDB checkpoints 管理</a>
<ul>
<li><a href="#设置表级配置">设置表级配置</a></li>
</ul>
</li>
</ul>
</div>
</div>
<script src="/assets/js/app.js" type="text/javascript"></script>
<script>
docsearch({
container: '#docsearch',
appId: 'QRN30RBW0S',
indexName: 'pegasus-apache',
apiKey: 'd3a3252fa344359766707a106c4ed88f',
debug: true
});
</script>
</body>
</html>