一、multipath在redhat 6.2中的基本配置:

1. 通过命令:lsmod |grep dm_multipath  检查是否正常安装成功。如果没有输出说明没有安装那么通过yum功能安装一下软件包:yum –y install device-mapper device-mapper-multipath

接着通过命令:multipath –ll 查看多路径状态查看模块是否加载成功

[root@liujing ~]#  multipath –ll   查看多路径状态

Mar 10 19:18:28 | /etc/multipath.conf does not exist, blacklisting all devices.

Mar 10 19:18:28 | A sample multipath.conf file is located at

Mar 10 19:18:28 | /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf

Mar 10 19:18:28 | You can run /sbin/mpathconf to create or modify /etc/multipath.conf

Mar 10 19:18:28 | DM multipath kernel driver not loaded    ----DM模块没有加载

如果模块没有加载成功请使用下列命初始化DM,或重启系统

---Use the following commands to initialize and start DM for the first time:

# modprobe dm-multipath

# modprobe dm-round-robin

# service multipathd start

# multipath –v2

初始化完了之后再通过multipath -ll命令查看是否加载成功

[root@liujing
~]#  multipath -ll

Mar 10 19:21:14 |
/etc/multipath.conf does not exist, blacklisting all devices.

Mar 10 19:21:14 |
A sample multipath.conf file is located at

Mar 10 19:21:14 |
/usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf

Mar 10 19:21:14 |
You can run /sbin/mpathconf to create or modify /etc/multipath.conf

DM multipath kernel
driver not loaded    ----这个提示没了说明DM模块已加载成功。

从上面的提示可以看到,DM模块是成功加载,但是/etc/下没有multipath.conf 配置文件,下一步介绍如何配置multipath.conf 文件。

2. 配置multipath:

通过vi命令创建一个Multipath的配置文件路径是/etc/multipath.conf ,在配置文件中添加multipath正常工作的最简配置如下:

vi
/etc/multipath.conf

blacklist {

devnode
"^sda"

}

defaults {

user_friendly_names
yes

path_grouping_policy
multibus

failback immediate

no_path_retry fail

}

编辑完成后保存配置,同时通过命令:

#
/etc/init.d/multipathd start #开启mulitipath服务

如果出现无法开启服务的情况,没有提示OK的话如下:

[root@liujing
mapper]# service multipathd start

Starting
multipathd daemon:     没有提示OK

重新开关一下服务就可以解决了。

[root@liujing
mapper]# /etc/init.d/multipathd stop

Stopping
multipathd daemon:                                [  OK  ]

[root@localhost
mapper]# /etc/init.d/multipathd start

Starting
multipathd
daemon:                                [  OK  ]
 -----提示OK 正常开启服务

通过命令查看:

[root@liujing
mapper]# multipath -ll

mpatha
(360a9800064665072443469563477396c) dm-0 NETAPP,LUN    ----创建了一个lun

size=3.5G
features='0' hwhandler='0' wp=rw

`-+-
policy='round-robin 0' prio=4 status=active

|- 1:0:0:0 sdb
8:16 active ready  running   ----多路径下的两个盘符sdb和sde.

`- 2:0:0:0 sde
8:64 active ready  running

目录/dev/mapper/   下多了两个文件夹mpatha 和mpathap1。

[root@liujing
mapper]# cd /dev/mapper/

[root@liujing
mapper]# ls

control
 mpatha  mpathap1

同时fdisk –l的命令下也多了两个设备标识:

没有配置多路径时:

[root@liujing~]#
fdisk -l

Disk /dev/sda:
146.8 GB, 146815733760 bytes

255 heads, 63
sectors/track, 17849 cylinders

Units = cylinders
of 16065 * 512 = 8225280 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 512 bytes / 512 bytes

Disk identifier:
0x000a6cdd

Device
Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          26      204800   83  Linux

Partition 1 does
not end on cylinder boundary.

/dev/sda2              26         287     2097152   82  Linux
swap / Solaris

Partition 2 does
not end on cylinder boundary.

/dev/sda3             287       17850   141071360   83  Linux

