概述
1. Multipath—多路径
- 在多路径功能出现之前,主机上的硬盘是直接挂接到一个总线(PCI)上,路径是一对一的关系,也就是一条路径指向一个硬盘或是存储设备,这样的一对一关系对于操作系统而言,处理相对简单,但是缺少了可靠性。当出现了光纤通道网络(Fibre Channle)也就是通常所说的SAN网络时,或者由iSCSI组成的IPSAN环境时,由于主机和存储之间通过光纤通道交换机或者多块网卡及IP来连接时,构成了多对多关系的IO通道,也就是说一台主机到一台存储设备之间存在多条路径。当这些路径同时生效时,I/O流量如何分配和调度,如何做IO流量的负载均衡,如何做主备。这种背景下多路径软件就产生了。
- 功能
- 故障的切换和恢复
- IO流量的负载均衡
2. Linux Multipath
- DM-Multipath组件
- dm-multipath: 内核模块,为路径和路径组群重新指定 I/O 并支持出错冗余。
- mpathconf: 程序,配置并启用设备映射器多路径
- multipath: 命令,列出并配置 multipath 设备。
- multipathd: 守护进程,监视器路径,如果路径故障并返回,它可能会启动路径组群切换。可为多路径设备提供互动修改。对 /etc/multipath.conf 文件的任何修改都必须重启它。
- kpartx: 命令,为设备中的分区生成设备映射器设备。这个命令对带 DM-MP 的 DOS 分区是很必要的。kpartx 在其自身软件包中就存在,但 device-mapper-multipath 软件包要依赖它。
-
mpathconf
介绍:- 用于配置device-mapper-multipath的工具,可以创建或修改/etc/multipath.conf
- 也可以加载dm_multipath模块,启动和停止multipathd守护程序,并将multipathd服务配置为自动启动或取消开机自启。
-
mpathconf
帮助root # mpathconf -h usage: /usr/sbin/mpathconf <command> Commands: Enable: --enable Disable: --disable Only allow certain wwids (instead of enable): --allow <WWID> Set user_friendly_names (Default y): --user_friendly_names <y|n> Set find_multipaths (Default y): --find_multipaths <y|n> Load the dm-multipath modules on enable (Default y): --with_module <y|n> start/stop/reload multipathd (Default n): --with_multipathd <y|n> select output file (Default /etc/multipath.conf): --outfile <FILE>
- 使用
mpathconf
程序设置多路径,它可创建多路径配置文件/etc/multipath.conf
。- 如果 /etc/multipath.conf 文件已存在,mpathconf 程序将会编辑该文件。
- 如果 /etc/multipath.conf 文件不存在,mpathconf 程序将使用 /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf 文件作为起始文件。
- 如果 /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf 文件不存在,则 mpathconf 程序将从头开始创建 /etc/multipath.conf 文件。
- Linux中多路径设备标识符
当在 DM-Multipath中添加新设备时,这些新设备会位于 /dev 目录的两个不同位置:/dev/mapper/mpath<n>
和/dev/dm-<n>
。- /dev/mapper 中的设备是在引导过程中生成的。可使用这些设备访问多路径设备,例如在生成逻辑卷时。
- 所有 /dev/dm-n 格式的设备都只能是作为系统内部使用,请不要使用它们。
-
注意事项
- 在集群中保持多路径设备名称一致
DM-Multipath安装配置
OS: CentOS 7.3
Software: device-mapper-multipath-0.4.9-99
1. 安装配置过程
- 查看是否安装:
rpm -qa |grep device-mapper-multipath
若没有请安装
# yum install device-mapper device-mapper-multipath
- 编辑配置文件并启动multipathd守护进程
- 如果您不需要手动编辑 /etc/multipath.conf 文件,您可以运行以下命令为基本故障切换配置设定 DM-Multipath。
# mpathconf --enable --with_multipathd y
- 这个命令可启用Multipath配置文件并启动multipathd守护进程。
- 如果您需要在启动 multipathd 守护进程前编辑 /etc/multipath.conf 文件,请安下面步骤操作
- 生成
/etc/multipath.conf
,并加载dm_multipath模块,但不启动multipathd守护进程
# mpathconf --enable
- 编辑
/etc/multipath.conf
文件 - 启动multipathd守护进程
- systemd启动(红帽7):
systemctl start multipathd
- sys V启动(红帽6、5):
service multipathd start
- systemd启动(红帽7):
- 注意
- 如果您在启动 multipath 守护进程后发现需要编辑 multipath 配置文件,则必须执行 service multipathd reload 命令方可使更改生效。
- 如果您不想使用默认的设备名称(
mpath<n>
)名称,可以执行mpathconf --enable --user_friendly_names n
或修改配置文件
- 如果您不需要手动编辑 /etc/multipath.conf 文件,您可以运行以下命令为基本故障切换配置设定 DM-Multipath。
- multipathd Daemon开机自启动
- systemd启动(红帽7):
systemctl enable multipathd
- sys V启动(红帽6、5):
chkconfig multipathd on
- systemd启动(红帽7):
- multipath操作
multipath -F
: 刷新所有多路径设备映射multipath -v2
: 打印所有路径和多路径信息- 0:没有输出
- 1:仅打印创建或更新的多路径名称
- 2: 打印所有信息:检测路径,合并路径(即多路径)和设备信息
multipath -ll
: 显示多路径拓扑(最大信息)- 查看多路径状态
multipathd show paths
- 删除未知设备路径
multipathd del path xxx
- 创建分区和文件系统
这个嘛,就不多做说明了......
2. Multipath高级配置
以上都是用multipath的默认配置来完成multipath的配置,是完全可以进行多路径聚合的,下述的高级配置根据需求配置。
-
multipath.conf文件的配置
接下来的工作就是要编辑/etc/multipath.conf的配置文件
multipath.conf主要包括blacklist、multipaths、devices三部份的配置# blacklist配置 blacklist { devnode "^sda" } # Multipaths配置 multipaths { multipath { wwid **************** #此值multipath -v3可以看到 alias iscsi-dm0 #映射后的别名,可以随便取 path_grouping_policy multibus #路径组策略 path_checker tur #决定路径状态的方法 path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法 } } # Devices部分配置 devices { device { vendor "iSCSI-Enterprise" #厂商名称 product "Virtual disk" #产品型号 path_grouping_policy multibus #默认的路径组策略 getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序 prio_callout "/sbin/acs_prio_alua %d" #获取有限级数值使用的默认程序 path_checker readsector0 #决定路径状态的方法 path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法 failback immediate #故障恢复的模式 no_path_retry queue #在disable queue之前系统尝试使用失效路径的次数的数值 rr_min_io 100 #在当前的用户组中,在切换到另外一条路径之前的IO请求的数目 } }
3. 实践操作
CentOS7.x Multipath配置,这里采用默认配置
-
安装device-mapper-multipath
root # rpm -qa |grep device-mapper-multipath root # yum install -y device-mapper device-mapper-multipath
-
加载dm_multipath模块
root # lsmod |grep dm_multipath //没有输出说明模块没有加载 root # modprobe dm_multipath //手动加载dm_multipath模块 root # modprobe dm-round-robin root # lsmod |grep dm_multipath dm_multipath 23065 0 dm_mod 114430 9 dm_multipath,dm_log,dm_mirror
-
查看路径聚合前硬盘信息
root # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 278.5G 0 disk ├─sda1 8:1 0 100M 0 part /boot/efi 本地盘信息省略....... sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sdf 8:80 0 20G 0 disk
-
配置多路径
root # mpathconf --enable --with_multipathd y root # systemctl status multipathd //查询multipathd Daemon状态 root # systemctl enable multipathd //开机自启multipathd Daemon root # multipath -F May 12 12:08:58 | /etc/multipath.conf line 31, duplicate keyword: defaults May 12 12:08:58 | /etc/multipath.conf line 94, duplicate keyword: blacklist root # root # multipath -v2 May 12 12:09:04 | /etc/multipath.conf line 31, duplicate keyword: defaults May 12 12:09:04 | /etc/multipath.conf line 94, duplicate keyword: blacklist May 12 12:09:08 | sdb: alua not supported May 12 12:09:08 | sda: alua not supported create: mpatha (3600a0b8000486c4a0000d35b59135194) undef IBM ,1814 FAStT size=20G features='1 queue_if_no_path' hwhandler='1 rdac' wp=undef |-+- policy='round-robin 0' prio=6 status=undef | `- 2:0:1:0 sde 8:64 undef ready running `-+- policy='round-robin 0' prio=1 status=undef `- 2:0:0:0 sdc 8:32 undef ghost running create: mpathb (3600a0b8000322f0c0000a34c591356d4) undef IBM ,1814 FAStT size=20G features='1 queue_if_no_path' hwhandler='1 rdac' wp=undef |-+- policy='round-robin 0' prio=4 status=undef | `- 2:0:0:1 sdd 8:48 undef ghost running `-+- policy='round-robin 0' prio=3 status=undef `- 2:0:1:1 sdf 8:80 undef ready running root # root # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT ...... sdc 8:32 0 20G 0 disk └─mpatha 253:2 0 20G 0 mpath sdd 8:48 0 20G 0 disk └─mpathb 253:3 0 20G 0 mpath sde 8:64 0 20G 0 disk └─mpatha 253:2 0 20G 0 mpath sdf 8:80 0 20G 0 disk └─mpathb 253:3 0 20G 0 mpath sr0 11:0 1 1024M 0 rom root # root # ls /dev/mapper/ control mpatha mpathb vg1-lv_root vg1-lv_swap root # root # mkfs.ext4 /dev/mapper/mpatha mke2fs 1.42.9 (28-Dec-2013) ...... Writing superblocks and filesystem accounting information: 完成 root # root # mount /dev/mapper/mpatha /mnt/ root # df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/vg1-lv_root 175G 1.1G 174G 1% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.7M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda2 497M 109M 389M 22% /boot /dev/sda1 100M 9.5M 91M 10% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 /dev/mapper/mpatha 20G 45M 19G 1% /mnt
- CentOS6.x Multipath配置
除了Daemon管理命令不同之外,其他操作一样,- 查询multipathd Daemon状态:
service multipathd status
- 开机自启multipathd Daemon:
chkconfig multipathd on
- 查询multipathd Daemon状态:
《Linux多路径 — DM-Multipath》文章由 执笔写快乐 发布在行动派博客,未经授权禁止转载。