管理对象元数据存储
StorageGRID 系统的对象元数据容量用于控制可存储在该系统上的最大对象数。为了确保 StorageGRID 系统有足够的空间来存储新对象,您必须了解 StorageGRID 在何处以及如何存储对象元数据。
什么是对象元数据?
对象元数据是指描述对象的任何信息。StorageGRID 使用对象元数据跟踪网格中所有对象的位置,并管理每个对象的生命周期。
对于 StorageGRID 中的对象,对象元数据包括以下类型的信息:
-
系统元数据,包括每个对象的唯一 ID ( UUID ),对象名称, S3 存储分段或 Swift 容器的名称,租户帐户名称或 ID ,对象的逻辑大小,首次创建对象的日期和时间, 以及上次修改对象的日期和时间。
-
与对象关联的任何自定义用户元数据键值对。
-
对于 S3 对象,是指与该对象关联的任何对象标记键值对。
-
对于复制的对象副本,为每个副本提供当前存储位置。
-
对于经过擦除编码的对象副本,为每个片段的当前存储位置。
-
对于云存储池中的对象副本,此对象的位置,包括外部存储分段的名称和对象的唯一标识符。
-
对于分段对象和多部分对象,分段标识符和数据大小。
如何存储对象元数据?
StorageGRID 在 Cassandra 数据库中维护对象元数据,该数据库独立于对象数据进行存储。为了提供冗余并防止对象元数据丢失, StorageGRID 会为每个站点的系统中的所有对象存储三个元数据副本。对象元数据的三个副本均匀分布在每个站点的所有存储节点上。
此图表示两个站点上的存储节点。每个站点都具有相同数量的对象元数据,这些元数据会在该站点的存储节点之间平均分布。
对象元数据存储在何处?
此图表示单个存储节点的存储卷。
如图所示, StorageGRID 会为每个存储节点的存储卷 0 上的对象元数据预留空间。它会使用预留空间存储对象元数据并执行基本数据库操作。存储卷 0 和存储节点中所有其他存储卷上的任何剩余空间仅用于对象数据(复制的副本和经过纠删编码的片段)。
为特定存储节点上的对象元数据预留的空间量取决于多种因素,如下所述。
元数据预留空间设置
元数据预留空间 _ 是一个系统范围设置,表示将为每个存储节点的卷 0 上的元数据预留的空间量。如表所示, StorageGRID 11.6 的此设置的默认值如下所示:
-
最初安装 StorageGRID 时使用的软件版本。
-
每个存储节点上的 RAM 量。
用于初始 StorageGRID 安装的版本 | 存储节点上的 RAM 量 | StorageGRID 11.6. 的默认元数据预留空间设置 |
---|---|---|
11.5/11.6. |
网格中的每个存储节点上的容量为 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 安装的默认设置,其中每个存储节点的 RAM 均为 128 GB 或以上。
元数据的实际预留空间
与系统范围的元数据预留空间设置不同,系统会为每个存储节点确定对象元数据的 actual reserved space 。对于任何给定的存储节点,元数据的实际预留空间取决于节点的卷 0 大小以及系统范围的 * 元数据预留空间 * 设置。
节点的卷 0 大小 | 元数据的实际预留空间 |
---|---|
小于 500 GB (非生产用) |
卷 0 的 10% |
500 GB 或更大 |
这些值中较小的值:
|
要查看特定存储节点上元数据的实际预留空间,请执行以下操作:
-
在网格管理器中,选择 * 节点 * > * 存储节点 _* 。
-
选择 * 存储 * 选项卡。
-
将光标悬停在 "Storage Used - Object Metadata " 图表上,找到 "* 实际预留 * " 值。
在屏幕截图中, * 实际预留 * 值为 8 TB 。此屏幕截图适用于新 StorageGRID 11.6 安装中的大型存储节点。由于此存储节点的系统范围元数据预留空间设置小于卷 0 ,因此此节点的实际预留空间等于元数据预留空间设置。
实际预留的元数据空间示例
假设您安装的是使用版本 11.6 的新 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 系统的整体元数据容量取决于最小站点的对象元数据容量。
由于对象元数据容量控制最大对象数,因此当一个节点用尽元数据容量时,网格实际上已满。