Disk /dev/sdb:
3774 MB, 3774873600 bytes

117 heads, 62
sectors/track, 1016 cylinders

Units = cylinders
of 7254 * 512 = 3714048 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 4096 bytes / 65536 bytes

Disk identifier:
0xac956c3a

Device
Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1016     3685001   83  Linux

Partition 1 does
not start on physical sector boundary.

Disk /dev/sde:
3774 MB, 3774873600 bytes

117 heads, 62
sectors/track, 1016 cylinders

Units = cylinders
of 7254 * 512 = 3714048 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 4096 bytes / 65536 bytes

Disk identifier:
0xac956c3a

Device Boot      Start         End      Blocks   Id  System

/dev/sde1               1        1016     3685001   83  Linux

Partition 1 does
not start on physical sector boundary.

两个CAN网卡获取到同一盘符:

/dev/sde和/dev/sdb.

配置后多了/dev/mapper/mpatha和/dev/mapper/mpathap1:

[root@localhost
mapper]# fdisk -l

Disk /dev/sda:
146.8 GB, 146815733760 bytes

255 heads, 63
sectors/track, 17849 cylinders

Units = cylinders
of 16065 * 512 = 8225280 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 512 bytes / 512 bytes

Disk identifier:
0x000a6cdd

Device
Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          26      204800   83  Linux

Partition 1 does
not end on cylinder boundary.

/dev/sda2              26         287     2097152   82  Linux
swap / Solaris

Partition 2 does
not end on cylinder boundary.

/dev/sda3             287       17850   141071360   83  Linux

Disk /dev/sdb:
3774 MB, 3774873600 bytes

117 heads, 62
sectors/track, 1016 cylinders

Units = cylinders
of 7254 * 512 = 3714048 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 4096 bytes / 65536 bytes

Disk identifier:
0xac956c3a

Device
Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1016     3685001   83  Linux

Partition 1 does
not start on physical sector boundary.

Disk /dev/sde:
3774 MB, 3774873600 bytes

117 heads, 62
sectors/track, 1016 cylinders

Units = cylinders
of 7254 * 512 = 3714048 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 4096 bytes / 65536 bytes

Disk identifier:
0xac956c3a

Device
Boot      Start         End      Blocks   Id  System

/dev/sde1               1        1016     3685001   83  Linux

Partition 1 does
not start on physical sector boundary.

Disk
/dev/mapper/mpatha: 3774 MB, 3774873600 bytes

117 heads, 62
sectors/track, 1016 cylinders

Units = cylinders
of 7254 * 512 = 3714048 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 4096 bytes / 65536 bytes

Disk identifier:
0xac956c3a

Device
Boot      Start         End      Blocks   Id  System

/dev/mapper/mpathap1               1        1016     3685001   83  Linux

Partition 1 does
not start on physical sector boundary.

Disk
/dev/mapper/mpathap1: 3773 MB, 3773441024 bytes

255 heads, 63
sectors/track, 458 cylinders

Units = cylinders
of 16065 * 512 = 8225280 bytes

Sector size
(logical/physical): 512 bytes / 512 bytes

I/O size
(minimum/optimal): 4096 bytes / 65536 bytes

Alignment offset:
1024 bytes

Disk identifier:
0x00000000

Disk
/dev/mapper/mpathap1 doesn't contain a valid partition table

# multipath -F #删除现有路径  两个新的路径就会被删除

# multipath -v2 #格式化路径   格式化后又出现

3. multipath磁盘的基本操作

要对多路径软件生成的磁盘进行操作直接操作/dev/mapper/目录下的磁盘就行.

在对多路径软件生成的磁盘进行分区之前最好运行一下pvcreate命令:

# pvcreate
/dev/mapper/mpatha

# fdisk
/dev/mapper/mpatha  分区时用这个目录/dev/mapper/mpatha

用fdisk对多路径软件生成的磁盘进行分区保存时会有一个报错,此报错不用理会.

# ls -l
/dev/mapper/

[root@liujing
mnt]#  ls -l /dev/mapper/

total 0

