Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

附录 G. 手动从 Red Hat Ceph Storage 2 升级到 3

您可以滚动方式将 Ceph 存储集群从版本 2 升级到 3,并在集群运行时升级到 3。按顺序升级集群中的每个节点,仅在完成上一个节点后继续下一个节点。

红帽建议按照以下顺序升级 Ceph 组件:

  • 监控节点
  • OSD 节点
  • Ceph 对象网关节点
  • 所有其他 Ceph 客户端节点

Red Hat Ceph Storage 3 引入了一个新的守护进程 Ceph 管理器(ceph-mgr)。在升级 monitor 节点后安装 ceph-mgr

有两种方法可用来将 Red Hat Ceph Storage 2 升级到 3:

  • 使用红帽的内容交付网络(CDN)
  • 使用红帽提供的 ISO 镜像文件

在升级存储集群后,您可以使用传统的可调项,显示 CRUSH map 的运行状况警告。详情请参阅 Red Hat Ceph Storage 3 的存储策略指南中的 CRUSH Tunables 部分。

示例

$ ceph -s
    cluster 848135d7-cdb9-4084-8df2-fb5e41ae60bd
     health HEALTH_WARN
            crush map has legacy tunables (require bobtail, min is firefly)
     monmap e1: 1 mons at {ceph1=192.168.0.121:6789/0}
            election epoch 2, quorum 0 ceph1
     osdmap e83: 2 osds: 2 up, 2 in
      pgmap v1864: 64 pgs, 1 pools, 38192 kB data, 17 objects
            10376 MB used, 10083 MB / 20460 MB avail
                  64 active+clean

重要

红帽建议所有 Ceph 客户端运行与 Ceph 存储集群相同的版本。

先决条件

  • 如果要升级的集群包含使用 exclusive-lock 功能的 Ceph 块设备镜像,请确保所有 Ceph 块设备用户都有将客户端列入黑名单的权限:

    ceph auth caps client.<ID> mon 'allow r, allow command "osd blacklist"' osd '<existing-OSD-user-capabilities>'

升级监控节点

本节介绍将 Ceph 监控节点升级到更新版本的步骤。monitor 的数量必须是奇数。当您升级一个 monitor 时,存储群集仍会拥有仲裁。

流程

