控制命令

监视器命令

监视器命令用 ceph 工具发出:

  1. ceph [-m monhost] {command}

命令格式通常是(但不总是):

  1. ceph {subsystem} {command}

系统命令

下列命令显示集群状态:

  1. ceph -s
  2. ceph status

下列命令显示集群状态的运行摘要、及主要事件:

  1. ceph -w

下列命令显示监视器法定人数状态,包括哪些监视器参与着、哪个是首领。

  1. ceph quorum_status

下列命令查询单个监视器状态,包括是否在法定人数里。

  1. ceph [-m monhost] mon_status

认证子系统

要添加一个 OSD 的密钥环,执行下列命令:

  1. ceph auth add {osd} {--in-file|-i} {path-to-osd-keyring}

要列出集群的密钥及其能力,执行下列命令:

  1. ceph auth list

归置组子系统

要显示所有归置组的统计信息,执行下列命令:

  1. ceph pg dump [--format {format}]

可用输出格式有 plain (默认)和 json

要显示卡在某状态的所有归置组,执行下列命令:

  1. ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format {format}] [-t|--threshold {seconds}]
—format 可以是 plain (默认)或 json

—threshold 定义了多久算“卡住了”(默认 300 秒)

Inactive 归置组不能处理读或写,因为它们在等待数据及时更新的 OSD 回来。

Unclean 归置组包含副本数未达期望值的对象,它们应该在恢复中。

Stale 归置组处于未知状态——归置组所托付的 OSD 有一阵没向监视器报告了(由 monosdreporttimeout 配置)。

删除“丢失”对象,或者恢复到其先前状态,可以是前一版本、或如果刚创建就干脆删除。

  1. ceph pg {pgid} mark_unfound_lost revert|delete

OSD 子系统

查询 OSD 子系统状态:

  1. ceph osd stat

把最新的 OSD 运行图拷贝到一个文件,参见 osdmaptool

  1. ceph osd getmap -o file

从最新 OSD 运行图拷出 CRUSH 图:

  1. ceph osd getcrushmap -o file

前述功能等价于:

  1. ceph osd getmap -o /tmp/osdmap
  2. osdmaptool /tmp/osdmap --export-crush file

转储 OSD 运行图, -f 的可用格式有 plainjson ,如未指定 —format 则转储为纯文本。

  1. ceph osd dump [--format {format}]

把 OSD 运行图转储为树,每个 OSD 一行、包含权重和状态。

  1. ceph osd tree [--format {format}]

找出某对象在哪里或应该在哪里:

  1. ceph osd map <pool-name> <object-name>

增加或挪动一个新 OSD 条目,要给出 id/name/weight 和位置参数。

  1. ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]]

从现有 CRUSH 图删除存在的条目( OSD ):

  1. ceph osd crush remove {name}

从现有 CRUSH 图删除存在的空桶:

  1. ceph osd crush remove {bucket-name}

把有效的桶从分级结构里的一个位置挪到另一个。

  1. ceph osd crush move {id} {loc1} [{loc2} ...]

设置 {name} 所指条目的权重为 {weight}

  1. ceph osd crush reweight {name} {weight}

创建集群快照。

  1. ceph osd cluster_snap {name}

把 OSD 标记为丢失,有可能导致永久性数据丢失,慎用!

  1. ceph osd lost {id} [--yes-i-really-mean-it]

创建新 OSD 。如果未指定 ID ,有可能的话将自动分配个新 ID 。

  1. ceph osd create [{uuid}]

删除指定 OSD 。

  1. ceph osd rm [{id}...]

查询 OSD 运行图里的 max_osd 参数。

  1. ceph osd getmaxosd

导入指定 CRUSH 图。

  1. ceph osd setcrushmap -i file

设置 OSD 运行图的 max_osd 参数,扩展存储集群时有必要。

  1. ceph osd setmaxosd

把 ID 为 {osd-num} 的 OSD 标记为 down 。

  1. ceph osd down {osd-num}

把 OSD {osd-num} 标记为数据分布之外(即不给分配数据)。

  1. ceph osd out {osd-num}

把 OSD {osd-num} 标记为数据分布之内(即分配了数据)。

  1. ceph osd in {osd-num}

列出 Ceph 集群载入的类。

  1. ceph class list

设置或清空 OSD 运行图里的暂停标记。若设置了,不会有 IO 请求发送到任何 OSD ;用 unpause 清空此标记会导致重发未决的请求。

  1. ceph osd pause
  2. ceph osd unpause

{osd-num} 的权重设置为 {weight} ,权重相同的两个 OSD 大致会收到相同的 I/O 请求、并存储相同数量的数据。 cephosdreweight 命令可给 OSD 设置一个增益权重,有效值在 0 和 1 之间,它使得 CRUSH 重新归置一定数量的、本应该放到此处的数据。它不会影响 crush 图里所分配的权重,在 CRUSH 分布算法没能理想地执行时,它可作为一种纠正手段。比如,假设你的某个 OSD 使用率达到了 90% ,但其它的大致都在 50% ,这时你就可以试着下调此权重来补偿它。

  1. ceph osd reweight {osd-num} {weight}

重设所有滥用 OSD 的权重,它默认会下调达到平均利用率 120% 的那些OSD ,除非你指定了阀值。

  1. ceph osd reweight-by-utilization [threshold]

增加、删除黑名单里的地址。增加地址的时候可以指定有效期,否则有效期为 1 小时。黑名单里的地址不允许连接任何 OSD ,此技术常用于防止滞后的元数据服务器“错爱” OSD 上的数据。

这些命令大多只在故障测试时有用,因为黑名单是自动维护的,无需手动干涉。

  1. ceph osd blacklist add ADDRESS[:source_port] [TIME]
  2. ceph osd blacklist rm ADDRESS[:source_port]