crw-rw----. 1 root
root 10, 58 Mar 10 19:10 control

lrwxrwxrwx. 1 root
root      7 Mar 10 20:28 mpatha -> ../dm-0

lrwxrwxrwx. 1 root
root      7 Mar 10 20:33 mpathap1 -> ../dm-1

的mpathap1就是我们对multipath磁盘进行的分区

# mkfs.ext4
/dev/mapper/mpathap1 #对mpath1p1分区格式化成ext4文件系统

# mount
/dev/mapper/mpathap1 /mnt/ #挂载mpathap1分区

格式化和挂载时用/dev/mapper/mpathap1 

4. 分区磁盘:

上面有提到分区时用目录/dev/mapper/mpatha

[root@liujing~]#
fdisk /dev/mapper/mpatha

Device contains
neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS
disklabel with disk identifier 0xac956c3a.

Changes will
remain in memory only, until you decide to write them.

After that, of
course, the previous content won't be recoverable.

Warning: invalid
flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING:
DOS-compatible mode is deprecated. It's strongly recommended to

switch off the
mode (command 'c') and change display units to

sectors (command
'u').

Command (m for
help): n------------------------新建分区

Command action

e   extended

p   primary
partition (1-4)

p-----------------------------主分区

Partition number
(1-4): 1

First cylinder
(1-1016, default 1):

Using default
value 1

Last cylinder,
+cylinders or +size{K,M,G} (1-1016, default 1016):

Using default
value 1016

Command (m for
help): w ---------------------写入列表相当于保存

The partition
table has been altered!

Calling ioctl() to
re-read partition table.

Syncing disks.

注:如果同一台设备的两个node挂同样的盘符,另一个盘符还需要再次写入w就行。不需要n了。

5. 格式化:

[root@liujing ~]#
mkfs.ext4 /dev/mapper/mpathap1

mke2fs 1.41.12
(17-May-2010)

/dev/sdd1
alignment is offset by 1024 bytes.

This may result in
very poor performance, (re)-partitioning suggested.

Filesystem label=

OS type: Linux

Block size=4096
(log=2)

Fragment size=4096
(log=2)

Stride=1 blocks,
Stripe width=16 blocks

230608 inodes,
921250 blocks

46062 blocks
(5.00%) reserved for the super user

First data block=0

Maximum filesystem
blocks=943718400

29 block groups

32768 blocks per
group, 32768 fragments per group

7952 inodes per
group

Superblock backups
stored on blocks:

32768, 98304,
163840, 229376, 294912, 819200, 884736

Writing inode
tables: done

Creating journal
(16384 blocks): done

Writing
superblocks and filesystem accounting information: done

This filesystem
will be automatically checked every 33 mounts or

180 days,
whichever comes first.  Use tune2fs -c or -i to override.

6. 挂载 /dev/mapper/mpathap1 到 /mnt

[root@liujing ~]#
mount  /dev/mapper/mpathap1  /mnt

三、multipath的高级配置之前的配置都是用multipath的默认配置来完成multipath,比如映射设备的名称,multipath负载均衡的方法都是默认设置。那有没有按照我们自己定义的方法来配置multipath呢,答案是OK。

1、multipath.conf文件的配置

接下来的工作就是要编辑/etc/multipath.conf的配置文件

multipath.conf主要包括blacklist、multipaths、devices三部份的配置

blacklist配置

blacklist {

devnode "^sda"

}

Multipaths部分配置multipaths和devices两部份的配置。

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请求的数目

}

}

下面是相关参数的标准文档的介绍:

Attribute

Description

wwid

Specifies the WWID of the
multipath device to which themultipath attributes
apply. This parameter is mandatory for this section of themultipath.conf file.

alias

Specifies the symbolic name
for the multipath device to which themultipath attributes
apply. If you are usinguser_friendly_names,
do not set this value tompathn; this may conflict with an
automatically assigned user friendly name and give you incorrect device node
names.

path_grouping_policy

Specifies the default path
grouping policy to apply to unspecified multipaths. Possible values
include:

failover = 1 path per priority group

multibus = all valid paths in 1 priority group

group_by_serial = 1 priority group per detected serial number

group_by_prio = 1 priority group per path priority value

group_by_node_name = 1 priority group per target node name

path_selector

Specifies the default
algorithm to use in determining what path to use for the next I/O
operation. Possible values include:

round-robin 0: Loop through every path in
the path group, sending the same amount of I/O to each.

queue-length 0: Send the next bunch of I/O
down the path with the least number of outstanding I/O requests.

service-time 0: Send the next bunch of I/O
down the path with the shortest estimated service time, which is determined
by dividing the total size of the outstanding I/O to each path by its
relative throughput.

failback

Manages path group failback.

A value of immediate specifies immediate
failback to the highest priority path group that contains active paths.

A value of manual specifies that there
should not be immediate failback but that failback can happen only with
operator intervention.

A value of followover specifies that
automatic failback should be performed when the first path of a path group
becomes active. This keeps a node from automatically failing back when
another node requested the failover.

A numeric value greater than
zero specifies deferred failback, expressed in seconds.

prio

Specifies the default
function to call to obtain a path priority value. For example, the ALUA
bits in SPC-3 provide an exploitableprio value.
Possible values include:

const: Set a priority of 1 to all paths.

emc: Generate the path priority for
EMC arrays.

alua: Generate the path priority based
on the SCSI-3 ALUA settings.

tpg_pref: Generate the path priority based
on the SCSI-3 ALUA settings, using the preferred port bit.

ontap: Generate the path priority for
NetApp arrays.

rdac: Generate the path priority for
LSI/Engenio RDAC controller.

hp_sw: Generate the path priority for
Compaq/HP controller in active/standby mode.

hds: Generate the path priority for
Hitachi HDS Modular storage arrays.

no_path_retry

A numeric value for this
attribute specifies the number of times the system should attempt to use a
failed path before disabling queueing.

A value of fail indicates immediate
failure, without queueing.

A value of queue indicates that queueing
should not stop until the path is fixed.

rr_min_io

Specifies the number of I/O
requests to route to a path before switching to the next path in the current
path group. This setting is only for systems running kernels older that
2.6.31. Newer systems should userr_min_io_rq.
The default value is 1000.

rr_min_io_rq

Specifies the number of I/O
requests to route to a path before switching to the next path in the current
path group, using request-based device-mapper-multipath. This setting should
be used on systems running current kernels. On systems running kernels older
than 2.6.31, use rr_min_io.
The default value is 1.

rr_weight

If set to priorities, then instead of
sending rr_min_iorequests to
a path before calling path_selector to
choose the next path, the number of requests to send is determined byrr_min_io times the path's
priority, as determined by theprio function.
If set to uniform, all path
weights are equal.

flush_on_last_del

If set to yes, then multipath will disable
queueing when the last path to a device has been deleted.

在我本地的一个完整的高级配置如下:

[root@liujing ~]#
vi /etc/multipath.conf

blacklist {

devnode
"^sda"

}

multipaths {

multipath {

wwid       360a98000646650724434697454546156

alias      mpathb_fcoe

path_grouping_policy    multibus

#path_checker            "directio"

prio                    "random"

path_selector           "round-robin
0"

}

}

devices {

device {

vendor     "NETAPP"

product    "LUN"

getuid_callout       "/lib/udev/scsi_id
--whitelisted --device=/dev/%n"

#path_checker    "directio"

#path_selector             "round-robin
0"

failback             immediate

no_path_retry fail

}

}

其中 wwid,vendor,product, getuid_callout这些参数可以通过:multipath -v3命令来获取。如果在/etc/multipath.conf中有设定各wwid 别名,别名会覆盖此设定。

四、负载均衡测试:

可以使用dd命令来对设备进行读写操作,并同时通过iostat来查看I/0状态,流量从哪个路径出去:

DD命令:dd if=/dev/zero of=/mnt/1Gfile bs=8k
count=131072    在上面我们已经把磁盘挂载在/MNT文件夹下所以我们在读写磁盘时直接对/mnt文件夹直接读写就可以了。

