Ubuntu系统下的多路径软件 DM Multipath 配置。

时间:2021-09-24 00:19:42

Ubuntu系统下的多路径软件是操作系统自带的 DM Multipath工具。
------------------------------------------------------------------------------------------------------------------
DM-Multipath 组件介绍:
dm_multipath :   内核模块 为路径和路径组群重新指定 I/O 并支持出错冗余。
multipath-tools: 程序 配置并启用设备映射器多路径
multipath :      命令 列出并配置 multipath 设备。通常使用 /etc/rc.sysinit 启动,还可以在添加块设备时使用 udev 程序启动。
multipathd :     守护进程 监视器路径,如果路径故障并返回,它可能会启动路径组群切换。可为多路径设备提供互动修改。
                              对 /etc/multipath.conf 文件的任何修改都必须启动它。
kpartx : 命令 为设备中的分区生成设备映射器设备。这个命令对带 DM-MP 的 DOS 分区
                 是很必要的。kpartx 在其自身软件包中就存在,但 devicemapper-multipath 软件包要依赖它。
-------------------------------------------------------------------------------------------------------------------
一、首先检查系统是否已安装了 Multipath 软件包,如果没有从系统安装光盘上找到并且安装相应软件包。
root@ubuntu:~# dpkg -l | grep multipath-tools
root@ubuntu:~#                                   #没有返回值说明没有安装

二、安装multipath-tools 和multipath-tools-boot 软件包
通过apt源安装,如果操作系统可以连接外网通过网络apt源最方便,如果不能连外网,可以通过DVD光驱挂载系统iso镜像文件实现本地apt源安装,
挂载DVD源的方法Ubuntu源的文章已经介绍这里不再介绍了。

1、搜索软件包
root@ubuntu:~# apt-cache search multipath-tool           
kpartx - create device mappings for partitions
multipath-tools - maintain multipath block device access
multipath-tools-boot - Support booting from multipath devices
root@ubuntu:~#

2、安装软件包
root@ubuntu:~# apt-get install multipath-tools

如果需要从SAN引导,则还需要multipath-tools-boot软件包,不需要可以不安装。
root@ubuntu:~# apt-get install multipath-tools-boot

三、查看服务的开机状态。

root@ubuntu:~# systemctl list-unit-files  | grep multipath
multipath-tools-boot.service               masked  
multipath-tools.service                    enabled          #开机已启动
multipathd.service                         enabled          #开机已启动
multipathd.socket                          static  
root@ubuntu:~#

如果服务没有启动,通过下面的命令启动
root@ubuntu:~# systemctl enable multipath-tools.service

四、Multipath 需要建立一个配置文件/etc/multipath.conf,默认情况下是没有的。安装完软件
会在:/usr/share/doc/multipath-tools/examples 目录下生成 multipath.conf.synthetic 模板文件
可以将这个文件复制到/etc目录下并从命名为multipath.conf 命令如下

root@ubuntu:~# cp -v /usr/share/doc/multipath-tools/examples/multipath.conf.synthetic /etc/multipath.conf

这个文件的内容都被注释掉了,可以取消与您环境相关的行的注释符

五、修改配置文件/etc/multipath.conf添加下面的内容,这里不取消注释的行,直接添加内容
-----------------------------------------------------------------------------------
defaults {
        user_friendly_names yes                    #如果是集群环境yes最好改成no,下面有解释。
        path_grouping_policy  multibus
}

blacklist {                                        #把本地磁盘加入黑名单,下面会解释
      wwid 3630001575acb87f022c3c81a046db3e4       #本地磁盘的WWid号
}
------------------------------------------------------------------------------------

可以通过下面的命令查看所以磁盘的wwid号。
root@ubuntu:~# ll /dev/disk/by-id/

如果您在启动 multipath 守护进程后发现需要编辑 multipath 配置文件,则必须执行如下命令方可使更改生效。

root@ubuntu:~# systemctl reload multipathd.service

六、启劢 multipathd 服务,守护进程。
[root@pipci ~]# systemctl start multipathd.service

七、检查 multipath 模块是否正常加载

root@ubuntu:~# lsmod |grep dm_multipath
dm_multipath           24576  2 dm_round_robin
root@ubuntu:~#

八、安装配置成功后,可以查看到 multipath 管理了一个名称为 mpathn 的多路径设备,此设备包含有两个 路径。
              
root@ubuntu:~# multipath -ll           #user_friendly_names yes(别名设置)