创建/删除存储池快照。

  1. ceph osd pool mksnap {pool-name} {snap-name}
  2. ceph osd pool rmsnap {pool-name} {snap-name}

创建/删除/重命名存储池。

  1. ceph osd pool create {pool-name} pg_num [pgp_num]
  2. ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]
  3. ceph osd pool rename {old-name} {new-name}

更改存储池设置。

  1. ceph osd pool set {pool-name} {field} {value}

可用的 field 值有:

  • size: 设置存储池内数据的副本数;
  • crash_replay_interval: 允许客户端重放确认而未提交的请求前等待的时间,秒;
  • pg_num: 归置组数量;
  • pgp_num: 计算归置组存放的有效数量;
  • crush_ruleset: 用于归置映射的规则号。

获取存储池配置值。

  1. ceph osd pool get {pool-name} {field}

可用的 field 值有:

  • pg_num: 归置组数量;
  • pgp_num: 计算归置组存放的有效数量;
  • lpg_num: 本地归置组数量;
  • lpgp_num: 用于存放本地归置组的数量。

向 OSD {osd-num} 下达一个洗刷命令,用通配符 * 把命令下达到所有 OSD 。

  1. ceph osd scrub {osd-num}

向 osdN 下达修复命令,用 * 下达到所有 OSD 。

  1. ceph osd repair N

在 osdN 上进行个简单的吞吐量测试,每次写入 BYTES_PER_WRITE 、一共写入 TOTAL_BYTES 。默认以 4MB 增量写入 1GB 。此压力测试是非破坏性的,不会覆盖已有 OSD 数据,但可能会暂时影响同时访问此 OSD 的客户端性能。

  1. ceph tell osd.N bench [NUMER_OF_OBJECTS] [BYTES_PER_WRITE]

MDS 子系统

更改在运行 mds 的参数:

  1. ceph tell mds.{mds-id} injectargs --{switch} {value} [--{switch} {value}]

例如:

  1. ceph tell mds.0 injectargs --debug_ms 1 --debug_mds 10

打开了调试消息。

  1. ceph mds stat

显示所有元数据服务器状态。

  1. ceph mds fail 0

把活跃 MDS 标记为失败,如果有候补此命令会触发故障转移。

Todo

cephmds 子命令缺少文档:set, dump, getmap, stop, setmap

监视器子系统

查看监视器状态:

  1. ceph mon stat
  2.  
  3. 2011-12-14 10:40:59.044395 mon {- [mon,stat]
  4. 2011-12-14 10:40:59.057111 mon.1 -} 'e3: 5 mons at {a=10.1.2.3:6789/0,b=10.1.2.4:6789/0,c=10.1.2.5:6789/0,d=10.1.2.6:6789/0,e=10.1.2.7:6789/0}, election epoch 16, quorum 0,1,2,3' (0)

末尾的 quorum 列表列出了当前法定人数里的监视器节点。

也可以更直接地获取:

  1. $ ./ceph quorum_status
  2.  
  3. 2011-12-14 10:44:20.417705 mon {- [quorum_status]
  4. 2011-12-14 10:44:20.431890 mon.0 -}
  1. '{ "election_epoch": 10,
  2. "quorum": [
  3. 0,
  4. 1,
  5. 2],
  6. "monmap": { "epoch": 1,
  7. "fsid": "444b489c-4f16-4b75-83f0-cb8097468898",
  8. "modified": "2011-12-12 13:28:27.505520",
  9. "created": "2011-12-12 13:28:27.505520",
  10. "mons": [
  11. { "rank": 0,
  12. "name": "a",
  13. "addr": "127.0.0.1:6789\/0"},
  14. { "rank": 1,
  15. "name": "b",
  16. "addr": "127.0.0.1:6790\/0"},
  17. { "rank": 2,
  18. "name": "c",
  19. "addr": "127.0.0.1:6791\/0"}]}}' (0)

如果法定人数未形成,上述命令会一直等待。

你刚刚连接的监视器的状态(用 -mHOST:PORT 另外指定):

  1. ceph mon_status
  2.  
  3.  
  4. 2011-12-14 10:45:30.644414 mon {- [mon_status]
  5. 2011-12-14 10:45:30.644632 mon.0 -}
  1. '{ "name": "a",
  2. "rank": 0,
  3. "state": "leader",
  4. "election_epoch": 10,
  5. "quorum": [
  6. 0,
  7. 1,
  8. 2],
  9. "outside_quorum": [],
  10. "monmap": { "epoch": 1,
  11. "fsid": "444b489c-4f16-4b75-83f0-cb8097468898",
  12. "modified": "2011-12-12 13:28:27.505520",
  13. "created": "2011-12-12 13:28:27.505520",
  14. "mons": [
  15. { "rank": 0,
  16. "name": "a",
  17. "addr": "127.0.0.1:6789\/0"},
  18. { "rank": 1,
  19. "name": "b",
  20. "addr": "127.0.0.1:6790\/0"},
  21. { "rank": 2,
  22. "name": "c",
  23. "addr": "127.0.0.1:6791\/0"}]}}' (0)

监视器状态转储:

  1. ceph mon dump
  2.  
  3. 2011-12-14 10:43:08.015333 mon {- [mon,dump]
  4. 2011-12-14 10:43:08.015567 mon.0 -} 'dumped monmap epoch 1' (0)
  5. epoch 1
  6. fsid 444b489c-4f16-4b75-83f0-cb8097468898
  7. last_changed 2011-12-12 13:28:27.505520
  8. created 2011-12-12 13:28:27.505520
  9. 0: 127.0.0.1:6789/0 mon.a
  10. 1: 127.0.0.1:6790/0 mon.b
  11. 2: 127.0.0.1:6791/0 mon.c