注意
本文档适用于 Ceph 的开发版本。
控制命令
监视器命令
要发出监视器命令,请使用 ceph 实用程序
ceph [-m monhost] {command}
在大多数情况下,监视器命令具有以下形式
ceph {subsystem} {command}
系统命令
要显示当前集群状态,请运行以下命令
ceph -s
ceph status
要显示集群状态和主要事件的运行摘要,请运行以下命令
ceph -w
要显示监视器法定人数,包括哪些监视器参与其中以及哪个是领导者,请运行以下命令
ceph mon stat
ceph quorum_status
要查询单个监视器的状态,包括它是否在法定人数中,请运行以下命令
ceph tell mon.[id] mon_status
这里的 [id] 值可以通过查看 ceph -s 的输出来找到。
身份验证子系统
要为特定 OSD 添加 OSD 密钥环,请运行以下命令
ceph auth add {osd} {--in-file|-i} {path-to-osd-keyring}
要列出集群的密钥及其功能,请运行以下命令
ceph auth ls
归置组子系统
要显示所有归置组 (PG) 的统计信息,请运行以下命令
ceph pg dump [--format {format}]
这里的有效格式是 plain(默认)、json、json-pretty、xml 和 xml-pretty。在实现监视工具和其他工具时,最好使用 json 格式。JSON 解析比 plain 格式(更具可读性)更具确定性,并且布局在不同版本之间更加一致。jq 实用程序对于从 JSON 输出中提取数据非常有用。
要显示所有卡在指定状态的 PG 的统计信息,请运行以下命令
ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format {format}] [-t|--threshold {seconds}]
这里的 --format 可以是 plain(默认)、json、json-pretty、xml 或 xml-pretty。
--threshold 参数决定了 PG 被视为 stuck 的时间间隔(以秒为单位)(默认值:300)。
PG 可能会卡在以下任何状态中
Inactive(不活动)
PG 无法处理读取或写入,因为它们正在等待具有最新数据的 OSD 返回到
up状态。
Unclean(不干净)
PG 包含尚未复制所需次数的对象。这些 PG 尚未完成恢复过程。
Stale(陈旧)
PG 处于未知状态,因为托管它们的 OSD 在特定时间段内没有向监视器集群报告(由
mon_osd_report_timeout配置设置指定)。
要删除 lost 对象或将对象恢复到其先前状态,可以通过将其恢复到其先前版本或删除它(如果它刚刚创建且没有先前版本),请运行以下命令
ceph pg {pgid} mark_unfound_lost revert|delete
OSD 子系统
要查询 OSD 子系统状态,请运行以下命令
ceph osd stat
要显示集群中所有 OSD 的 ID、设备类、权重、大小和使用情况,请运行以下命令
ceph osd df
ceph osd df 命令附加了一个摘要,其中包含 OSD 满度统计信息。当集群包含多种大小和类型的 OSD 介质时,通过运行以下形式的命令将范围限制为特定的 CRUSH 设备类,此摘要可能会更有用
ceph osd df hdd
ceph osd df ssd
ceph osd df qlc
要将显示和摘要限制为特定主机上存在的 OSD,请运行以下形式的命令。请注意,此命令可用于其他 CRUSH 拓扑存储桶类型,例如 rack
ceph osd df NAME
要仅显示特定 OSD 的信息,在本例中为 osd.1701,请运行以下形式的命令
ceph osd df 1701
要将最新的 OSD 映射副本写入文件(请参阅 osdmaptool),请运行以下命令
ceph osd getmap -o file
要将最新的 OSD 映射中的 CRUSH 映射副本写入文件,请运行以下命令
ceph osd getcrushmap -o file
请注意,此命令在功能上等同于以下两个命令
ceph osd getmap -o /tmp/osdmap
osdmaptool /tmp/osdmap --export-crush file
要转储 OSD 映射,请运行以下命令
ceph osd dump [--format {format}]
--format 选项接受以下参数:plain(默认)、json、json-pretty、xml 和 xml-pretty。如上所述,JSON 是用于工具、脚本和其他自动化形式的推荐格式。
要将 OSD 映射转储为树形结构,每行显示一个 OSD,并显示有关 OSD 权重和状态的信息,请运行以下命令
ceph osd tree [--format {format}]
要找出特定 RADOS 对象存储在系统中的位置,请运行以下形式的命令
ceph osd map <pool-name> <object-name>
要将新的 OSD(由其 ID、名称或权重指定)添加或移动到特定的 CRUSH 位置,请运行以下命令
ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]]
要从 CRUSH 映射中删除现有 OSD,请运行以下命令
ceph osd crush remove {name}
要从 CRUSH 映射中删除现有存储桶,请运行以下命令
ceph osd crush remove {bucket-name}
要将现有存储桶从 CRUSH 层次结构中的一个位置移动到另一个位置,请运行以下命令
ceph osd crush move {id} {loc1} [{loc2} ...]
要将特定 OSD(由 {name} 指定)的 CRUSH 权重设置为 {weight},请运行以下命令
ceph osd crush reweight {name} {weight}
要将 OSD 标记为 lost,请运行以下命令
ceph osd lost {id} [--yes-i-really-mean-it]
警告
这可能导致永久数据丢失。请谨慎使用!
要创建新的 OSD,请运行以下命令
ceph osd create [{uuid}]
如果此命令未提供 UUID,则当 OSD 启动时将自动设置 UUID。
要删除一个或多个特定 OSD,请运行以下命令
ceph osd rm [{id}...]
要显示 OSD 映射中当前的 max_osd 参数,请运行以下命令
ceph osd getmaxosd
要导入特定的 CRUSH 映射,请运行以下命令
ceph osd setcrushmap -i file
要设置 OSD 映射中的 max_osd 参数,请运行以下命令
ceph osd setmaxosd
该参数的默认值为 10000。大多数操作员永远不需要调整它。
要将特定 OSD 标记为 down,请运行以下命令
ceph osd down {osd-num}
要将特定 OSD 标记为 out(以便不向其分配数据),请运行以下命令
ceph osd out {osd-num}
要将特定 OSD 标记为 in(以便向其分配数据),请运行以下命令
ceph osd in {osd-num}
通过在 OSD 映射中使用“暂停标志”,您可以暂停或取消暂停 I/O 请求。如果设置了标志,则不会向任何 OSD 发送 I/O 请求。清除标志后,待处理的 I/O 请求将重新发送。要设置或清除暂停标志,请运行以下命令之一
ceph osd pause
ceph osd unpause
如果正常的 CRUSH 分布似乎不理想,您可以为特定 OSD 分配一个覆盖或 reweight 权重值。OSD 的权重有助于确定其 I/O 请求和数据存储的程度:两个权重相同的 OSD 将接收大致相同数量的 I/O 请求并存储大致相同数量的数据。ceph osd reweight 命令为 OSD 分配一个覆盖权重。权重值的范围是 0 到 1,该命令强制 CRUSH 重新定位一定数量(1 - weight)的数据,否则这些数据将位于此 OSD 上。该命令不会更改 CRUSH 映射中 OSD 上方存储桶的权重。使用该命令只是一种纠正措施:例如,如果您的一个 OSD 达到 90%,而其他 OSD 达到 50%,您可以降低离群值权重来纠正这种不平衡。要为特定 OSD 分配覆盖权重,请运行以下命令
ceph osd reweight {osd-num} {weight}
注意
任何分配的覆盖重新权重值都会与平衡器冲突。这意味着当使用平衡器时,所有覆盖重新权重值必须重置为 1.0000,以避免不平衡的使用和满的 OSD。大多数没有 Luminous 版本之前客户端的集群应该使用 pg-upmap 平衡器而不是传统的重新权重。
如果某些 OSD 被过度利用,可以重新平衡集群的 OSD 以保持平衡。请注意,覆盖或 reweight 权重的相对值默认为 1.00000。这些值不是绝对值,必须将这些权重与 CRUSH 权重区分开来(CRUSH 权重反映存储桶的绝对容量,以 TiB 为单位)。要按利用率重新平衡 OSD,请运行以下命令
ceph osd reweight-by-utilization [threshold [max_change [max_osds]]] [--no-increasing]
默认情况下,此命令会调整利用率在平均利用率 ±20% 范围内的 OSD 的覆盖权重,但您可以在 threshold 参数中指定不同的百分比。如上所述,大多数没有 Luminous 之前客户端的集群应该改为在 pg-upmap 模式下运行平衡器。
要限制任何 OSD 的重新权重变化增量,请使用 max_change 参数(默认值:0.05)。要限制要调整的 OSD 数量,请使用 max_osds 参数(默认值:4)。增加这些变量可以加快重新权重过程,但可能会以较慢的客户端操作为代价(由于数据移动增加)。
您可以在运行 osd reweight-by-utilization 命令之前对其进行测试。要找出特定使用 osd reweight-by-utilization 命令会影响哪些以及多少个 PG 和 OSD,请运行以下命令
ceph osd test-reweight-by-utilization [threshold [max_change max_osds]] [--no-increasing]
可以将 --no-increasing 选项添加到 reweight-by-utilization 和 test-reweight-by-utilization 命令中,以防止任何当前小于 1.00000 的覆盖权重增加。此选项在某些情况下可能有用:例如,当您为了补救 full 或 nearfull OSD 而仓促平衡时,或者当有 OSD 正在撤离或缓慢投入使用时。
使用 Nautilus 或更新版本(或 Luminous 和 Mimic 的更高版本)且没有 Luminous 之前客户端的部署操作员可能更希望启用 ceph-mgr 的 balancer` 模块。
可以通过添加或删除 IP 地址或 CIDR 范围来修改阻止列表。如果一个地址被阻止,它将无法连接到任何 OSD。如果 OSD 包含在已被阻止的 IP 地址或 CIDR 范围内,则当 OSD 充当客户端时,它将无法对其对等体执行操作:此类被阻止的操作包括分层和 copy-from 功能。要将 IP 地址或 CIDR 范围添加到阻止列表或从中删除,请运行以下命令之一
ceph osd blocklist ["range"] add ADDRESS[:source_port][/netmask_bits] [TIME]
ceph osd blocklist ["range"] rm ADDRESS[:source_port][/netmask_bits]
如果您使用上面的 add 命令将某些内容添加到阻止列表,您可以使用 TIME 关键字指定它将保留在阻止列表上的时间长度(以秒为单位)(默认值:一小时)。要添加或删除 CIDR 范围,请在上述命令中使用 range 关键字。
请注意,这些命令主要用于故障测试。在正常情况下,阻止列表会自动维护,不需要任何手动干预。
要创建或删除特定存储池的快照,请运行以下命令之一
ceph osd pool mksnap {pool-name} {snap-name}
ceph osd pool rmsnap {pool-name} {snap-name}
要创建、删除或重命名特定存储池,请运行以下命令之一
ceph osd pool create {pool-name} [pg_num [pgp_num]]
ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]
ceph osd pool rename {old-name} {new-name}
要更改池设置,请运行以下命令
ceph osd pool set {pool-name} {field} {value}
以下是有效字段
size:池中数据副本的数量。
pg_num:PG 编号。
pgp_num:计算归置时的有效 PG 编号。
crush_rule:用于映射归置的规则编号。
要检索池设置的值,请运行以下命令
ceph osd pool get {pool-name} {field}
有效字段是
pg_num:PG 编号。
pgp_num:计算归置时的有效 PG 编号。
要向特定 OSD 发送 scrub 命令,或向所有 OSD 发送(通过使用 *),请运行以下命令
ceph osd scrub {osd-num}
要向特定 OSD 发送 repair 命令,或向所有 OSD 发送(通过使用 *),请运行以下命令
ceph osd repair N
您可以针对特定 OSD 运行简单的吞吐量基准测试。此测试会以大小为 BYTES_PER_WRITE(默认值:4 MB)的多个写入请求增量写入总大小为 TOTAL_DATA_BYTES(默认值:1 GB)的数据。此测试是非破坏性的,不会覆盖现有的实时 OSD 数据,但可能会暂时影响同时访问 OSD 的客户端的性能。要启动此基准测试,请运行以下命令
ceph tell osd.N bench [TOTAL_DATA_BYTES] [BYTES_PER_WRITE]
要在两次基准测试运行之间的间隔期间清除特定 OSD 的缓存,请运行以下命令
ceph tell osd.N cache drop
要检索特定 OSD 的缓存统计信息,请运行以下命令
ceph tell osd.N cache status
MDS 子系统
要更改正在运行的元数据服务器的配置参数,请运行以下命令
ceph tell mds.{mds-id} config set {setting} {value}
示例:要启用调试消息,请运行以下命令
ceph tell mds.0 config set debug_ms 1
要显示所有元数据服务器的状态,请运行以下命令
ceph mds stat
要将活动的元数据服务器标记为失败(并触发故障转移到备用服务器,如果存在备用服务器),请运行以下命令
ceph mds fail 0
待办事项
ceph mds 缺少文档的子命令:set, dump, getmap, stop, setmap
Mon 子系统
要显示监视器统计信息,请运行以下命令
ceph mon stat
此命令返回类似于以下内容的输出
e2: 3 mons at {a=127.0.0.1:40000/0,b=127.0.0.1:40001/0,c=127.0.0.1:40002/0}, election epoch 6, quorum 0,1,2 a,b,c
输出末尾有一个 quorum 列表。它列出了属于当前法定人数的监视器节点。
要以更直接的方式检索此信息,请运行以下命令
ceph quorum_status -f json-pretty
此命令返回类似于以下内容的输出
{
"election_epoch": 6,
"quorum": [
0,
1,
2
],
"quorum_names": [
"a",
"b",
"c"
],
"quorum_leader_name": "a",
"monmap": {
"epoch": 2,
"fsid": "ba807e74-b64f-4b72-b43f-597dfe60ddbc",
"modified": "2016-12-26 14:42:09.288066",
"created": "2016-12-26 14:42:03.573585",
"features": {
"persistent": [
"kraken"
],
"optional": []
},
"mons": [
{
"rank": 0,
"name": "a",
"addr": "127.0.0.1:40000\/0",
"public_addr": "127.0.0.1:40000\/0"
},
{
"rank": 1,
"name": "b",
"addr": "127.0.0.1:40001\/0",
"public_addr": "127.0.0.1:40001\/0"
},
{
"rank": 2,
"name": "c",
"addr": "127.0.0.1:40002\/0",
"public_addr": "127.0.0.1:40002\/0"
}
]
}
}
上述命令将阻塞,直到达到法定人数。
要查看特定监视器的状态,请运行以下命令
ceph tell mon.[name] mon_status
这里的 [name] 值可以通过查看 ceph quorum_status 命令的输出来找到。此命令返回类似于以下内容的输出
{
"name": "b",
"rank": 1,
"state": "peon",
"election_epoch": 6,
"quorum": [
0,
1,
2
],
"features": {
"required_con": "9025616074522624",
"required_mon": [
"kraken"
],
"quorum_con": "1152921504336314367",
"quorum_mon": [
"kraken"
]
},
"outside_quorum": [],
"extra_probe_peers": [],
"sync_provider": [],
"monmap": {
"epoch": 2,
"fsid": "ba807e74-b64f-4b72-b43f-597dfe60ddbc",
"modified": "2016-12-26 14:42:09.288066",
"created": "2016-12-26 14:42:03.573585",
"features": {
"persistent": [
"kraken"
],
"optional": []
},
"mons": [
{
"rank": 0,
"name": "a",
"addr": "127.0.0.1:40000\/0",
"public_addr": "127.0.0.1:40000\/0"
},
{
"rank": 1,
"name": "b",
"addr": "127.0.0.1:40001\/0",
"public_addr": "127.0.0.1:40001\/0"
},
{
"rank": 2,
"name": "c",
"addr": "127.0.0.1:40002\/0",
"public_addr": "127.0.0.1:40002\/0"
}
]
}
}
要查看监视器状态转储,请运行以下命令
ceph mon dump
此命令返回类似于以下内容的输出
dumped monmap epoch 2
epoch 2
fsid ba807e74-b64f-4b72-b43f-597dfe60ddbc
last_changed 2016-12-26 14:42:09.288066
created 2016-12-26 14:42:03.573585
0: 127.0.0.1:40000/0 mon.a
1: 127.0.0.1:40001/0 mon.b
2: 127.0.0.1:40002/0 mon.c