Luminous 中的新增功能:升级完成?
在升级任何分布式系统时,很容易错过一个步骤,导致旧的守护进程在你认为之前的版本已经成为历史很久之后仍然在运行。一个常见的错误是安装新的软件包,然后忘记重启使用它们的进程。
对于 Ceph 这样的分布式存储,记住客户端也很重要:访问 Ceph 的虚拟机、容器、文件系统或对象网关。为了使用新功能,有时需要升级客户端库或内核。如果你有一个使用 Jewel 的 librbd 的虚拟机,并且想要启用一个不兼容的 Luminous 功能(例如 librbd 的基于擦除编码的数据池),你需要迁移或以其他方式重启运行该虚拟机的进程,以便它链接新的 Luminous 版本的 librbd。
为了更容易跟踪这一点,Luminous 添加了一些新命令。
守护进程版本 ¶
要找出当前正在运行哪些守护进程,请尝试
$ ceph versions
这总结了集群中正在运行的守护进程的版本。在一个除了两个 OSD 之外的所有内容都已升级的集群上,这看起来像
{ "mon": { "ceph version 12.2.0 (32ce2a3ae5239ee33d6150705cdb24d43bab910c) luminous (rc)": 3 }, "mgr": { "ceph version 12.2.0 (32ce2a3ae5239ee33d6150705cdb24d43bab910c) luminous (rc)": 1 }, "osd": { "ceph version 10.2.7-116-g41ac764 (41ac7649ade52628174e58671f2d1aa4a39c2b19)": 2, "ceph version 12.2.0 (32ce2a3ae5239ee33d6150705cdb24d43bab910c) luminous (rc)": 4 } "mds": { "ceph version 12.2.0 (32ce2a3ae5239ee33d6150705cdb24d43bab910c) luminous (rc)": 1 }, "overall": { "ceph version 10.2.7-116-g41ac764 (41ac7649ade52628174e58671f2d1aa4a39c2b19)": 2, "ceph version 12.2.0 (32ce2a3ae5239ee33d6150705cdb24d43bab910c) luminous (rc)": 9 } }
请注意,Luminous 之前的 MDS 守护进程不会将此信息报告给监视器,因此它们可能被列为“未知”。
连接的客户端 ¶
要找出连接的守护进程和客户端使用的协议功能,请尝试
$ ceph features
这将报告所有守护进程和当前连接到监视器的客户端的主要版本和功能位掩码。它可能看起来像
{ "mon": { "group": { "features": "0x1ffddff8eea4fffb", "release": "luminous", "num": 3 } }, "mds": { "group": { "features": "0x1ffddff8eea4fffb", "release": "luminous", "num": 1 } }, "osd": { "group": { "features": "0x17fddff8ee84bffb", "release": "jewel", "num": 2 }, "group": { "features": "0x1ffddff8eea4fffb", "release": "luminous", "num": 4 } }, "client": { "group": { "features": "0x1ffddff8eea4fffb", "release": "luminous", "num": 1 } } }
请注意,此命令实际上会重复报告守护进程信息(因为我们已经可以确定它们运行的代码版本,而无需从它们支持的功能位推断出来)。
此外,请注意,Linux 内核客户端实际上根据它们支持的协议功能集(例如 CRUSH 可调参数)进行标记。 这将告诉您可以安全地启用哪些 Ceph 功能,但不会告诉您它们正在运行的确切内核版本。
完成升级 ¶
一旦“ceph versions”显示您的所有 OSD 都已更新到 Luminous,您就可以使用以下命令完成升级(并启用新功能或功能):
$ ceph osd require-osd-release luminous
这将阻止较旧的 Luminous OSD 启动或加入集群(监视器拒绝将它们标记为“已启动”)。 这是较旧的 require_$release_osds 标志的推广,现在这些标志已从 ceph status 中隐藏。 如果您好奇,可以在 ceph osd dump 中查看完整的标志集。 如果仍然有较旧的 OSD 在运行,则设置此选项将失败。
大多数新的集群功能或协议改进只有在设置此标志后才会使用,因为较旧的守护进程将无法理解新的协议。
客户端兼容性 ¶
通常,较少的功能会影响与较旧 Ceph 客户端的互操作性。 历史上,主要例外是 CRUSH 的更改(所谓的“可调参数”)。 例如,如果您想要启用“jewel”CRUSH 可调参数(例如,因为它需要一段时间才能升级所有超visor 主机),您可以使用新命令
$ ceph osd set-require-min-compat-client jewel
这是新的 Luminous 集群的默认设置,对应于内核客户端的内核 4.5。
此“最小兼容客户端”设置被集群记录,并阻止您启用任何会阻止较旧客户端连接的功能。 例如,将最小兼容客户端设置为“jewel”将阻止您使用新的 PG “upmap” 功能
$ ceph osd pg-upmap 0.0 osd.1 osd.2 Error EPERM: min_compat_client jewel < luminous, which is required for pg-upmap. Try 'ceph osd set-require-min-compat-client luminous' before using the new interface
结论 ¶
设置了所需的 OSD 版本和适当的最小兼容客户端后,您可以确定没有较旧的客户端或 OSD 在运行,并且您的升级完成!