mpatha (36505dac1002fc54b1ee508f200000048) dm-0 HUAWEI,XSG1
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 12:0:0:1 sdb 8:16 active ready running
  `- 13:0:0:1 sdc 8:32 active ready running

root@ubuntu:~# multipath -ll           #user_friendly_names no(未别名设置)

36505dac1002fc54b1ee508f200000048 dm-0 HUAWEI,XSG1
size=200G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 12:0:0:1 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 13:0:0:1 sdc 8:32 active ready running

九、使用 fdisk 查看硬盘会多出存储设备Disk /dev/mapper/mpatha(用别名),这个是多路径软件生成的设备,在分区或其他针对硬盘的操作时请 使用这个设备,不要使用/dev/sdb 和/dev/sdc等设备,除非是服务器本地磁盘(sda)。
root@ubuntu:~# fdisk -l

Disk /dev/sdb: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/mpatha: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
root@ubuntu:~#

十、对修改配置文件multipath.conf添加下面的内容说明
-----------------------------------------------------------------------------------------
1、user_friendly_names yes
每个多路径设备都有一个全球识别符(WWID),它是一个全球唯一的无法更改的号码。默认情况下会将
多路径设备的名称设定为它的 WWID。另外,您还可以在多路径配置文件中设置
user_friendly_names 选项,该选项可将别名设为格式为 mpathn 的节点唯一名称
当在 DM-Multipath中添加新设备时,这些新设备会位于 /dev 目录的两个不同位
置:/dev/mapper/mpathn 和 /dev/dm-n。
/dev/mapper 中的设备是在引导过程中生成的。可使用这些设备访问多路径设备,例如在生成
逻辑卷时。
所有 /dev/dm-n 格式的设备都只能是作为内部使用,请不要使用它们。
*在集群中保持多路径设备名称一致(重点)
当将 user_friendly_names 配置选项设为 yes 时,该多路径设备的名称对于节点来说是唯一的,但不
保证对使用多路径设备的所有节点都一致。同样,如果您为 multipath.conf 配置文件的 multipaths
部分中的设备设定 alias 选项,该名称不会自动在集群的所有节点中保持一致。如果您使用 LVM 在多路
径设备中创建逻辑设备,这不应是问题。但如果您需要将您的多路径设备名称在集群中的每个节点上都保
持一致,请不要将 user_friendly_names 选项设定为 yes,且不要为那些设备配置别名。默认情况
下,如果您不将 user_friendly_names 设定为 yes,或者为某个设备配置别名,则设备名称将是该设
备的 WWID,它是不会变的。
如果您要系统定义的用户友好名称在集群的所有节点中都一致,您可按照以下步骤操作:
1. 在一台机器中设定所有多路径设备。
2. 运行以下命令在其他机器中禁用所有 multipath 设备:
# systemctl stop multipath-tools.service
# multipath -F
3. 将第一台机器中的 /etc/multipath/bindings 文件复制到集群中的其它所有机器中。
4. 使用以下命令在集群的其他机器中重新 multipathd 守护进程:
设备映射多路径
 
# systemctl start multipath-tools.service
如果您添加新设备,您将需要重复这个过程。
同样,如果您为某个设备配置别名以便在集群的节点中使其保持一致,您应确定
/etc/multipath.conf 文件对于集群中的每个节点都是一样的,步骤如下:
1. 为机器 multipath.conf 文件中的多路基功能设备配置别名。
2. 运行以下命令在其他机器中禁用所有 multipath 设备:
# systemctl stop multipath-tools.service
# multipath -F
3. 将第一台机器中的 /etc/multipath.conf 文件复制到集群中的其它所有机器中。
4. 使用以下命令在集群的其他机器中重新 multipathd 守护进程:
# systemctl start multipath-tools.service
当您添加新设备时,您将需要重复这个过程。
-----------------------------------------------------------------------------------------------

2、path_grouping_policy  multibus

DM-Multipath 可在主动/被动配置中提供出错冗余。在主动/被动配置中,只有一半的路径在每次
I/O 时都使用。如果 I/O 路径的任意元素(电缆、交换机或者控制器)出现故障,就会将 DMMultipath 切换到备用路径。
也可将 DM-Multipath 配置为主动/主动模式,其中将 I/O 以轮叫调度算法方式分布到所有路径中。
在有些配置中,DM-Multipath 可在 I/O 路径中检测负载并动态重新平衡负载
默认配置path_grouping_policy  failover  主备模式
配置成  path_grouping_policy  multibus  负载模式

3、生成多路径设备时忽略本地磁盘
有些机器的内部磁盘有本地SCSI卡。DM-Multipath不推荐用于这些设备。以下过程说明如何在配置多路径时修改多路径配置文件以忽略本地磁盘。
确定哪些磁盘是内部磁盘,并将它们标记为要列入黑名单的磁盘。一般情况下,/ dev / sda是内部磁盘。
为了防止设备映射器在其多路径映射中映射/ dev / sda,请编辑/etc/multipath.conf文件的黑名单部分以包含此设备。
虽然您可以使用devnode类型将sda设备列入黑名单,但这不是安全的过程,因为/ dev / sda不能保证在重新启动时相同。
要将单个设备列入黑名单,您可以使用该设备的WWID将其列入黑名单。

十一、常用命令

# multipath -ll     #显示现有多路径配置
# multipath -F      #删除全部路径  
# multipath -v2     #格式化路径,格式化后会生成新路径