注意
本文档适用于 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 添加密钥环,请运行以下命令:
ceph auth add {osd} {--in-file|-i} {path-to-osd-keyring}
要列出集群的密钥及其功能,请运行以下命令:
ceph auth ls
Placement Group Subsystem
要显示所有放置组(PG)的统计信息,请运行以下命令:
ceph pg dump [--format {format}]
这里有效的格式是plain
(默认),af6592: 。如上所述,JSON 是工具、脚本和其他自动化形式的推荐格式。json
json-pretty
,
xml
, and xml-pretty
. When implementing monitoring tools and other
tools, it is best to use the json
格式。JSON 解析比plain
格式(更易于人类阅读)更确定,并且布局在版本之间更加一致。工具jq
对于从 JSON 输出中提取数据非常有用。
要显示所有卡在指定状态的 PG 的统计信息,请运行以下命令:
ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format {format}] [-t|--threshold {seconds}]
这里--format
may be plain
(默认),af6592: 。如上所述,JSON 是工具、脚本和其他自动化形式的推荐格式。json
, json-pretty
,
xml
或xml-pretty
.
The --threshold
argument determines the time interval (in seconds) for a PG
to be considered 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 映射副本写入文件(另见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}]
The --format
选项接受以下参数:plain
(默认),af6592: 。如上所述,JSON 是工具、脚本和其他自动化形式的推荐格式。json
, json-pretty
, xml
, and xml-pretty
. As noted above, JSON is
the recommended format for tools, scripting, and other forms of automation.
要将 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}
)更改为{weight}
生成 SSH 密钥,运行以下命令:
ceph osd crush reweight {name} {weight}
要将 OSD 标记为lost
生成 SSH 密钥,运行以下命令:
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。大多数运维人员永远不会需要调整它。
要将特定 OSDdown
生成 SSH 密钥,运行以下命令:
ceph osd down {osd-num}
要将特定 OSDout
(以便不为其分配数据),请运行以下命令:
ceph osd out {osd-num}
要将特定 OSDin
(以便为其分配数据),请运行以下命令:
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 将原本位于此 OSD 上的某些数据量(1 -weight
)重新定位到其他位置。该命令不会更改 CRUSH 映射中 OSD 上方的桶的权重。使用该命令只是一个纠正措施:例如,如果您的 OSD 中有一个 OSD 处于 90%,而其他 OSD 处于 50%,您可以减少异常权重以纠正这种不平衡。要为特定 OSD 分配覆盖权重,请运行以下命令:
ceph osd reweight {osd-num} {weight}
Note
任何分配的覆盖重新权重值将与负载均衡器冲突。这意味着如果负载均衡器正在使用,所有覆盖重新权重值都应该是1.0000
以避免集群行为不佳。
集群的 OSD 可以重新加权以保持平衡,如果某些 OSD 被过度使用。请注意,覆盖或reweight
权重彼此相对,默认值为 1.00000;它们的值不是绝对的,并且这些权重必须与 CRUSH 权重区分开来(CRUSH 权重反映桶的绝对容量,以 TiB 为单位)。要按利用率重新加权 OSD,请运行以下命令:
ceph osd reweight-by-utilization [threshold [max_change [max_osds]]] [--no-increasing]
默认情况下,此命令调整具有 ±20% 平均利用率的 OSD 的覆盖权重,但您可以在threshold
参数中指定不同的百分比。
要限制任何 OSD 的重新加权变化量,请使用max_change
参数(默认:0.05)。要限制要调整的 OSD 数量,请使用max_osds
参数(默认:4)。增加这些变量可以加速重新加权过程,但可能会以客户端操作变慢(由于数据移动增加)为代价。
在运行之前,您可以测试osd reweight-by-utilization
命令。要找出哪些和多少 PG 和 OSD 将受特定使用osd reweight-by-utilization
命令的影响,请运行以下命令:
ceph osd test-reweight-by-utilization [threshold [max_change max_osds]] [--no-increasing]
The --no-increasing
参数可以添加到reweight-by-utilization
和test-reweight-by-utilization
命令中,以防止当前小于 1.00000 的任何覆盖权重增加。此参数在某些情况下可能很有用:例如,当您匆忙平衡以纠正full
或nearfull
OSD 时,或者当有 OSD 正在撤离或缓慢投入使用时。
使用 Nautilus 或更新版本(或 Luminous 和 Mimic 的后续版本)且没有预 Luminous 客户端的部署运维人员可能更希望启用负载均衡器`模块。块列表可以通过添加或删除 IP 地址或 CIDR 范围进行修改。如果地址被列入块列表,它将无法连接到任何 OSD。如果 OSD 包含在已列入块列表的 IP 地址或 CIDR 范围内,当它作为客户端时将无法对其对等 OSD 执行操作:此类被阻止的操作包括分层和从复制功能。要向块列表添加或删除 IP 地址或 CIDR 范围,请运行以下命令之一:ceph-mgr
.
The blocklist can be modified by adding or removing an IP address or a CIDR range. If an address is blocklisted, it will be unable to connect to any OSD. If an OSD is contained within an IP address or CIDR range that has been blocklisted, the OSD will be unable to perform operations on its peers when it acts as a client: such blocked operations include tiering and copy-from functionality. To add or remove an IP address or CIDR range to the blocklist, run one of the following commands:
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 发送清理命令,或向所有 OSD(使用*
)发送清理命令,请运行以下命令:
ceph osd scrub {osd-num}
要向特定 OSD 发送修复命令,或向所有 OSD(使用*
)发送修复命令,请运行以下命令:
ceph osd repair N
您可以对特定 OSD 运行一个简单的吞吐量基准测试。此测试以增量方式写入总大小为TOTAL_DATA_BYTES
(默认:1 GB)的数据,通过多个大小为BYTES_PER_WRITE
(默认:4 MB)的写入请求。此测试不是破坏性的,它不会覆盖现有的活动 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
Todo
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
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.