8.3. 手动升级 Ceph OSD 节点及其操作系统
作为系统管理员,您可以手动将 Red Hat Ceph Storage 集群节点上的 Ceph OSD 软件和 Red Hat Enterprise Linux 操作系统同时升级到新的主版本。
应当对 Ceph 集群中的每一 OSD 节点执行此步骤,但通常一次仅针对一个 OSD 节点执行此步骤。可以并行执行最多一个值得 OSD 节点的故障域。例如,如果正在使用每个机架复制,可以并行升级整个机架的 OSD 节点。为防止数据访问问题,请确保当前 OSD 节点的 OSD 已恢复正常运作,并且集群的所有 PG 在继续下一 OSD 之前处于 active+clean
状态。
此流程不适用于加密的 OSD 分区,因为 Leapp 升级工具不支持使用 OSD 加密升级。
如果 OSD 是使用 ceph-disk
创建的,并且仍然由 ceph-disk
管理,则必须使用 ceph-volume
接管它们的管理。下面的一个可选步骤将对此进行阐述。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 节点正在运行 Red Hat Enterprise Linux 7 7.9。
- 节点使用 Red Hat Ceph Storage 版本 3.3z6 或 4.0
- 访问 Red Hat Enterprise Linux 8.3 的安装源。
流程
设置 OSD
noout
标志,以防止 OSD 在迁移期间被标记为 down:ceph osd set noout
设置 OSD
nobackfill
、norecover
、norrebalance
、noscrub
和nodeep-scrub
标志,以避免集群出现不必要的负载,并在节点停机时避免任何数据被重新创建:ceph osd set nobackfill ceph osd set norecover ceph osd set norebalance ceph osd set noscrub ceph osd set nodeep-scrub
正常关闭节点上的所有 OSD 进程:
[root@mon ~]# systemctl stop ceph-osd.target
如果使用 Red Hat Ceph Storage 3,请禁用 Red Hat Ceph Storage 3 存储库。
禁用工具存储库:
[root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-3-tools-rpms
禁用 osd 存储库:
[root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-3-osd-rpms
如果使用 Red Hat Ceph Storage 4,请禁用 Red Hat Ceph Storage 4 存储库。
禁用工具存储库:
[root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-4-tools-rpms
禁用 osd 存储库:
[root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-4-osd-rpms
-
安装
leapp
实用程序。请参阅从 Red Hat Enterprise Linux 7 升级到 Red Hat Enterprise Linux 8。 - 通过 leapp preupgrade 检查运行。请参阅从命令行评估可升级性。
-
在
/etc/ssh/sshd_config
中设置PermitRootLogin yes
。 重启 OpenSSH SSH 守护进程:
[root@mon ~]# systemctl restart sshd.service
从 Linux 内核中删除 iSCSI 模块:
[root@mon ~]# modprobe -r iscsi
- 执行 从 RHEL 7 升级到 RHEL 8 的内容,以执行升级。
- 重新引导节点。
为 Red Hat Enterprise Linux 8 启用 Red Hat Ceph Storage 4 的软件仓库。
启用工具存储库:
[root@mon ~]# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
启用 osd 存储库:
[root@mon ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms
安装
ceph-osd
软件包:[root@mon ~]# dnf install ceph-osd
安装
leveldb
软件包:[root@mon ~]# dnf install leveldb
-
从尚未升级的节点或已经恢复这些文件的节点恢复
ceph.conf
文件。 取消设置
noout
、nobackfill
、norecover
、norebalance
、noscrub
和nodeep-scrub
标志:# ceph osd unset noout # ceph osd unset nobackfill # ceph osd unset norecover # ceph osd unset norebalance # ceph osd unset noscrub # ceph osd unset nodeep-scrub
将任何现有的 CRUSH bucket 切换到最新的 bucket 类型
straw2
。# ceph osd getcrushmap -o backup-crushmap # ceph osd crush set-all-straw-buckets-to-straw2
可选:如果 OSD 是使用
ceph-disk
创建的,并且仍然由ceph-disk
管理,则必须使用ceph-volume
接管它们的管理。挂载每个对象存储设备:
语法
/dev/DRIVE /var/lib/ceph/osd/ceph-OSD_ID
使用存储设备名称和分区号替换 DRIVE。
将 OSD_ID 替换为 OSD ID。
示例
[root@mon ~]# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0
验证 ID_NUMBER 是否正确。
语法
cat /var/lib/ceph/osd/ceph-OSD_ID/whoami
将 OSD_ID 替换为 OSD ID。
示例
[root@mon ~]# cat /var/lib/ceph/osd/ceph-0/whoami 0
对任何其他对象存储设备重复上述步骤。
扫描新挂载的设备:
语法
ceph-volume simple scan /var/lib/ceph/osd/ceph-OSD_ID
将 OSD_ID 替换为 OSD ID。
示例
[root@mon ~]# ceph-volume simple scan /var/lib/ceph/osd/ceph-0 stderr: lsblk: /var/lib/ceph/osd/ceph-0: not a block device stderr: lsblk: /var/lib/ceph/osd/ceph-0: not a block device stderr: Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected. Running command: /usr/sbin/cryptsetup status /dev/sdb1 --> OSD 0 got scanned and metadata persisted to file: /etc/ceph/osd/0-0c9917f7-fce8-42aa-bdec-8c2cf2d536ba.json --> To take over management of this scanned OSD, and disable ceph-disk and udev, run: --> ceph-volume simple activate 0 0c9917f7-fce8-42aa-bdec-8c2cf2d536ba
对任何其他对象存储设备重复上述步骤。
激活该设备:
语法
ceph-volume simple activate OSD_ID UUID
将 OSD_ID 替换为 OSD ID,UUID 替换为之前在扫描输出中输出的 UUID。
示例
[root@mon ~]# ceph-volume simple activate 0 0c9917f7-fce8-42aa-bdec-8c2cf2d536ba Running command: /usr/bin/ln -snf /dev/sdb2 /var/lib/ceph/osd/ceph-0/journal Running command: /usr/bin/chown -R ceph:ceph /dev/sdb2 Running command: /usr/bin/systemctl enable ceph-volume@simple-0-0c9917f7-fce8-42aa-bdec-8c2cf2d536ba stderr: Created symlink /etc/systemd/system/multi-user.target.wants/ceph-volume@simple-0-0c9917f7-fce8-42aa-bdec-8c2cf2d536ba.service
/usr/lib/systemd/system/ceph-volume@.service. Running command: /usr/bin/ln -sf /dev/null /etc/systemd/system/ceph-disk@.service --> All ceph-disk systemd units have been disabled to prevent OSDs getting triggered by UDEV events Running command: /usr/bin/systemctl enable --runtime ceph-osd@0 stderr: Created symlink /run/systemd/system/ceph-osd.target.wants/ceph-osd@0.service /usr/lib/systemd/system/ceph-osd@.service. Running command: /usr/bin/systemctl start ceph-osd@0 --> Successfully activated OSD 0 with FSID 0c9917f7-fce8-42aa-bdec-8c2cf2d536ba 对任何其他对象存储设备重复上述步骤。
可选:如果您的 OSD 是使用
ceph-volume
创建的,并且您没有完成上一步,请立即启动 OSD 服务:[root@mon ~]# systemctl start ceph-osd.target
激活 OSD:
BlueStore
[root@mon ~]# ceph-volume lvm activate --all
验证 OSDs 为
up
和in
,它们处于active+clean
状态。[root@mon ~]# ceph -s
在 services: 下的 osd: 行中,确定所有 OSDs 都为
up
和in
:示例
osd: 3 osds: 3 up (since 8s), 3 in (since 3M)
- 在所有 OSD 节点上重复上述步骤,直到它们都已升级。
如果从 Red Hat Ceph Storage 3 升级,则不允许预先Nautilus OSD 并启用只有 Nautilus 的功能:
[root@mon ~]# ceph osd require-osd-release nautilus
注意未能执行此步骤会导致 OSD 在启用
msgrv2
后无法进行通信。从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4 后,即可执行以下步骤:
启用消息传递 v2 协议
msgr2
:[root@mon ~]# ceph mon enable-msgr2
这将指示绑定到 6789 的旧默认端口的所有 Ceph 监控器也绑定到 3300 的新端口。
在每个节点上,将
ceph.conf
文件中的任何配置选项导入到存储集群的配置数据库中:示例
[root@mon ~]# ceph config assimilate-conf -i /etc/ceph/ceph.conf
注意当将配置填充到监控器时,例如,如果您为同一组选项设置了不同的配置值,则最终结果会取决于文件完成的顺序。
检查存储集群的配置数据库:
示例
[root@mon ~]# ceph config dump
其它资源
- 如需更多信息,请参阅安装指南中的手动升级 Red Hat Ceph Storage 集群和操作系统。
- 如需更多信息,请参阅 从 Red Hat Enterprise Linux 7 升级到 Red Hat Enterprise Linux 8。