注意
本文档适用于 Ceph 的开发版本。
配置监视器/OSD 交互
完成初始 Ceph 配置后,即可部署并运行 Ceph。当您执行诸如 ceph health 或 ceph -s 的命令时,Ceph 监视器会报告 Ceph 存储集群的当前状态。Ceph 监视器通过要求每个 Ceph OSD 守护程序报告,以及接收 Ceph OSD 守护程序关于其相邻 Ceph OSD 守护程序状态的报告来了解 Ceph 存储集群。如果 Ceph 监视器没有收到报告,或者收到了关于 Ceph 存储集群变化的报告,Ceph 监视器就会更新 Ceph 集群图的状态。
Ceph 为 Ceph 监视器/Ceph OSD 守护程序交互提供了合理的默认设置。但是,您可以覆盖这些默认值。以下部分描述了 Ceph 监视器和 Ceph OSD 守护程序如何为了监控 Ceph 存储集群而进行交互。
OSD 检查心跳
每个 Ceph OSD 守护程序都会以小于每 6 秒的随机间隔检查其他 Ceph OSD 守护程序的心跳。如果在 20 秒的宽限期内相邻的 Ceph OSD 守护程序没有显示心跳,则该 Ceph OSD 守护程序可能会认为相邻的 Ceph OSD 守护程序处于 down 状态,并将其报告给 Ceph 监视器,后者将更新 Ceph 集群图。您可以通过在 Ceph 配置文件的 [mon] 和 [osd] 或 [global] 部分添加 osd heartbeat grace 设置,或在运行时设置该值来更改此宽限期。
OSD 报告宕机的 OSD
默认情况下,必须有两个来自不同主机的 Ceph OSD 守护程序向 Ceph 监视器报告另一个 Ceph OSD 守护程序处于 down 状态,Ceph 监视器才会承认被报告的 Ceph OSD 守护程序处于 down 状态。但有可能所有报告故障的 OSD 都位于同一个机架上,该机架上的交换机存在问题,导致无法连接到另一个 OSD。为了避免这种误报,我们将报告故障的对等点视为潜在“子集群”的代理,该子集群在整个集群中同样滞后。这显然并非在所有情况下都成立,但有时可以帮助我们将宽限期校正本地化到系统中某个不正常的子集。 mon osd reporter subtree level 用于根据 CRUSH 图中的共同祖先类型将对等点分组到“子集群”中。默认情况下,只需要来自不同子树的两个报告即可报告另一个 Ceph OSD 守护程序 down。您可以通过在 Ceph 配置文件的 [mon] 部分添加 mon osd min down reporters 和 mon osd reporter subtree level 设置,或在运行时设置该值来更改报告 Ceph OSD 守护程序 down 到 Ceph 监视器所需的唯一子树报告数量和共同祖先类型。
OSD 报告对等故障
如果 Ceph OSD 守护程序无法与其 Ceph 配置文件(或集群图)中定义的任何 Ceph OSD 守护程序对等,它将每 30 秒 ping 一次 Ceph 监视器以获取集群图的最新副本。您可以通过在 Ceph 配置文件的 [osd] 部分添加 osd mon heartbeat interval 设置,或在运行时设置该值来更改 Ceph 监视器心跳间隔。
OSD 报告自身状态
如果 Ceph OSD 守护程序没有向 Ceph 监视器报告,Ceph 监视器将在 mon osd report timeout 超时后认为该 Ceph OSD 守护程序处于 down 状态。当发生可报告事件(例如故障、放置组统计信息更改、up_thru 更改或启动)时,Ceph OSD 守护程序会在 5 秒内向 Ceph 监视器发送报告。您可以通过在 Ceph 配置文件的 [osd] 部分添加 osd mon report interval 设置,或在运行时设置该值来更改 Ceph OSD 守护程序最小报告间隔。无论是否发生任何值得注意的变化,Ceph OSD 守护程序都会每 120 秒向 Ceph 监视器发送一次报告。您可以通过在 Ceph 配置文件的 [osd] 部分添加 osd mon report interval max 设置,或在运行时设置该值来更改 Ceph 监视器报告间隔。
配置设置
修改心跳设置时,应将其包含在配置文件的 [global] 部分。
监视器设置
- mon_osd_min_up_ratio
Ceph 标记 Ceph OSD 守护程序
down之前处于up状态的 Ceph OSD 守护程序的最小比例。- 类型:
float- 默认值:
0.3- 另请参阅:
- mon_osd_min_in_ratio
Ceph 标记 Ceph OSD 守护程序
out之前处于in状态的 Ceph OSD 守护程序的最小比例。- 类型:
float- 默认值:
0.75- 另请参阅:
- mon_osd_laggy_halflife
滞后估计衰减的秒数。
- 类型:
int- 默认值:
1 hour
- mon_osd_laggy_weight
滞后估计衰减中新样本的权重。
- 类型:
float- 默认值:
0.3- 允许范围:
[0, 1]
- mon_osd_laggy_max_interval
滞后估计中
laggy_interval的最大值(以秒为单位)。监视器使用自适应方法评估特定 OSD 的laggy_interval。此值将用于计算该 OSD 的宽限时间。- 类型:
int- 默认值:
5 minutes
- mon_osd_adjust_heartbeat_grace
如果设置为
true,Ceph 将根据滞后估计进行缩放。- 类型:
bool- 默认值:
true- 另请参阅:
mon_osd_laggy_halflife,mon_osd_laggy_weight,mon_osd_laggy_max_interval
- mon_osd_adjust_down_out_interval
如果设置为
true,Ceph 将根据滞后估计进行缩放。- 类型:
bool- 默认值:
true- 另请参阅:
- mon_osd_auto_mark_in
Ceph 会将任何正在启动的 Ceph OSD 守护程序标记为在 Ceph 存储集群中
in。- 类型:
bool- 默认值:
false
- mon_osd_auto_mark_auto_out_in
Ceph 会将自动标记为
out的正在启动的 Ceph OSD 守护程序标记为在集群中in。- 类型:
bool- 默认值:
true- 另请参阅:
- mon_osd_auto_mark_new_in
Ceph 会将正在启动的新 Ceph OSD 守护程序标记为在 Ceph 存储集群中
in。- 类型:
bool- 默认值:
true
- mon_osd_down_out_interval
如果 Ceph OSD 守护程序没有响应,Ceph 在将其标记为
down和out之前等待的秒数。- 类型:
int- 默认值:
10 minutes
- mon_osd_down_out_subtree_limit
Ceph **不会**自动标记
out的最小 CRUSH 单元类型。例如,如果设置为host,并且主机中的所有 OSD 都宕机了,Ceph 将不会自动标记这些 OSDout。- 类型:
str- 默认值:
rack- 另请参阅:
- mon_osd_report_timeout
在宣布无响应的 Ceph OSD 守护程序
down之前,宽限期的秒数。- 类型:
int- 默认值:
15 minutes
- mon_osd_min_down_reporters
报告
down的 Ceph OSD 守护程序所需的 Ceph OSD 守护程序的最小数量。- 类型:
uint- 默认值:
2- 另请参阅:
- mon_osd_reporter_subtree_level
在哪个父桶级别计算报告者。如果 OSD 发现对等点没有响应,它们会向监视器发送故障报告。监视器会在宽限期后将报告的
OSD标记为out,然后标记为down。- 类型:
str- 默认值:
host
OSD 设置
- osd_heartbeat_interval
Ceph OSD 守护程序 ping 其对等点的频率(以秒为单位)。
- 类型:
int- 默认值:
6- 允许范围:
[1, 1_min]
- osd_heartbeat_grace
Ceph 存储集群认为 Ceph OSD 守护程序处于
down状态时,它没有显示心跳的经过时间。此设置必须在 [mon] 和 [osd] 或 [global] 部分中设置,以便监视器和 OSD 守护程序都能读取它。- 类型:
int- 默认值:
20
- osd_mon_heartbeat_interval
如果 Ceph OSD 守护程序没有 Ceph OSD 守护程序对等点,则 ping Ceph 监视器的频率。
- 类型:
int- 默认值:
30
- osd_mon_heartbeat_stat_stale
停止报告在此秒数内未更新的心跳 ping 时间。设置为 0 以禁用此操作。
- 类型:
int- 默认值:
1 hour
- osd_mon_report_interval
Ceph OSD 守护程序从启动或另一个可报告事件到向 Ceph 监视器报告之间可能等待的秒数。
- 类型:
int- 默认值:
5