2.5. 多路径配置

使用多路径将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备,以创建冗余并提高性能。您可以在新的和现有的 overcloud 部署中配置多路径。

图描述了使用 cinder 多路径 I/O 配置的 Red Hat OpenStack Platform 部署的逻辑输入/输出数据路径

2.5.1. 在新部署中配置多路径

完成此流程,以在新的 overcloud 部署中配置多路径。

有关如何在现有 overcloud 部署中配置多路径的详情,请参考 第 2.5.2 节 “在现有部署中配置多路径”

前提条件

overcloud Controller 和 Compute 节点必须有权访问 Red Hat Enterprise Linux 服务器存储库。如需更多信息,请参阅 Director 安装和使用指南中的下载基本云镜像

流程

  1. 配置 overcloud。

    注意

    有关更多信息,请参阅 Director 安装和使用指南中的使用 CLI 工具配置基本的 overcloud

  2. 更新 heat 模板以启用多路径:

    parameter_defaults:
      NovaLibvirtVolumeUseMultipath:  true
      NovaComputeOptVolumes:
        - /etc/multipath.conf:/etc/multipath.conf:ro
        - /etc/multipath/:/etc/multipath/:rw
      CinderVolumeOptVolumes:
        - /etc/multipath.conf:/etc/multipath.conf:ro
        - /etc/multipath/:/etc/multipath/:rw
  3. 可选:如果您使用 Block Storage (cinder)作为镜像服务(glance)后端,还必须完成以下步骤:

    1. 将以下 GlanceApiOptVolumes 配置添加到 heat 模板中:

      parameter_defaults:
        GlanceApiOptVolumes:
          - /etc/multipath.conf:/etc/multipath.conf:ro
          - /etc/multipath/:/etc/multipath/:rw
    2. 使用以下方法设置 ControllerExtraConfig 参数:

      parameter_defaults:
        ControllerExtraConfig:
          glance::config::api_config:
            default_backend/cinder_use_multipath:
              value: true
      备注
      确保 default_backendGlanceBackendID heat 模板默认值都匹配。
  4. 对于每个配置的后端,将 use_multipath_for_image_xfer 设置为 true

    parameter_defaults:
      ExtraConfig:
        cinder::config::cinder_config:
          <backend>/use_multipath_for_image_xfer:
            value: true
  5. 部署 overcloud:

    $ openstack overcloud deploy
    注意

    有关使用 overcloud 参数创建 overcloud 的详情,请参考 Director 安装和使用指南中的使用 CLI 工具创建 Overcloud

  6. 在容器运行前,在所有 Controller 和 Compute 节点上安装多路径:

    $ sudo dnf install -y device-mapper-multipath
    注意

    director 提供了一组 hook,以便在第一次引导完成后以及核心配置开始前支持特定节点角色的自定义配置。有关自定义 overcloud 配置的更多信息,请参阅高级 Overcloud 自定义指南中的 Pre-Configuration: 自定义特定 Overcloud 角色

  7. 在所有 Controller 和 Compute 节点上配置 multipath 守护进程:

    $ mpathconf --enable --with_multipathd y --user_friendly_names n --find_multipaths y
    注意

    示例代码创建适用于大多数环境的基本多路径配置。但是,检查您的存储供应商以获得建议,因为有些供应商有特定于硬件的优化配置。有关多路径的更多信息,请参阅配置设备映射器多路径 指南。

  8. 在所有 Controller 和 Compute 节点上运行以下命令以防止分区创建:

    $ sed -i "s/^defaults {/defaults {\n\tskip_kpartx yes\n\trecheck_wwid yes/" /etc/multipath.conf
    注意

    skip_kpartx 设置为 yes 可防止 Compute 节点上的 kpartx 自动在设备上创建分区,这可以防止不必要的设备映射器条目。有关配置属性的更多信息,请参阅配置设备映射器多路径 指南中的 修改 DM-Multipath 配置文件

  9. 在所有 Controller 和 Compute 节点上启动多路径守护进程:

    $ systemctl enable --now multipathd

2.5.2. 在现有部署中配置多路径

在现有部署中配置多路径,以便您的工作负载可以使用多路径功能。

注意

在现有部署中配置多路径后创建的所有新工作负载都是多路径感知。如果您有任何已存在的工作负载,您必须检查并取消缩小实例以便在这些实例上启用多路径。

有关如何在新 overcloud 部署中配置多路径的更多信息,请参阅 第 2.5.1 节 “在新部署中配置多路径”

前提条件

overcloud Controller 和 Compute 节点必须有权访问 Red Hat Enterprise Linux 服务器存储库。如需更多信息,请参阅 Director 安装和使用指南中的下载基本云镜像

