管理对象元数据存储
StorageGRID 系统的对象元数据容量用于控制可存储在该系统上的最大对象数。为了确保 StorageGRID 系统有足够的空间来存储新对象,您必须了解 StorageGRID 在何处以及如何存储对象元数据。
什么是对象元数据?
对象元数据是指描述对象的任何信息。StorageGRID 使用对象元数据跟踪网格中所有对象的位置,并管理每个对象的生命周期。
对于 StorageGRID 中的对象,对象元数据包括以下类型的信息:
-
系统元数据,包括每个对象的唯一 ID ( UUID ),对象名称, S3 存储分段或 Swift 容器的名称,租户帐户名称或 ID ,对象的逻辑大小,首次创建对象的日期和时间, 以及上次修改对象的日期和时间。
-
与对象关联的任何自定义用户元数据键值对。
-
对于 S3 对象,是指与该对象关联的任何对象标记键值对。
-
对于复制的对象副本,为每个副本提供当前存储位置。
-
对于经过擦除编码的对象副本,为每个片段的当前存储位置。
-
对于云存储池中的对象副本,此对象的位置,包括外部存储分段的名称和对象的唯一标识符。
-
对于分段对象和多部分对象,分段标识符和数据大小。
如何存储对象元数据?
StorageGRID 在 Cassandra 数据库中维护对象元数据,该数据库独立于对象数据进行存储。为了提供冗余并防止对象元数据丢失, StorageGRID 会为每个站点的系统中的所有对象存储三个元数据副本。
此图表示两个站点上的存储节点。每个站点都具有相同数量的对象元数据、每个站点的元数据会细分为该站点的所有存储节点。
对象元数据存储在何处?
此图表示单个存储节点的存储卷。
如图所示, StorageGRID 会为每个存储节点的存储卷 0 上的对象元数据预留空间。它会使用预留空间存储对象元数据并执行基本数据库操作。存储卷 0 和存储节点中所有其他存储卷上的任何剩余空间仅用于对象数据(复制的副本和经过纠删编码的片段)。
在特定存储节点上为对象元数据预留的空间量取决于多个因素、如下所述。
元数据预留空间设置
元数据预留空间 _ 是一个系统范围设置,表示将为每个存储节点的卷 0 上的元数据预留的空间量。如表所示、此设置的默认值基于:
-
最初安装 StorageGRID 时使用的软件版本。
-
每个存储节点上的 RAM 量。
用于初始 StorageGRID 安装的版本 | 存储节点上的 RAM 量 | 默认的元数据预留空间设置 |
---|---|---|
11.5至11.7 |
网格中的每个存储节点上的容量为 128 GB 或更大 |
8 TB ( 8 , 000 GB ) |
网格中任何存储节点上的容量小于 128 GB |
3 TB ( 3 , 000 GB ) |
|
11.1 到 11.4 |
任何一个站点的每个存储节点上的容量为 128 GB 或更大 |
4 TB ( 4 , 000 GB ) |
每个站点的任何存储节点上的容量小于 128 GB |
3 TB ( 3 , 000 GB ) |
|
11.0 或更早版本 |
任意数量 |
2 TB ( 2 , 000 GB ) |
查看元数据预留空间设置
按照以下步骤查看StorageGRID 系统的元数据预留空间设置。
-
选择 * 配置 * > * 系统 * > * 存储选项 * 。
-
在存储水印表中,找到 * 元数据预留空间 * 。
在屏幕截图中, * 元数据预留空间 * 值为 8 , 000 GB ( 8 TB )。这是新安装的StorageGRID 11.6或更高版本的默认设置、其中每个存储节点具有128 GB或更多RAM。
元数据的实际预留空间
与系统范围的元数据预留空间设置不同,系统会为每个存储节点确定对象元数据的 actual reserved space 。对于任何给定的存储节点,元数据的实际预留空间取决于节点的卷 0 大小以及系统范围的 * 元数据预留空间 * 设置。
节点的卷 0 大小 | 元数据的实际预留空间 |
---|---|
小于 500 GB (非生产用) |
卷 0 的 10% |
500 GB 或更大 |
这些值中较小的值:
|
查看元数据的实际预留空间
按照以下步骤查看特定存储节点上为元数据预留的实际空间。
-
在网格管理器中,选择 * 节点 * > * 存储节点 _* 。
-
选择 * 存储 * 选项卡。
-
将光标置于"已用存储-对象元数据"图表上、然后找到*实际预留*值。
在屏幕截图中, * 实际预留 * 值为 8 TB 。此屏幕截图适用于新 StorageGRID 11.6 安装中的大型存储节点。由于此存储节点的系统范围元数据预留空间设置小于卷 0 ,因此此节点的实际预留空间等于元数据预留空间设置。
实际预留的元数据空间示例
假设您使用11.7版安装了一个新的StorageGRID 系统。在此示例中,假设每个存储节点的 RAM 超过 128 GB ,并且存储节点 1 ( SN1 )的卷 0 为 6 TB 。基于以下值:
-
系统范围的 * 元数据预留空间 * 设置为 8 TB 。(如果每个存储节点的RAM超过128 GB、则这是新安装的StorageGRID 11.6或更高版本的默认值。)
-
SN1 元数据的实际预留空间为 6 TB 。(由于卷 0 小于 * 元数据预留空间 * 设置,因此会保留整个卷。)
允许的元数据空间
每个存储节点为元数据实际预留的空间细分为可用于对象元数据的空间(允许的元数据空间 _ )以及基本数据库操作(如数据缩减和修复)以及未来硬件和软件升级所需的空间。允许的元数据空间用于控制整体对象容量。
下表显示了StorageGRID 如何根据不同存储节点的内存量和元数据的实际预留空间计算不同存储节点的*允许元数据空间*。
存储节点上的内存量 |
|||
< ; 128 GB |
> ; = 128 GB |
元数据的实际预留空间 |
|
< ; = 4 TB |
元数据的实际预留空间的 60% ,最多 1.32 TB |
元数据实际预留空间的 60% ,最大 1.98 TB |
管理; 4 TB |
查看允许的元数据空间
按照以下步骤查看存储节点允许的元数据空间。
-
在网格管理器中,选择 * 节点 * 。
-
选择存储节点。
-
选择 * 存储 * 选项卡。
-
将光标置于已用存储-对象元数据图表上、然后找到*允许*值。
在屏幕截图中、*允许*值为3.96 TB、这是存储节点的最大值、该存储节点的元数据实际预留空间超过4 TB。
-
允许 * 值对应于此 Prometheus 指标:
storagegrid_storage_utilization_metadata_allowed_bytes
允许的元数据空间示例
假设您安装的是使用版本 11.6 的 StorageGRID 系统。在此示例中,假设每个存储节点的 RAM 超过 128 GB ,并且存储节点 1 ( SN1 )的卷 0 为 6 TB 。基于以下值:
-
系统范围的 * 元数据预留空间 * 设置为 8 TB 。(当每个存储节点的RAM超过128 GB时、这是StorageGRID 11.6或更高版本的默认值。)
-
SN1 元数据的实际预留空间为 6 TB 。(由于卷 0 小于 * 元数据预留空间 * 设置,因此会保留整个卷。)
-
根据中所示的计算、SN1上的元数据允许的空间为3 TB 元数据允许的空间表:(元数据的实际预留空间−1 TB)×60%、最多3.96 TB。
不同大小的存储节点如何影响对象容量
如上所述, StorageGRID 会在每个站点的存储节点之间均匀分布对象元数据。因此,如果某个站点包含不同大小的存储节点,则该站点上最小的节点将决定该站点的元数据容量。
请考虑以下示例:
-
您有一个单站点网格,其中包含三个大小不同的存储节点。
-
* 元数据预留空间 * 设置为 4 TB 。
-
对于实际预留的元数据空间和允许的元数据空间,存储节点具有以下值。
存储节点 卷 0 的大小 实际预留的元数据空间 允许的元数据空间 SN1
2.2 TB
2.2 TB
1.32 TB
SN2
5 TB
4 TB
1.98 TB
SN3
6 TB
4 TB
1.98 TB
由于对象元数据在站点的存储节点之间平均分布,因此本示例中的每个节点只能持有 1.32 TB 的元数据。无法使用SN2和SN3允许的额外0.66 TB元数据空间。
同样,由于 StorageGRID 会维护每个站点上 StorageGRID 系统的所有对象元数据,因此 StorageGRID 系统的整体元数据容量取决于最小站点的对象元数据容量。
由于对象元数据容量控制最大对象数,因此当一个节点用尽元数据容量时,网格实际上已满。
-
要了解如何监控每个存储节点的对象元数据容量、请参见的说明 "监控StorageGRID"。
-
要增加系统的对象元数据容量、 "扩展网格" 添加新存储节点。