注意
本文档适用于 Ceph 开发版本。
监控集群
在你拥有一个运行中的集群后,你可以使用ceph
工具来监控你的
使用命令行
交互模式
要以交互模式运行ceph
工具,在命令行中输入ceph
并不带任何参数。例如:
ceph
health
status
quorum_status
mon stat
非默认路径
如果你安装集群时为你的配置或密钥环指定了非默认位置,你可以通过运行以下命令来指定它们的位置:ceph
工具
ceph -c /path/to/conf -k /path/to/keyring health
检查集群状态
在你启动集群后,以及在开始读写数据之前,你应该检查你的集群状态。
要检查集群状态,运行以下命令:
ceph status
或者,你可以运行以下命令:
ceph -s
在交互模式下,此操作是通过输入status
并按下Enter:
status
Ceph 将打印集群状态。例如,一个运行每个服务(Monitor、Manager 和 OSD)一个实例的微型 Ceph “演示集群”可能会打印以下内容:
cluster:
id: 477e46f1-ae41-4e43-9c8f-72c918ab0a20
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c
mgr: x(active)
mds: cephfs_a-1/1/1 up {0=a=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in
data:
pools: 2 pools, 16 pgs
objects: 21 objects, 2.19K
usage: 546 GB used, 384 GB / 931 GB avail
pgs: 16 active+clean
Ceph 如何计算数据使用
The usage
值反映了实际原始存储使用的量。值表示集群整体存储容量中可用的量(较小的数字)。概念数字反映存储数据在复制、克隆或快照之前的大小。因此,实际存储的数据量通常超过存储的概念量,因为 Ceph 创建数据的副本,并且还可能使用存储容量进行克隆和快照。xxx
GB / xxx GB
value means the amount available (the lesser number) of the
overall storage capacity of the cluster. The notional number reflects the size
of the stored data before it is replicated, cloned or snapshotted. Therefore,
the amount of data actually stored typically exceeds the notional amount
stored, because Ceph creates replicas of the data and may also use storage
capacity for cloning and snapshotting.
监控集群
Ceph 集群中的每个守护进程都维护一个事件日志,而 Ceph 集群本身维护一个集群日志,记录有关整个 Ceph 集群的高级事件。这些事件记录到 Monitor 服务器的磁盘上(在默认位置/var/log/ceph/ceph.log
),并且可以通过命令行进行监控。
要跟踪集群日志,运行以下命令:
ceph -w
Ceph 将打印系统状态,然后随着每次添加打印每个日志消息。例如:
cluster:
id: 477e46f1-ae41-4e43-9c8f-72c918ab0a20
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c
mgr: x(active)
mds: cephfs_a-1/1/1 up {0=a=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in
data:
pools: 2 pools, 16 pgs
objects: 21 objects, 2.19K
usage: 546 GB used, 384 GB / 931 GB avail
pgs: 16 active+clean
2017-07-24 08:15:11.329298 mon.a mon.0 172.21.9.34:6789/0 23 : cluster [INF] osd.0 172.21.9.34:6806/20527 boot
2017-07-24 08:15:14.258143 mon.a mon.0 172.21.9.34:6789/0 39 : cluster [INF] Activating manager daemon x
2017-07-24 08:15:15.446025 mon.a mon.0 172.21.9.34:6789/0 47 : cluster [INF] Manager daemon x is now available
与添加日志行不同,你可能只想打印最新的几行。运行ceph log last [n]
以查看集群日志的最新n
行。
监控健康检查
Ceph 不断运行各种健康检查。当健康检查失败时,此故障反映在ceph status
和ceph health
的输出中。集群日志接收指示检查何时失败以及集群何时恢复的消息。
例如,当 OSD 停机时,状态输出中的health
部分将更新如下:
health: HEALTH_WARN
1 osds down
Degraded data redundancy: 21/63 objects degraded (33.333%), 16 pgs unclean, 16 pgs degraded
同时,集群日志消息会发出以记录健康检查的失败:
2017-07-25 10:08:58.265945 mon.a mon.0 172.21.9.34:6789/0 91 : cluster [WRN] Health check failed: 1 osds down (OSD_DOWN)
2017-07-25 10:09:01.302624 mon.a mon.0 172.21.9.34:6789/0 94 : cluster [WRN] Health check failed: Degraded data redundancy: 21/63 objects degraded (33.333%), 16 pgs unclean, 16 pgs degraded (PG_DEGRADED)
当 OSD 恢复在线时,集群日志记录集群恢复到健康状态:
2017-07-25 10:11:11.526841 mon.a mon.0 172.21.9.34:6789/0 109 : cluster [WRN] Health check update: Degraded data redundancy: 2 pgs unclean, 2 pgs degraded, 2 pgs undersized (PG_DEGRADED)
2017-07-25 10:11:13.535493 mon.a mon.0 172.21.9.34:6789/0 110 : cluster [INF] Health check cleared: PG_DEGRADED (was: Degraded data redundancy: 2 pgs unclean, 2 pgs degraded, 2 pgs undersized)
2017-07-25 10:11:13.535577 mon.a mon.0 172.21.9.34:6789/0 111 : cluster [INF] Cluster is now healthy
网络性能检查
Ceph OSD 向彼此发送心跳 ping 消息,以监控守护进程可用性和网络性能。如果检测到单个延迟响应,这可能只是表示 OSD 正忙。但如果检测到不同 OSD 对之间的多个延迟,这可能表示网络交换机故障、网卡故障或第 1 层故障。
默认情况下,超过 1 秒(1000 毫秒)的心跳时间会触发健康检查(一个HEALTH_WARN
从仓库中删除它。例如:
HEALTH_WARN Slow OSD heartbeats on back (longest 1118.001ms)
在ceph health detail
命令,你可以看到哪些 OSD 正在经历延迟以及延迟有多长。的输出ceph health
detail
限制为十行。以下是你期望从ceph health detail
command:
[WRN] OSD_SLOW_PING_TIME_BACK: Slow OSD heartbeats on back (longest 1118.001ms)
Slow OSD heartbeats on back from osd.0 [dc1,rack1] to osd.1 [dc1,rack1] 1118.001 msec possibly improving
Slow OSD heartbeats on back from osd.0 [dc1,rack1] to osd.2 [dc1,rack2] 1030.123 msec
Slow OSD heartbeats on back from osd.2 [dc1,rack2] to osd.1 [dc1,rack1] 1015.321 msec
Slow OSD heartbeats on back from osd.1 [dc1,rack1] to osd.0 [dc1,rack1] 1010.456 msec
输出的示例:dump_osd_network
命令。此命令通常发送到 Ceph 管理守护进程,但可以通过将其发送到该 OSD 来收集有关特定 OSD 交互的信息。慢心跳的默认阈值是 1 秒(1000 毫秒),但可以通过提供以毫秒为单位的参数来覆盖此值。
要显示所有网络性能数据,并指定阈值为 0,将以下命令发送到 mgr:
ceph daemon /var/run/ceph/ceph-mgr.x.asok dump_osd_network 0
{
"threshold": 0,
"entries": [
{
"last update": "Wed Sep 4 17:04:49 2019",
"stale": false,
"from osd": 2,
"to osd": 0,
"interface": "front",
"average": {
"1min": 1.023,
"5min": 0.860,
"15min": 0.883
},
"min": {
"1min": 0.818,
"5min": 0.607,
"15min": 0.607
},
"max": {
"1min": 1.164,
"5min": 1.173,
"15min": 1.544
},
"last": 0.924
},
{
"last update": "Wed Sep 4 17:04:49 2019",
"stale": false,
"from osd": 2,
"to osd": 0,
"interface": "back",
"average": {
"1min": 0.968,
"5min": 0.897,
"15min": 0.830
},
"min": {
"1min": 0.860,
"5min": 0.563,
"15min": 0.502
},
"max": {
"1min": 1.171,
"5min": 1.216,
"15min": 1.456
},
"last": 0.845
},
{
"last update": "Wed Sep 4 17:04:48 2019",
"stale": false,
"from osd": 0,
"to osd": 1,
"interface": "front",
"average": {
"1min": 0.965,
"5min": 0.811,
"15min": 0.850
},
"min": {
"1min": 0.650,
"5min": 0.488,
"15min": 0.466
},
"max": {
"1min": 1.252,
"5min": 1.252,
"15min": 1.362
},
"last": 0.791
},
...
健康检查可以静音,以便它们不会影响集群的整体报告状态。例如,如果集群触发了一个健康检查,然后你静音了该健康检查,那么集群将报告状态为
Health checks can be muted so that they have no effect on the overall
reported status of the cluster. For example, if the cluster has raised a
single health check and then you mute that health check, then the cluster will report a status of HEALTH_OK
。要静音特定的健康检查,请使用对应于该健康检查的健康检查代码(见健康检查),并运行以下命令:
ceph health mute <code>
例如,要静音一个OSD_DOWN
健康检查,运行以下命令:
ceph health mute OSD_DOWN
静音作为ceph health
命令输出的短形式和长形式的一部分报告。例如,在上述情况下,集群将报告:
ceph health
HEALTH_OK (muted: OSD_DOWN)
ceph health detail
HEALTH_OK (muted: OSD_DOWN)
(MUTED) OSD_DOWN 1 osds down
osd.1 is down
通过运行以下命令可以移除静音:
ceph health unmute <code>
例如:
ceph health unmute OSD_DOWN
一个“健康静音”可以有一个 TTLT(生存时间)To L关联:这意味着静音将在指定的时间后自动过期。TTL 作为可选的持续时间参数指定,如下面的示例所示:
ceph health mute OSD_DOWN 4h # mute for 4 hours
ceph health mute MON_DOWN 15m # mute for 15 minutes
通常,如果被静音的健康检查得到解决(例如,如果在上面的示例中触发健康检查的 OSD 恢复了),则静音将消失。如果健康检查稍后再次触发,它将按常规方式报告。OSD_DOWN
health check
in the example above has come back up), the mute goes away. If the health check comes
back later, it will be reported in the usual way.
可以使健康静音“粘性”:这意味着即使健康检查清除,静音也会保持。例如,要使健康静音“粘性”,你可以运行以下命令:
ceph health mute OSD_DOWN 1h --sticky # ignore any/all down OSDs for next hour
大多数健康静音如果触发健康检查的不健康状况恶化,则会消失。例如,假设有一个 OSD 停机,健康检查被静音。在这种情况下,如果一个或多个额外的 OSD 停机,则健康静音将消失。此行为发生在任何具有阈值值的健康检查中。
检查集群使用统计
要检查集群的数据使用情况以及数据在池中的分布,请使用df
命令。此选项类似于 Linux 的df
命令。运行以下命令:
ceph df
的输出ceph df
类似于以下内容:
CLASS SIZE AVAIL USED RAW USED %RAW USED
ssd 202 GiB 200 GiB 2.0 GiB 2.0 GiB 1.00
TOTAL 202 GiB 200 GiB 2.0 GiB 2.0 GiB 1.00
--- POOLS ---
POOL ID PGS STORED (DATA) (OMAP) OBJECTS USED (DATA) (OMAP) %USED MAX AVAIL QUOTA OBJECTS QUOTA BYTES DIRTY USED COMPR UNDER COMPR
device_health_metrics 1 1 242 KiB 15 KiB 227 KiB 4 251 KiB 24 KiB 227 KiB 0 297 GiB N/A N/A 4 0 B 0 B
cephfs.a.meta 2 32 6.8 KiB 6.8 KiB 0 B 22 96 KiB 96 KiB 0 B 0 297 GiB N/A N/A 22 0 B 0 B
cephfs.a.data 3 32 0 B 0 B 0 B 0 0 B 0 B 0 B 0 99 GiB N/A N/A 0 0 B 0 B
test 4 32 22 MiB 22 MiB 50 KiB 248 19 MiB 19 MiB 50 KiB 0 297 GiB N/A N/A 248 0 B 0 B
CLASS:例如,“ssd”或“hdd”。
SIZE:集群管理的存储容量量。
AVAIL:集群中可用的空闲空间量。
USED:用户数据(不包括 BlueStore 的数据库)消耗的原始存储量。
RAW USED:用户数据、内部开销和保留容量消耗的原始存储量。
%RAW USED:原始存储使用的百分比。与
full ratio
和near full ratio
结合观察此数字,以在集群接近满负荷阈值时提前预警。见存储容量.
POOLS:
输出的 POOLS 部分提供了池的列表以及每个池的概念使用情况。输出部分的notional usage of each pool. This section of the output 不反映副本、克隆或快照。例如,如果你存储一个 1MB 的数据对象,则概念使用量为 1MB,但实际使用量可能为 2MB 或更多,具体取决于副本、克隆和快照的数量。 reflect replicas, clones, or snapshots. For example, if you store an object with 1MB of data, then the notional usage will be 1MB, but the actual usage might be 2MB or more depending on the number of replicas, clones, and snapshots.
ID:池内特定节点的编号。
STORED:用户在一个池中实际存储的数据量。这与早期版本 Ceph 中的 USED 列类似,但计算(对于 BlueStore!)更加精确(因为间隙得到正确处理)。
(DATA):RBD(RADOS Block Device)、CephFS 文件数据和 RGW
(OMAP):键值对。主要由 CephFS 和 RGW (RADOS Gateway) 用于元数据存储。
OBJECTS:每个池存储的概念对象数(即除了副本、克隆或快照之外的对象数量)。
USED:在所有 OSD 上为池分配的空间。这包括复制空间、分配粒度空间以及与纠删码相关的开销空间。还包括压缩节省和对象内容间隙。但是,BlueStore 的数据库不包括在使用量报告的量中。
(DATA):RBD(RADOS Block Device)、CephFS 文件数据和 RGW
(OMAP):对象键值对。主要由 CephFS 和 RGW (RADOS Gateway) 用于元数据存储。
%USED:每个池使用的概念百分比存储。
MAX AVAIL:可以写入此池的概念数据的估计量。
QUOTA OBJECTS:配额对象的数量。
QUOTA BYTES:配额对象中的字节数。
DIRTY:已写入缓存池但尚未刷新到基础池的缓存池中的对象数量。当使用缓存分层时,此字段才可用。
USED COMPR:为压缩数据分配的空间量。这包括压缩数据以及所有用于复制、分配粒度和纠删码开销的空间。
UNDER COMPR:通过压缩(在所有副本上求和)并值得以压缩形式存储的数据量。
Note
POOLS 部分的数字是概念性的。它们不包括副本、克隆或快照的数量。因此,输出中 POOLS 部分的 USED 和 %USED 总和将不等于输出中 RAW 部分的 USED 和 %USED 总和。
Note
MAX AVAIL 值是一个复杂的函数,取决于复制或使用的纠删码类型、将存储映射到设备的 CRUSH 规则、这些设备的利用率以及配置mon_osd_full_ratio
设置进行指数衰减。
检查 OSD 状态
要检查 OSD 是否up
和in
, run the
following command:
ceph osd stat
或者,你可以运行以下命令:
ceph osd dump
要根据 CRUSH 映射中的位置查看 OSD,请运行以下命令:
ceph osd tree
要打印显示主机、其 OSD、OSD 是否up
以及 OSD 的权重,请运行以下命令:
#ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.00000 pool default
-3 3.00000 rack mainrack
-2 3.00000 host osd-host
0 ssd 1.00000 osd.0 up 1.00000 1.00000
1 ssd 1.00000 osd.1 up 1.00000 1.00000
2 ssd 1.00000 osd.2 up 1.00000 1.00000
检查 Monitor 状态
如果你的集群有多个 Monitor,那么你需要执行某些“Monitor 状态”检查。在启动集群后以及读写数据之前,你应该检查仲裁状态。当运行多个 Monitor 时必须存在仲裁,以确保你的 Ceph 集群正常运行。定期检查 Monitor 状态,以确保所有 Monitor 都在运行。
要显示 Monitor 映射,请运行以下命令:
ceph mon stat
或者,你可以运行以下命令:
ceph mon dump
要检查 Monitor 集群的仲裁状态,请运行以下命令:
ceph quorum_status
Ceph 返回仲裁状态。例如,一个由三个 Monitor 组成的 Ceph 集群可能会返回以下内容:
{ "election_epoch": 10,
"quorum": [
0,
1,
2],
"quorum_names": [
"a",
"b",
"c"],
"quorum_leader_name": "a",
"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",
"features": {"persistent": [
"kraken",
"luminous",
"mimic"],
"optional": []
},
"mons": [
{ "rank": 0,
"name": "a",
"addr": "127.0.0.1:6789/0",
"public_addr": "127.0.0.1:6789/0"},
{ "rank": 1,
"name": "b",
"addr": "127.0.0.1:6790/0",
"public_addr": "127.0.0.1:6790/0"},
{ "rank": 2,
"name": "c",
"addr": "127.0.0.1:6791/0",
"public_addr": "127.0.0.1:6791/0"}
]
}
}
检查 MDS 状态
元数据服务器为 CephFS 提供元数据服务。元数据服务器有两个状态集:up | down
和active | inactive
。要检查你的元数据服务器是否up
和active
生成 SSH 密钥,运行以下命令:
ceph mds stat
要显示元数据服务器的详细信息,请运行以下命令:
ceph fs dump
检查 Placement Group 状态
Placement Group (PG) 将对象映射到 OSD。PG 被监控以确保它们是active
和clean
。见监控 OSD 和.
使用管理员套接字
Ceph 管理员套接字允许你通过套接字接口查询守护进程。默认情况下,Ceph 套接字位于/var/run/ceph
下。要通过管理员套接字访问守护进程,请登录到运行守护进程的主机并运行以下两个命令之一:
ceph daemon {daemon-name}
ceph daemon {path-to-socket-file}
例如,以下命令彼此等效:
ceph daemon osd.0 foo
ceph daemon /var/run/ceph/ceph-osd.0.asok foo
运行管理员套接字命令有两种方法:(1)使用ceph daemon
如上所述,这绕过 Monitor 并假设直接登录到守护进程的主机,以及(2)使用ceph tell {daemon-type}.{id}
命令,该命令由 Monitor 中继,并且不需要访问守护进程的主机。
使用raise
命令向守护进程发送信号,就像运行kill -X {daemon.pid}
。通过ceph tell
运行它允许在不访问其主机的情况下向守护进程发送信号:
ceph daemon {daemon-name} raise HUP
ceph tell {daemon-type}.{id} raise -9
要查看可用的管理员套接字命令,请运行以下命令:
ceph daemon {daemon-name} help
管理员套接字命令允许你在运行时查看和设置你的配置。有关查看配置的更多信息,请参阅在运行时查看配置.
Messenger 状态
Ceph 守护进程和 librados 客户端支持一个管理员套接字命令messenger dump
,该命令显示有关连接、套接字、绑定地址和内核 TCP 统计信息(通过 tcp(7) TCP_INFO)的运行时信息快照。
Note
被查询的 Messenger 需要在创建快照时锁定连接数据结构。此锁的持续时间以毫秒计。这可能会干扰正常操作。使用dumpcontents
参数来限制转储的数据结构。
示例
如果未指定要转储的 Messenger,则返回可用 Messenger 的列表:
ceph tell osd.0 messenger dump
{
"messengers": [
"client",
"cluster",
"hb_back_client",
"hb_back_server",
"hb_front_client",
"hb_front_server",
"ms_objecter",
"temp_mon_client"
]
}
The client
和cluster
messengers 对应于配置的客户端 / 集群网络(见网络配置参考)。带有hb_
前缀的 messengers 是心跳系统的一部分。
列出客户端 Messenger 上的所有当前连接:
ceph tell osd.0 messenger dump client \
| jq -r '.messenger.connections[].async_connection |
[.conn_id, .socket_fd, .worker_id,
if .status.connected then "connected" else "disconnected" end,
.state,
"\(.peer.type).\(.peer.entity_name.id).\(.peer.id)",
.protocol.v2.con_mode, .protocol.v2.crypto.rx, .protocol.v2.compression.rx] |
@tsv'
249 102 0 connected STATE_CONNECTION_ESTABLISHED client.admin.6407 crc PLAIN UNCOMPRESSED
242 99 1 connected STATE_CONNECTION_ESTABLISHED client.rgw.8000.4473 crc PLAIN UNCOMPRESSED
248 89 1 connected STATE_CONNECTION_ESTABLISHED mgr..-1 secure AES-128-GCM UNCOMPRESSED
32 101 2 connected STATE_CONNECTION_ESTABLISHED client.rgw.8000.4483 crc PLAIN UNCOMPRESSED
3 86 2 connected STATE_CONNECTION_ESTABLISHED mon..-1 secure AES-128-GCM UNCOMPRESSED
244 102 0 connected STATE_CONNECTION_ESTABLISHED client.admin.6383 crc PLAIN UNCOMPRESSED
打印活动连接及其 TCP 循环往返时间和重传计数器:
ceph tell osd.0 messenger dump client --tcp-info \
| jq -r '.messenger.connections[].async_connection |
select(.status.connected) |
select(.peer.type != "client") |
[.conn_id, .socket_fd, .worker_id,
"\(.peer.type).\(.peer.global_id)",
.tcp_info.tcpi_rtt_us, .tcp_info.tcpi_rttvar_us, .tcp_info.tcpi_total_retrans] |
@tsv'
248 89 1 mgr.0 863 1677 0
3 86 2 mon.0 230 278 0
跟踪集群数据可用性分数
Ceph 内部跟踪集群中每个池的数据可用性。要检查集群中每个池的数据可用性分数,可以调用以下命令:
ceph osd pool availability-status
示例输出:
POOL UPTIME DOWNTIME NUMFAILURES MTBF MTTR SCORE AVAILABLE
rbd 2m 21s 1 2m 21s 0.888889 1
.mgr 86s 0s 0 0s 0s 1 1
cephfs.a.meta 77s 0s 0 0s 0s 1 1
cephfs.a.data 76s 0s 0 0s 0s 1 1
当池中的至少一个 PG 变为不活动或池中至少有一个未找到的对象时,池被认为unavailable
。否则,池被认为available
。根据池的当前和先前状态,我们更新uptime
和downtime
值:
先前状态 |
当前状态 |
运行时间更新 |
停机时间更新 |
---|---|---|---|
可用 |
可用 |
+diff 时间 |
无更新 |
可用 |
不可用 |
+diff 时间 |
无更新 |
不可用 |
可用 |
+diff 时间 |
无更新 |
不可用 |
不可用 |
无更新 |
+diff 时间 |
从更新的uptime
和downtime
值,我们计算每个池的平均故障间隔时间 (MTBF) 和平均恢复时间 (MTTR)。然后通过找到 MTBF 与总时间的比率来计算可用性分数。
分数每五秒更新一次。此间隔目前不可配置。在此期间内发生的集群池的任何间歇性变化,但在我们重新检查池状态之前被重置,将不会被此功能捕获。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.