cdomingos.multipath

Ansible角色:多路径(DM多路径)

一个很好的Ansible角色,可以为从SAN启动本地启动场景适当地部署和设置Linux本地多路径软件(DM多路径)。

这个多路径 Ansible角色能够:

  • 根据产品文档和行业最佳实践配置DM多路径
  • 配置驱动程序参数

警告

此角色将替代DM多路径配置
之前的设置将被覆盖,请检查角色变量部分的multipath_backup_permanent

此配置会影响以下目录和配置文件:

  • /etc/multipath/
  • /etc/multipath.conf

如果在重启被管理主机后出现问题,initramfs中的一些错误可能会导致内核在启动时出现“dracut警告:找不到LVM rootvg/rootlv”

在这种情况下,我建议:

  1. 使用救援ISO镜像重启系统
  2. 恢复主文件:
    • /boot/<original-initramfs>.img.ansible_multipath
    • /etc/fstab.ansible_multipath
    • /etc/lvm/lvm.conf.ansible_multipath

注意:有很多方法可以将系统恢复到可操作状态,内核启动参数如rdshellrd.shell加上移除rhgbquiet可以帮助您排查损坏的initramfs问题。

它是如何工作的?

有两个主要阶段:预设置设置

在预设置阶段,此角色执行(没有系统更改,除了如果声明的包安装):

  • 检查是否安装了device-mapper-multipath软件包(可以安装或升级,见变量)
  • 获取/boot挂载文件系统和/boot/efi的设备属性
  • 获取并发现/boot挂载文件系统的真实磁盘设备
  • 根据从发现的真实启动磁盘设备获得的供应商和型号加载modprobe驱动程序
  • 根据启动磁盘设备驱动程序自动选择配置类型(从SAN启动?
  • 获取GRUB的默认内核和initramfs
  • 加载从SAN启动或本地启动场景的验证
  • 定义真实磁盘设备的伪名称
  • 定义LVM过滤器

在设置阶段,此角色执行(系统更改):

  • 备份一些系统文件,如/etc/fstab,当前的initramfs和/etc/lvm/lvm.conf
  • 移除当前的DM多路径配置文件
  • 创建初始的/etc/multipath.conf文件
  • 设置/etc/multipath.conf文件并检查语法或错误
  • 设置/etc/fstab
  • 设置LVM过滤器并检查语法或错误
  • 设置modprobe文件并检查语法或错误
  • 设置initramfs并检查错误
  • 如果出现错误,移除多余文件并使用上一个备份回滚系统文件
  • 重启系统
  • 移除之前的备份系统文件

要求

剧本必须以become: yes或等效的root权限和gather_facts: yes运行。

  • Ansible引擎2.7.1+

角色变量

多路径角色通过以multipath_为前缀的变量进行配置。

变量列表:

变量 类型 描述
multipath_setup_pseudodevname 字符串(m) 为由DM多路径管理的启动磁盘定义伪设备名称(别名)
multipath_package_install 布尔值(o) 如果未安装,安装device-mapper-multipath软件包
multipath_package_upgrade 布尔值(r) 升级(也安装)device-mapper-multipath软件包
multipath_preserve_currentfiles 布尔值(r) 在设置阶段之前,对当前DM多路径配置文件进行永久复制
multipath_reboot_allow 布尔值(r) 允许此角色重启被管理节点
multipath_reboot_timeoutguest 整数(o) 'reboot'等待被管理的客户系统再次上线的最大时间(秒)
multipath_reboot_timeoutbaremetal 整数(o) 'reboot'等待被管理的裸金属系统再次上线的最大时间(秒)
multipath_modprobe_custom 列表(o) 加载和定义与启动设备磁盘供应商或型号相关驱动参数
multipath_configfile_commentlines 布尔值(o) 注释掉/etc/multipath.conf中的所有行
multipath_configfile_bybasic 布尔值(o) 使用基本和功能性的配置覆盖/etc/multipath.conf文件
multipath_configfile_bytemplate 布尔值(o) 使用预定义角色模板覆盖/etc/multipath.conf文件
multipath_configfile_byusertemplate 字符串(o) 使用自定义用户模板文件覆盖/etc/multipath.conf文件
multipath_configfile_bysections 字符串(o) 在/etc/multipath.conf文件中包含自定义部分
multipath_configfile_defaults 列表(o) 在/etc/multipath.conf的“defaults {”部分中包含额外参数
multipath_debug_sysfilecontent 布尔值(o) 在后设置任务(如重启)之前,显示已修改的系统文件内容
multipath_debug_showvariables 布尔值(r) 显示角色变量及其值

(m) - 必需
(r) - 推荐
(o) - 可选
* - 默认值适用(见defaults/main.yml

变量说明:

  • multipath_setup_pseudodevname:定义由DM多路径管理的启动磁盘的伪设备名称(别名)(例如/dev/mapper/bootLUN)

    类型:字符串

    受影响的文件:

    • /etc/fstab
    • /etc/multipath.conf

    示例:

    multipath_setup_pseudodevname: bootLUN
    

    注意:请勿使用“p”或数字字符


  • multipath_package_install:如果未安装,安装device-mapper-multipath软件包

    类型:布尔值

    受影响的文件:n/a

    示例:

    multipath_package_install: yes
    

  • multipath_package_upgrade:升级(也安装)device-mapper-multipath软件包

    类型:布尔值

    受影响的文件:n/a

    示例:

    multipath_package_upgrade: yes
    

  • multipath_preserve_currentfiles:在设置阶段之前,对当前DM多路径配置文件,如/etc/multipath.conf和/etc/multipath/进行永久复制

    类型:布尔值

    受影响的文件:n/a

    示例:

    multipath_preserve_currentfiles: yes
    

    注意:保存的文件将存储为/etc/multipath.conf.ansible_multipath和/etc/multipath.ansible_multipath/,一旦这些文件被复制,角色将不会再次触碰它们,在目录中它以附加模式工作。


  • multipath_reboot_allow:允许此角色重启被管理节点

    类型:布尔值

    受影响的文件:n/a

    示例:

    multipath_reboot_allow: yes
    

  • multipath_reboot_timeoutguest:'reboot'等待被管理的客户系统再次上线的最大时间(秒)

    类型:整数

    受影响的文件:n/a

    示例:

    multipath_reboot_timeoutguest: 300
    

  • multipath_reboot_timeoutbaremetal:'reboot'等待被管理的裸金属系统再次上线的最大时间(秒)

    类型:整数

    受影响的文件:n/a

    示例:

    multipath_reboot_timeoutbaremetal: 1800
    

  • multipath_modprobe_custom:加载和定义与启动设备磁盘供应商或型号相关的驱动程序参数,根据模块名称生成modprobe文件。- 请参考您的连接指南,了解企业存储阵列供应商。

    类型:列表

    受影响的文件:

    • /etc/modprobe.d/<module-name>.conf

    示例:

    multipath_modprobe_custom:
      - module: lpfc
        params: lpfc_max_luns=65535 lpfc_devloss_tmo=10
        vendor: EMC
        model: any
      - module: lpfc
        params: lpfc_max_luns=65535 lpfc_devloss_tmo=14 lpfc_lun_queue_depth=16 lpfc_discovery_threads=32
        vendor: 3PARdata
        model: VV
      - module: qla2xxx
        params: ql2xmaxlun=65535 qlport_down_retry=14 ql2xmaxqdepth=16
        vendor: 3PARdata
        model: VV
      - module: scsi_transport_fc
        params: dev_loss_tmo=10
        vendor: any
        model: any
    

    注意:使用“any”值将调整驱动程序参数,而不匹配/验证启动磁盘设备驱动程序,您可以通过multipath -t获得完整设备列表。


  • multipath_configfile_commentlines:在mpathconf工具创建初始配置文件后,注释掉/etc/multipath.conf中的所有行

    类型:布尔值

    受影响的文件:

    • /etc/multipath.conf

    示例:

    multipath_configfile_commentlines: yes
    

  • multipath_configfile_bybasic:使用基本和功能性的配置覆盖/etc/multipath.conf文件(原始文件注释不被保留)

    类型:布尔值

    受影响的文件:

    • /etc/multipath.conf

    依赖关系:

    • multipath_configfile_commentlines: yes

    示例:

    multipath_configfile_bybasic: yes
    

  • multipath_configfile_bytemplate:使用预定义角色模板覆盖/etc/multipath.conf文件(例如,templates/bootfromsan_multipath.conf.j2),基本功能配置(原始文件注释被保留)

    类型:布尔值

    受影响的文件:

    • /etc/multipath.conf

    示例:

    multipath_configfile_bytemplate: yes
    

  • multipath_configfile_byusertemplate:使用自定义用户模板文件覆盖/etc/multipath.conf文件,该文件必须在剧本目录级别或“templates”中,同样你可以使用角色事实,见'templates/bootfromsan_multipath.conf.j2'文件

    类型:字符串(文件路径)

    受影响的文件:

    • /etc/multipath.conf

    示例:

    multipath_configfile_byusertemplate: mymultipath.conf.j2
    

  • multipath_configfile_bysections:在/etc/multipath.conf文件中包含自定义部分

    类型:字符串(多行)

    受影响的文件:

    • /etc/multipath.conf

    示例:

    multipath_configfile_bysections: |
    
      devices {
              device {
                      vendor                   "COMPAQ  "
                      product                  "HSV110 (C)COMPAQ"
                      path_grouping_policy     multibus
                      path_checker             readsector0
                      path_selector            "round-robin 0"
                      hardware_handler         "0"
                      failback                 15
                      rr_weight                priorities
                      no_path_retry            queue
              }
      }
    

    注意:可选的结合multipath_configfile_commentlines: yes


  • multipath_configfile_defaults:在/etc/multipath.conf的“defaults {”部分中包含额外参数

    类型:列表

    受影响的文件:

    • /etc/multipath.conf

    示例:

    multipath_configfile_defaults:
      - detect_prio no
      - failback "manual"
      - max_fds 1048576
      - max_polling_interval 20
    

  • multipath_debug_sysfilecontent:在后设置任务(如重启)之前,在剧本流中显示已修改的系统文件内容,如文件:/etc/fstab,/etc/lvm/lvm.conf和/etc/multipath.conf

    类型:布尔值

    受影响的文件:n/a

    示例:

    multipath_debug_sysfilecontent: yes
    

  • multipath_debug_showvariables:显示角色变量及其值

    类型:布尔值

    受影响的文件:n/a

    示例:

    multipath_debug_showvariables: yes
    

依赖关系

没有

标签

有两个可用标签:

  • role:multipath:prereqs:角色前提条件,检查角色变量,不进行系统更改

    ansible-playbook multipathing.yml --tags role:multipath:prereqs
    
  • role:multipath:presetup:预设置验证,不进行系统更改(除非请求安装或升级DM多路径软件包,使用multipath_package_installmultipath_package_upgrade变量)

    ansible-playbook multipathing.yml --tags role:multipath:presetup
    

示例剧本

一个基本的剧本应该如下所示:

- hosts: servers
  become: yes
  gather_facts: yes

  roles:
    - cdomingos.multipath

可以在角色目录结构的tests/中找到示例剧本列表。

许可证

MIT

作者信息

此角色由Cláudio Domingos创建于2019年

附加信息

测试于:

  • HP ProLiant BL460c Gen9(UEFI)
  • 3PAR存储阵列
  • HP ProLiant BL460c G7
  • VMAX存储阵列
  • RHEL 8
  • RHEL 7
  • RHEL 6
  • Fedora 31

此角色非常适合用于裸金属机器,客户机没有意义,因为高可用性的多路径软件必须在虚拟机监控器级别。

您想使用特定存储阵列应用DM多路径最佳实践配置吗? 请与您的存储阵列供应商联系,同时您可以查找Linux主机连接指南,查看您的存储阵列供应商推荐的内容。

此角色的灵感来源于:

待做

解决关键问题,例如dracut警告:找不到LVM rootvg/rootlv

a. 在系统重启循环期间发生崩溃时,实现回滚到initramfs/dracut引导阶段的脚本
b. 在initramfs/dracut引导阶段启用网络和sshd服务,并使用Ansible执行必要的救援任务以修复它

关于项目

Configure native linux multipathing (DM Multipath) for Boot from SAN or Local Boot

安装
ansible-galaxy install cdomingos.multipath
许可证
mit
下载
1.7k
拥有者