在存储集群中的每个 monitor 节点上执行以下步骤。一次仅升级一个 monitor 节点。

  1. 如果使用软件存储库安装 Red Hat Ceph Storage 2,请禁用软件仓库:

    # subscription-manager repos --disable=rhel-7-server-rhceph-2-mon-rpms --disable=rhel-7-server-rhceph-2-installer-rpms
  2. 启用 Red Hat Ceph Storage 3 monitor 存储库:

    [root@monitor ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms
  3. root 用户身份,停止 monitor 进程:

    语法

    # service ceph stop <daemon_type>.<monitor_host_name>

    示例

    # service ceph stop mon.node1

  4. root 用户身份,更新 ceph-mon 软件包:

    # yum update ceph-mon
  5. root 用户身份,更新所有者和组权限:

    语法

    # chown -R <owner>:<group> <path_to_directory>

    示例

    # chown -R ceph:ceph /var/lib/ceph/mon
    # chown -R ceph:ceph /var/log/ceph
    # chown -R ceph:ceph /var/run/ceph
    # chown ceph:ceph /etc/ceph/ceph.client.admin.keyring
    # chown ceph:ceph /etc/ceph/ceph.conf
    # chown ceph:ceph /etc/ceph/rbdmap

    注意

    如果 Ceph 监控节点与 OpenStack 控制器节点在一起,则 Glance 和 Cinder 密钥环文件必须分别归 glancecinder 所有。例如:

    # ls -l /etc/ceph/
    ...
    -rw-------.  1 glance glance      64 <date> ceph.client.glance.keyring
    -rw-------.  1 cinder cinder      64 <date> ceph.client.cinder.keyring
    ...
  6. 如果 SELinux 处于 enforcing 或 permissive 模式,请在下次重启时重新标记 SELinux 上下文。

    # touch /.autorelabel
    警告

    重新标记可能需要很长时间才能完成,因为 SELinux 必须遍历每个文件系统并修复任何错误标记的文件。要排除要重新标记的目录,请在重启前将目录添加到 /etc/selinux/fixfiles_exclude_dirs 文件。

  7. root 用户身份,启用 ceph-mon 进程:

    # systemctl enable ceph-mon.target
    # systemctl enable ceph-mon@<monitor_host_name>
  8. root 用户身份,重启 monitor 节点:

    # shutdown -r now
  9. 监控节点启动后,在移动到下一个 monitor 节点前检查 Ceph 存储集群的运行状况:

    # ceph -s

G.1. 手动安装 Ceph Manager

通常,在部署 Red Hat Ceph Storage 集群时,Ansible 自动化实用程序会安装 Ceph Manager 守护进程 (ceph-mgr)。但是,如果您不使用 Ansible 管理红帽 Ceph 存储,您可以手动安装 Ceph Manager。红帽建议在同一节点上并置 Ceph 管理器和 Ceph 监控守护进程。

先决条件

  • 正常工作的 Red Hat Ceph Storage 集群
  • rootsudo 访问权限
  • rhel-7-server-rhceph-3-mon-els-rpms 存储库已启用
  • 如果使用防火墙,需要在公共网络上打开端口 6800-7300

流程

在要部署 ceph-mgr 的节点上,以 root 用户身份或通过 sudo 实用程序,使用以下命令。

  1. 安装 ceph-mgr 软件包:

    [root@node1 ~]# yum install ceph-mgr
  2. 创建 /var/lib/ceph/mgr/ceph-hostname/ 目录:

    mkdir /var/lib/ceph/mgr/ceph-hostname

    使用部署 ceph-mgr 守护进程的节点的主机名替换 hostname,例如:

    [root@node1 ~]# mkdir /var/lib/ceph/mgr/ceph-node1
  3. 在新创建的目录中,为 ceph-mgr 守护进程创建一个身份验证密钥:

    [root@node1 ~]# ceph auth get-or-create mgr.`hostname -s` mon 'allow profile mgr' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mgr/ceph-node1/keyring
  4. /var/lib/ceph/mgr/ 目录的所有者和组更改为 ceph:ceph

    [root@node1 ~]# chown -R ceph:ceph /var/lib/ceph/mgr
  5. 启用 ceph-mgr 目标:

    [root@node1 ~]# systemctl enable ceph-mgr.target
  6. 启用并启动 ceph-mgr 实例:

    systemctl enable ceph-mgr@hostname
    systemctl start ceph-mgr@hostname

    使用部署 ceph-mgr 的节点的主机名替换 hostname,例如:

    [root@node1 ~]# systemctl enable ceph-mgr@node1
    [root@node1 ~]# systemctl start ceph-mgr@node1
  7. 验证 ceph-mgr 守护进程是否已成功启动:

    ceph -s

    输出将在 services 部分下包括类似如下的行:

        mgr: node1(active)
  8. 安装更多 ceph-mgr 守护进程以作为备用守护进程(如果当前活跃守护进程失败)处于活跃状态。

升级 OSD 节点

本节介绍将 Ceph OSD 节点升级到更新版本的步骤。

先决条件

在升级 OSD 节点时,一些 PG 可能会降级,因为 OSD 可能会停机或重新启动。要防止 Ceph 启动恢复过程,请在 monitor 节点上设置 nooutnorebalance OSD 标志:

[root@monitor ~]# ceph osd set noout
[root@monitor ~]# ceph osd set norebalance

流程

对存储集群中的每个 OSD 节点上执行下列步骤。一次仅升级一个 OSD 节点。如果为 Red Hat Ceph Storage 2.3 执行基于 ISO 的安装,则跳过此第一步。

  1. root 用户身份,禁用 Red Hat Ceph Storage 2 存储库:

    # subscription-manager repos --disable=rhel-7-server-rhceph-2-osd-rpms --disable=rhel-7-server-rhceph-2-installer-rpms
  2. 启用 Red Hat Ceph Storage 3 OSD 存储库:

    [root@osd ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-els-rpms
  3. root 用户身份,停止任何正在运行的 OSD 进程:

    语法

    # service ceph stop <daemon_type>.<osd_id>

    示例

    # service ceph stop osd.0

  4. root 用户身份,更新 ceph-osd 软件包:

    # yum update ceph-osd
  5. root 用户身份,更新新创建的目录和文件的所有者和组权限:

    语法

    # chown -R <owner>:<group> <path_to_directory>

    示例

    # chown -R ceph:ceph /var/lib/ceph/osd
    # chown -R ceph:ceph /var/log/ceph
    # chown -R ceph:ceph /var/run/ceph
    # chown -R ceph:ceph /etc/ceph

    注意

    在一个带有大量磁盘的 Ceph 存储集群中,可以使用以下 find 命令,通过并行执行 chown 命令来加快修改所有者设置的过程:

    # find /var/lib/ceph/osd -maxdepth 1 -mindepth 1 -print | xargs -P12 -n1 chown -R ceph:ceph
  6. 如果 SELinux 被设置为 enforcing 或 permissive 模式,则在文件中设置 SELinux 上下文的重新标记,以便在下次重启:

    # touch /.autorelabel
    警告

    重新标记可能需要很长时间才能完成,因为 SELinux 必须遍历每个文件系统并修复任何错误标记的文件。要排除要重新标记的目录,请在重启前将目录添加到 /etc/selinux/fixfiles_exclude_dirs 文件。

    注意

    在每个放置组 (PG) 具有大量对象的环境中,使用目录枚举速度会降低,从而导致对性能造成负面影响。这是因为添加 xattr 查询来验证 SELinux 上下文。在挂载时设置上下文会删除对上下文的 xattr 查询,这可以提高磁盘的整体性能,特别对于较慢的磁盘。

    将以下行添加到 /etc/ceph/ceph.conf 文件中的 [osd] 部分:

    +

    osd_mount_options_xfs=rw,noatime,inode64,context="system_u:object_r:ceph_var_lib_t:s0"
  7. root 用户身份,重播内核的设备事件:

    # udevadm trigger
  8. root 用户身份,启用 ceph-osd 进程:

    # systemctl enable ceph-osd.target
    # systemctl enable ceph-osd@<osd_id>
  9. root 用户身份,重启 OSD 节点:

    # shutdown -r now
  10. 移到下一 OSD 节点。

    注意

    如果设置了 nooutnorebalance 标记,存储集群将处于 HEALTH_WARN 状态

    $ ceph health
    HEALTH_WARN noout,norebalance flag(s) set

升级 Ceph 存储集群后,请取消设置之前设置的 OSD 标志并验证存储集群状态。

在 monitor 节点上,升级所有 OSD 节点后,取消设置 nooutnorebalance 标志:

# ceph osd unset noout
# ceph osd unset norebalance

此外,执行 ceph osd require-osd-release <release> 命令。此命令可确保没有更多具有 Red Hat Ceph Storage 2.3 的 OSD 添加到存储集群中。如果不运行此命令,存储状态将为 HEALTH_WARN

# ceph osd require-osd-release luminous

其它资源

  • 若要通过添加新 OSD 到存储集群来扩展存储容量,请参阅 Red Hat Ceph Storage 3 管理指南中的添加 OSD 部分。

升级 Ceph 对象网关节点

本节介绍将 Ceph 对象网关节点升级到更新版本的步骤。

先决条件

  • 红帽建议将 Ceph 对象网关放在负载均衡器后面,如 HAProxy。如果您使用负载平衡器,请在没有提供请求时从负载均衡器中删除 Ceph 对象网关。
  • 如果您使用自定义名称作为 region 池(在 rgw_region_root_pool 参数中指定的),请将 rgw_zonegroup_root_pool 参数添加到 Ceph 配置文件的 [global] 部分。将 rgw_zonegroup_root_pool 的值设置为与 rgw_region_root_pool 的值相同,例如:

    [global]
    rgw_zonegroup_root_pool = .us.rgw.root

流程

在存储群集中的每个 Ceph 对象网关节点上执行下列步骤。一次仅升级一个节点。

  1. 如果您使用在线存储库安装 Red Hat Ceph Storage,请禁用 2 存储库。

    # subscription-manager repos --disable=rhel-7-server-rhceph-2.3-tools-rpms --disable=rhel-7-server-rhceph-2-installer-rpms
  2. 启用 Red Hat Ceph Storage 3 Tools 存储库:

    [root@gateway ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  3. 停止 Ceph 对象网关进程(ceph-radosgw):

    # service ceph-radosgw stop
  4. 更新 ceph-radosgw 软件包:

    # yum update ceph-radosgw
  5. 将新创建的 /var/lib/ceph/radosgw//var/log/ceph/ 目录及其内容上的所有者和组权限更改为 ceph

    # chown -R ceph:ceph /var/lib/ceph/radosgw
    # chown -R ceph:ceph /var/log/ceph
  6. 如果将 SELinux 设置为在 enforcing 或 permissive 模式下运行,请指示它在下次引导时重新标记 SELinux 上下文。

    # touch /.autorelabel
    重要

    重新标记可能需要很长时间才能完成,因为 SELinux 必须遍历每个文件系统并修复任何错误标记的文件。要排除要重新标记的目录,请在重启前将其添加到 /etc/selinux/fixfiles_exclude_dirs 文件中。

  7. 启用 ceph-radosgw 进程。

    # systemctl enable ceph-radosgw.target
    # systemctl enable ceph-radosgw@rgw.<hostname>

    <hostname> 替换为 Ceph 对象网关主机的名称,如 gateway-node

    # systemctl enable ceph-radosgw.target
    # systemctl enable ceph-radosgw@rgw.gateway-node
  8. 重新引导 Ceph 对象网关节点。

    # shutdown -r now
  9. 如果使用负载平衡器,请将 Ceph 对象网关节点重新添加到负载平衡器。

另请参阅

升级 Ceph 客户端节点

Ceph 客户端是:

  • Ceph 块设备
  • OpenStack Nova 计算节点
  • QEMU/KVM 管理程序
  • 使用 Ceph 客户端侧库的任何自定义应用

红帽建议所有 Ceph 客户端运行与 Ceph 存储集群相同的版本。

先决条件

  • 在升级软件包以避免发生意外错误时停止对 Ceph 客户端节点的所有 I/O 请求

流程

  1. 如果您使用软件存储库安装 Red Hat Ceph Storage 2 客户端,请禁用存储库:

    # subscription-manager repos --disable=rhel-7-server-rhceph-2-tools-rpms --disable=rhel-7-server-rhceph-2-installer-rpms
    注意

    如果为 Red Hat Ceph Storage 2 客户端执行基于 ISO 的安装,请跳过第一步。

  2. 在客户端节点上,启用 Red Hat Ceph Storage Tools 3 存储库:

    [root@gateway ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  3. 在客户端节点上,更新 ceph-common 软件包:

    # yum update ceph-common

在升级 ceph-common 软件包后,重新启动依赖于 Ceph 客户端侧库的任何应用。

注意

如果您要升级运行 QEMU/KVM 实例的 OpenStack Nova 计算节点,或使用专用 QEMU/KVM 客户端,请停止并启动 QEMU/KVM 实例,因为在此情况下重新启动实例不起作用。