主流厂商存储多路径软件的安装与使用
在生产环境中,为保证存储访问的可靠性(当然也为负载均衡),一般会用 2 张甚至更多的光纤卡,通过 2 条或更多的 FC 路径,接在磁盘阵列的两个控制器上,当一条路径出现故障的时候也能够保证系统与存储的不间断访问。但是这会导致一个问题,一个实际的 LUN 在一条路径过来在系统层面来看,就会有一个设备,同一个 LUN 从不同的路径过来就会有多个设备,也就是说你在存储上划的一个 LUN 给你的系统,通过多个路径过来,在操作系统上就会看到多个盘,这就需要多路径软件来将这些盘虚拟成一个设备。本文将介绍各个多路径软件的安装与配置。
一般来说,主流厂商的存储都会有自家的多路径软件,例如,日立 (HITACHI) 存储使用的多路径软件为 HDLM
,EMC (戴尔收购) 存储使用的多路径软件为 PowerPath
,华为存储为 UltraPath
,其他厂商 Linux 下大多会使用红帽家的 multipath
,AIX 或是 Windows 下使用 mpio
。
日立
日立存储 (HDS) 使用的多路径是 HDLM
(Hitachi Dynamic Link Manager),本文仅记录 Linux
环境下的安装与使用,其他平台大同小异。
安装
手上目前只有 RHEL 6
的安装包与 license,下文都是在该环境下完成的,RHEL 7
下的安装大同小异,后期有相关需求的时候再补上。
运行环境
安装 HDLM
前需要安装如下软件包:1
2
3
4
5
6
7- libstdc++-RPM package version.i386.rpm
- libgcc-RPM package version.i386.rpm
- glibc-RPM package version.i686.rpm
- libstdc++-RPM package version.i686.rpm
- libgcc-RPM package version.i686.rpm
- glibc-RPM package version.i686.rpm 1
2
3
4
5
6
7注意 i686 i386 均要安装
yum install -y libstdc++
yum install -y libgcc
yum install -y glibc-
yum install -y glibc.i686
yum install -y libgcc.i686
yum install -y libstdc++.i686
否则将出现如下报错: 1
2
3
4
5
6[root@localhost HDLM_Linux]# ./installhdlm
KAPL09210-I installhdlm will now start.
KAPL09093-I HDLM 8.7.0-00 will be installed. Is this OK ? [y/n]: y
KAPL09098-E An attempt to install /tmp/HDLM_Linux/rpm/HDLM-8.7.0.0.808-3.x86_64.rpm has failed. Code = 1
KAPL09212-E installhdlm ended abnormally.
[root@localhost HDLM_Linux]#
上传安装包
上传 HDLM_Linux
文件夹到 /tmp 目录,上传 /licence/hdlm_license 到 /var/tmp。1
2
3cd /tmp/HDLM_Linux
chmod -R 755 * # 给权限
./installhdlm
环境变量配置
1 | vim ~/.bash_profile |
在 PATH 字段后追加:1
:/opt/DynamicLinkManager/bin
并 source
让其生效:1
source ~/.bash_profile
安装后需要重启系统 reboot
完成安装。
常用命令
1 | 创建HDLM设备 |
华为
华为 OceanStor,对应使用华为自己的 UltraPath
多路径软件。
安装
静默安装配置
上传并解压 UltraPath
的安装包后,进入其解压目录,修改 “unattend_install.conf” 的如下字段:1
2
3
4
5
6
7
8# 启动类型,1 为本地启动(Local Boot),2 为 SAN 存储(SAN Boot)启动,前者即操作系统装在本地磁盘,后者为操作系统装在 SAN 网络中。一般都为前者。
boot_type = 1
# 安装完是否重启
restart = y
# 当系统自带多路径DM-multipath已经启用时,是否继续安装UltraPath多路径。
continue_when_dm_enable = y
给 “install.sh” 执行权限:1
chmod +x install.sh
开始安装:1
./install.sh -f unattend_install.conf
安装完成后需要重启操作系统。
检查
检查是否在内核加载成功:1
lsmod | grep nxup
显示类似如下即可:1
2nxupext_a 4008975 0
nxup 477464 1 nxupext_a
检查服务进程是否开启:1
ps -ef | grep upservice | grep -v grep
常用命令
1 | 重新启动 UltraPath 服务 |
EMC
EMC 存储用的多路径软件为 PowerPath
,相比其他厂商的多路径软件,PowerPath
多了负载均衡的优势。
安装
安装rpm包
上传对应版本的 rpm 包,使用 rpm -Uvh
安装:1
rpm -Uvh EMCPower.LINUX-6.3.0.01.00-001.RHEL6.x86_64.rpm
注册
1 | emcpreg -install # 将提示输入license |
启动
1 | /etc/init.d/PowerPath start |
检查
查看是否有 emcpower 伪设备:1
fdisk -l |grep emcpower
常用命令
1 | 列出 PowerPath 配置的 HBA 状态 |
其他
安装
在厂商没有自己的多路径软件的时候(如华三),一般用红帽的 multipath
,其安装十分简单,直接通过 yum
安装 device-mapper-multipath device-mapper
即可:1
yum install -y device-mapper-multipath
multipath
针对不同的存储有不同的更优配置,并且提供了相关的模板文件,需要根据不同的存储,配置不同的参数。在 RHEL 6
下,其模板文件位置为 “/usr/share/doc/device-mapper-multipath-xxx/multipath.conf.defaults”,部分存储厂家也会提供其对应型号的推荐配置。
常用命令
1 | 启动 |
配置文件
/etc/multipath/bindings
: wwid 和盘 alias 的绑定/etc/multipath/wwids
: multipath 发现的所有 wwid
/etc/multipath.conf
配置解释:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 【blacklist】 -- 【default】 -- 【devices】 -- 【multipaths】 -- 【multipath】
# 黑名单 -- 默认配置 --厂商存储配置 -- 多路径设备配置 -- 子设备配置
########## 黑名单配置
blacklist {
wwid 3600605b009d63a801ca59ff70e55ce7a
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
}
##### 默认配置
defaults {
user_friendly_names yes
path_grouping_policy multibus
failback immediate
no_path_retry fail
}
####### 厂商存储配置
devices {
device {
vendor "EMC"
product "SYMMETRIX"
path_grouping_policy "multibus"
getuid_callout "/lib/udev/scsi_id --page=pre-spc3-83 --whitelisted --device=/dev/%n"
path_selector "round-robin 0"
path_checker "tur"
features "0"
hardware_handler "0"
prio "const"
rr_weight "uniform"
no_path_retry "6"
rr_min_io "1000"
rr_min_io_rq "1"
}
}
########## 多路径设备配置
multipaths {
#####单独设备配置
multipath {
wwid 1111111111111111111111111111111111111111111111111
alias asm1
}
multipath {
wwid 22222222222222222222222222
alias asm2
}
multipath {
wwid 33333333333333333333
alias asm3
}
}