控制命令

监视器命令

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

ceph [-m monhost] {command}

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

ceph {subsystem} {command}

系统命令

下列命令显示集群状态:

ceph -s
ceph status

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

ceph -w

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

ceph quorum_status

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

ceph [-m monhost] mon_status

认证子系统

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

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

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

ceph auth list

归置组子系统

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

ceph pg dump [--format {format}]

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

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

ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format {format}] [-t|--threshold {seconds}]

--format 可以是 plain (默认)或 json

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

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

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

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

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

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 运行图, -f 的可用格式有 plainjson ,如未指定 --format 则转储为纯文本。

ceph osd dump [--format {format}]

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

ceph osd tree [--format {format}]

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

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

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

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

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

ceph osd crush remove {name}

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

ceph osd crush remove {bucket-name}

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

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

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

ceph osd crush reweight {name} {weight}

创建集群快照。

ceph osd cluster_snap {name}

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

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

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

ceph osd create [{uuid}]

删除指定 OSD 。

ceph osd rm [{id}...]

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

ceph osd getmaxosd

导入指定 CRUSH 图。

ceph osd setcrushmap -i file

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

ceph osd setmaxosd

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

ceph osd down {osd-num}

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

ceph osd out {osd-num}

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

ceph osd in {osd-num}

列出 Ceph 集群载入的类。

ceph class list

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

ceph osd pause
ceph osd unpause

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

ceph osd reweight {osd-num} {weight}

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

ceph osd reweight-by-utilization [threshold]

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

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

ceph osd blacklist add ADDRESS[:source_port] [TIME]
ceph osd blacklist rm ADDRESS[:source_port]

创建/删除存储池快照。

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}

可用的 field 值有:

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

获取存储池配置值。

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

可用的 field 值有:

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

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

ceph osd scrub {osd-num}

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

ceph osd repair N

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

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

MDS 子系统

更改在运行 mds 的参数:

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

例如:

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

打开了调试消息。

ceph mds stat

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

ceph mds fail 0

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

Todo

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

监视器子系统

查看监视器状态:

ceph mon stat

2011-12-14 10:40:59.044395 mon {- [mon,stat]
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 列表列出了当前法定人数里的监视器节点。

也可以更直接地获取:

$ ./ceph quorum_status

2011-12-14 10:44:20.417705 mon {- [quorum_status]
2011-12-14 10:44:20.431890 mon.0 -}
'{ "election_epoch": 10,
  "quorum": [
        0,
        1,
        2],
  "monmap": { "epoch": 1,
      "fsid": "444b489c-4f16-4b75-83f0-cb8097468898",
      "modified": "2011-12-12 13:28:27.505520",
      "created": "2011-12-12 13:28:27.505520",
      "mons": [
            { "rank": 0,
              "name": "a",
              "addr": "127.0.0.1:6789\/0"},
            { "rank": 1,
              "name": "b",
              "addr": "127.0.0.1:6790\/0"},
            { "rank": 2,
              "name": "c",
              "addr": "127.0.0.1:6791\/0"}]}}' (0)

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

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

ceph mon_status


2011-12-14 10:45:30.644414 mon {- [mon_status]
2011-12-14 10:45:30.644632 mon.0 -}
'{ "name": "a",
  "rank": 0,
  "state": "leader",
  "election_epoch": 10,
  "quorum": [
        0,
        1,
        2],
  "outside_quorum": [],
  "monmap": { "epoch": 1,
      "fsid": "444b489c-4f16-4b75-83f0-cb8097468898",
      "modified": "2011-12-12 13:28:27.505520",
      "created": "2011-12-12 13:28:27.505520",
      "mons": [
            { "rank": 0,
              "name": "a",
              "addr": "127.0.0.1:6789\/0"},
            { "rank": 1,
              "name": "b",
              "addr": "127.0.0.1:6790\/0"},
            { "rank": 2,
              "name": "c",
              "addr": "127.0.0.1:6791\/0"}]}}' (0)

监视器状态转储:

ceph mon dump

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