流程

  1. 验证所有 Controller 和 Compute 节点上安装多路径:

    $ rpm -qa | grep device-mapper-multipath
    
    device-mapper-multipath-0.4.9-127.el8.x86_64
    device-mapper-multipath-libs-0.4.9-127.el8.x86_64

    如果没有安装多路径,请在所有 Controller 和 Compute 节点上安装它:

    $ sudo dnf install -y device-mapper-multipath
  2. 在所有 Controller 和 Compute 节点上配置 multipath 守护进程:

    $ mpathconf --enable --with_multipathd y --user_friendly_names n --find_multipaths y
    注意

    示例代码创建适用于大多数环境的基本多路径配置。但是,检查您的存储供应商以获得建议,因为有些供应商已针对其硬件优化配置。有关多路径的更多信息,请参阅配置设备映射器多路径 指南。

  3. 在所有 Controller 和 Compute 节点上运行以下命令以防止分区创建:

    $ sed -i "s/^defaults {/defaults {\n\tskip_kpartx yes\n\trecheck_wwid yes/" /etc/multipath.conf
    注意

    skip_kpartx 设置为 yes 可防止 Compute 节点上的 kpartx 自动在设备上创建分区,这可以防止不必要的设备映射器条目。有关配置属性的更多信息,请参阅配置设备映射器多路径 指南中的 修改 DM-Multipath 配置文件

  4. 在所有 Controller 和 Compute 节点上启动多路径守护进程:

    $ systemctl enable --now multipathd
  5. 更新 heat 模板以启用多路径:

    parameter_defaults:
      NovaLibvirtVolumeUseMultipath:  true
      NovaComputeOptVolumes:
        - /etc/multipath.conf:/etc/multipath.conf:ro
        - /etc/multipath/:/etc/multipath/:rw
      CinderVolumeOptVolumes:
        - /etc/multipath.conf:/etc/multipath.conf:ro
        - /etc/multipath/:/etc/multipath/:rw
  6. 可选:如果您使用 Block Storage (cinder)作为镜像服务(glance)后端,还必须完成以下步骤:

    1. 将以下 GlanceApiOptVolumes 配置添加到 heat 模板中:

      parameter_defaults:
        GlanceApiOptVolumes:
          - /etc/multipath.conf:/etc/multipath.conf:ro
          - /etc/multipath/:/etc/multipath/:rw
    2. 使用以下方法设置 ControllerExtraConfig 参数:

      parameter_defaults:
        ControllerExtraConfig:
          glance::config::api_config:
            default_backend/cinder_use_multipath:
              value: true
      备注
      确保 default_backendGlanceBackendID heat 模板默认值都匹配。
  7. 对于每个配置的后端,将 use_multipath_for_image_xfer 设置为 true

    parameter_defaults:
      ExtraConfig:
        cinder::config::cinder_config:
          <backend>/use_multipath_for_image_xfer:
            value: true
  8. 运行以下命令以更新 overcloud:

    $ openstack overcloud deploy
    注意

    当您运行 openstack overcloud deploy 命令来安装和配置多路径时,您必须传递用于部署 overcloud 的所有之前角色和环境文件,如 --templates--roles-file、--e 用于所有环境文件和 --timeout。无法传递所有以前的角色和环境文件可能会导致您的 overcloud 部署出现问题。有关使用 overcloud 参数的更多信息,请参阅 Director 安装和使用指南中的使用 CLI 工具创建 Overcloud

2.5.3. 验证多路径配置

此流程描述了如何在新的或现有 overcloud 部署中验证多路径配置。

流程

  1. 创建虚拟机。
  2. 将非加密卷附加到虚拟机。
  3. 获取包含实例的 Compute 节点的名称:

    $ nova show INSTANCE | grep OS-EXT-SRV-ATTR:host

    INSTANCE 替换为您引导的虚拟机的名称。

  4. 检索实例的 virsh 名称:

    $ nova show INSTANCE | grep instance_name

    INSTANCE 替换为您引导的虚拟机的名称。

  5. 获取 Compute 节点的 IP 地址:

    $ . stackrc
    $ nova list | grep compute_name

    compute_name 替换为 nova show INSTANCE 命令的输出中的名称。

  6. SSH 到运行虚拟机的 Compute 节点:

    $ ssh heat-admin@COMPUTE_NODE_IP

    COMPUTE_NODE_IP 替换为 Compute 节点的 IP 地址。

  7. 登录到运行 virsh 的容器:

    $ podman exec -it nova_libvirt /bin/bash
  8. 在 Compute 节点实例中输入以下命令,以验证它是否在 cinder 卷主机位置中使用多路径:

    virsh domblklist VIRSH_INSTANCE_NAME | grep /dev/dm

    VIRSH_INSTANCE_NAME 替换为 nova show INSTANCE | grep instance_name 命令的输出。

    如果实例显示 /dev/dm- 以外的值,则连接是非多路径,您需要使用 nova shelvenova unshelve 命令刷新连接信息:

    $ nova shelve <instance>
    $ nova unshelve <instance>
    注意

    如果您有多种后端,您必须验证所有后端上的实例和卷,因为每个后端返回的连接信息可能有所不同。