如果想对磁盘重复读写可以用如下语句:

[root@liujing ~]#
for ((i=1;i<=5;i++));do dd if=/dev/zero of=/mnt/1Gfile bs=8k count=131072
2>&1|grep MB;done; ---重复读写5次这个值可以根据自己测试需求修改。

另一个控制台输入iostat
2 10查看IO读写状态:

可以看到sdc和sdd是两个多路径的盘符,流量均匀的负载在两条路径中,负载均衡很成功。

五、路径冗余备份测试

将其中一条路径的端口down掉,所有流量会直接切换到另一个路径中。

Linux下多路径multipath配置的更多相关文章

  1. Linux下多路径multipath配置【转】

    一.multipath在redhat 6.2中的基本配置: 1. 通过命令:lsmod |grep dm_multipath  检查是否正常安装成功.如果没有输出说明没有安装那么通过yum功能安装一下 ...

  2. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  3. linux下Java环境的配置

    linux下Java环境的配置 现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java ...

  4. Linux下SVN服务器搭建配置

    Linux下SVN服务器搭建配置 1.SVN服务安装 yum install subversion 2.创建SVN代码仓库 mkdir /data/svn svnadmin create /data/ ...

  5. Linux 下 Memcached 缓存服务器安装配置

    Linux 下 Memcached 缓存服务器安装配置 [日期:2011-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]   [安装Memcache服务器端]我目前的平台 ...

  6. Linux下MySQL安装及配置

    Linux下MySQL安装及配置 安装MySQL Ubuntu系统中,直接使用apt install的方式去安装MySQL的服务端和客户端,MySQL的客户端必须安装,否则无法通过命令连接并操作MyS ...

  7. Linux下Kafka单机安装配置方法

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topi ...

  8. linux下jdk环境变量配置深度分析----解决环境变量不生效的问题

    1.linux下jdk环境变量配置 是否需要配置环境变量,主要看java -version 显示的版本是否为你期望的版本 1.1 不需要配置环境变量的情况 使用java -version查看,版本显示 ...

  9. 分享:linux下apache服务器的配置和管理

    linux下apache服务器的配置和管理. 一.两个重要目录: Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式: Apac ...

随机推荐

  1. hdu 3579 Hello Kiki (中国剩余定理)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. Eclipse创建Maven时提示错误could not resolve archetype

    今天用Eclipse创建Maven多模块项目的时候提示错误: could not resolve archetype ******release from any of the configured ...

  3. ww

    #!bin/python #coding=utf-8 """ Create by he """ import sys import re i ...

  4. 部分MP4在谷歌浏览器上无法播放

    Chrome浏览器支持HTML5,它支持原生播放部分的MP4格式(不用通过Flash等插件). 为什么是部分MP4呢?MP4有非常复杂的含义(见http://en.wikipedia.org/wiki ...

  5. Cookie的Secure属性

    基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie ...

  6. 問題排查:DataGridView 資料行下拉選單,資料繫結階段顯示 DataGridViewComboBoxCell 值無效

    可能原因: 1.下拉選單的選項資料繫結晚於 DataGridView 的資料繫結 2.下拉選單的 DataPropertyName 屬性,比 DisplayMember.ValueMember 早賦值 ...

  7. WinForm 使用 HttpUtility

    在 Visual C# 中使用 HttpUtility 是无效的,即使添加了命名空间 System.Web,是因为需要在引用中添加 System.Web.dll. 可是没有 System.Web.dl ...

  8. 集合类List,set,Map 的遍历方法,用法和区别

    遍历list: 方法一: for(String s:lists){ System.out.println(s); } 方法二: System.out.println("list with i ...

  9. ip地址合法性

    /* * Java语法上正则化表达式的使用技巧,对于'.'要用'\\.' (2)注意空字符串“”和null的区别,判断一个字符串是不是空字符串用.equals("") * (1,判 ...

  10. web测试方法总结

    链接地址:http://www.cnblogs.com/Jessy/p/3539638.html 一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~ ...