cdomingos.multipath
Ansible角色:多路径(DM多路径)
一个很好的Ansible角色,可以为从SAN启动或本地启动场景适当地部署和设置Linux本地多路径软件(DM多路径)。
这个多路径 Ansible角色能够:
- 根据产品文档和行业最佳实践配置DM多路径
- 配置驱动程序参数
警告
此角色将替代DM多路径配置
之前的设置将被覆盖,请检查角色变量部分的multipath_backup_permanent
。
此配置会影响以下目录和配置文件:
/etc/multipath/
/etc/multipath.conf
如果在重启被管理主机后出现问题,initramfs中的一些错误可能会导致内核在启动时出现“dracut警告:找不到LVM rootvg/rootlv”
在这种情况下,我建议:
- 使用救援ISO镜像重启系统
- 恢复主文件:
- /boot/<original-initramfs>.img.ansible_multipath
- /etc/fstab.ansible_multipath
- /etc/lvm/lvm.conf.ansible_multipath
注意:有很多方法可以将系统恢复到可操作状态,内核启动参数如rdshell
或rd.shell
加上移除rhgb
和quiet
可以帮助您排查损坏的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_install或multipath_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