利用multipath实现多路径聚合

文章目录

本文详细介绍如何利用Linux自带的Devicemapper multipathing (DM-Multipath)功能模拟多路径聚合。

当服务器可以通过多条路径访问LUN时,Linux系统会为每条路径创建一个SCSI设备,这就意味着,如果服务器有两条路径访问LUN时,这个LUN在服务器上可能会映射成/dev/sdd和 /dev/sdf两个设备。

为了解决这个问题,DM-Multipath会聚合所有路径,在/dev/mapper/ 为这个LUN下创建一个设备.例如,/dev/mapper/360a9800043346852563444717a513571就是聚合/dev/sddand /dev/sdf产生的多路径设备。

使用DM-Multipath后, 应该使用/dev/mapper/下的设备来创建文件系统,然后再挂载。

一、实验环境

1.网络拓扑

2.服务器环境

(1)测试服务器的环境

u一台Centos6.4服务器作为客户端,用于挂载iSCSI存储

u为了模拟多路径的环境,服务器配置了两块网卡,分别接在VMnet9和VMnet10上

u网络配置如下

eth0:192.168.137.100/24

eth1:172.16.1.2/24

(2)Openfiler iSCSI服务器环境

u增加一块30G的虚拟硬盘,模拟磁盘阵列

u增加一块网卡,模拟阵列的第二个控制器,两块网卡分别接在VMnet9和VMnet10上

u网络配置如下

eth0:192.168.137.50/255.255.255.0

eth1:172.16.1.1/255.255.255.0

二、配置测试服务器

服务器安装Centos 6.4的过程略过

1.配置测试服务器网络参数

(1)关闭NetworkManager

[root@linux ~]

#chkconfig NetworkManager off

(2)关闭防火墙

[root@linux ~]

#chkconfig iptables off

(3)关闭Selinux

将文件中的:SELINUX=enforcing

改为:SELINUX= disabled 

存盘退出。

(4)添加网卡

将虚拟机关闭后,添加一块网卡,绑定到VMnet10,如下图所示

利用multipath实现多路径聚合-来自沈超飞的IT博客 第1张

点击“确定”,然后重启服务器。执行如下命令:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第3张

可见,系统已经识别到两块网卡。

进入/etc/sysconfig/network-scripts/目录:

[root@linux ~]

# ls

如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第5张

除了第一块网卡,并没有其他网卡的配置文件,需要手工创建:

[root@linux network-scripts]

#cp ifcfg-eth0 ifcfg-eth1

修改新创建的配置文件中的IP地址、MAC地址和UUID以及其他网络参数

那么如何获得eth1的MAC地址和UUID呢?

利用multipath实现多路径聚合-来自沈超飞的IT博客 第7张

从中可以得到MAC地址,另外执行下面命令,可以新生成一个UUID

开始编辑ifcfg-eth1文件

修改后的结果如下所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第9张

存盘退出后,重启网路服务

利用multipath实现多路径聚合-来自沈超飞的IT博客 第11张

再此查看网卡信息:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第13张

可见两块网卡工作都正常。

2.安装所需的软件

(1)安装iSCSI探测器

(2)安装multipath软件包:

[root@linux ~]

# yum -y install device-mapper-multipath

(3)启动mutipath服务

[root@linux ~]

# chkconfigmultipathd on

二、配置OpenFiler服务器

1.安装Openfiler服务器

Openfiler软件可以从http://www.openfiler.com/community/download下载,它是一个包含linux系统的安装光盘,最新版本是2.99。在VM9中创建新虚拟机,具体过程省略

2.添加iSCSI磁盘

首先将openfiler服务器关机,然后编辑stor属性,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第15张

单击“Add”,弹出窗口如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第17张

选择“Hard Disk”,然后单击“Next”,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第19张

选择“Create a new virtual disk” 然后单击“Next”,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第21张

在“Virtual disk type”中选择“SCSI(Recommanded)”,

在Mode中选择“Independent”以及“Persistent”

然后单击“Next”,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第23张

磁盘大小设为30G,勾选“All all disk space now”,并选择“Storevirtual disk as a single file”, 然后单击“Next”,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第25张

单击“Finish”完成磁盘添加工作

3.配置Openfiler服务器

在宿主机的浏览器中输入:

https://192.168.137.50:446

即可访问并配置Openfile,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第27张

(1)配置允许访问的网络

单击菜单“system”,在Network Access Configuration中输入下面内容:

Name:SAN1

Network/Host:192.168.137.0

Netmask:255.255.255.0

Type:share

   上面的配置允许192.168.137.0网段的服务器可以访问iSCSI

然后单击“Update”保存修改。

(2)配置物理磁盘

可以理解成把物理硬盘格式化

单击菜单中的“Volumn”,进入原始设备配置界面,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第29张

单击图片下方中的链接“create new physical volumes.”,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第31张

可以看出,/dev/sda是opefiler服务器的系统盘,/dev/sdb是我们计划用来为RAC服务的iSCSI磁盘。

单击“/dev/sdb”链接,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第33张

单击“Create”,创建iSCSI磁盘,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第35张

到此,原始设备的配置完成,下面开始为iSCSI配置卷组

(3)配置iSCSI卷组

卷组的作用是把几个物理硬盘组合成一个逻辑大硬盘。

单击右侧菜单中的“VolumnGroup”,如下图所示

利用multipath实现多路径聚合-来自沈超飞的IT博客 第37张

在“Volumn groupname”中输入:rac-shared-disk

并勾选“/dev/sdb”

然后单击“Add VolumnGroup”,创建完成后,结果如下所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第39张

     (4)配置iSCSI逻辑卷

上一步创建了逻辑硬盘后,对这个硬盘进行分区,就是我们所说的创建逻辑卷

Openfiler对磁盘的管理与Linux的LVM概念类似,在卷组上还需要创建一个或多个逻辑卷,系统才能使用。

单击右侧菜单中的“AddVolumn”,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第41张

在”Volume Name”中输入:ocrvdisk1

在“Volumn Space”中输入:5000

“FileSystem/VolumnType”选择::Block(iSCSI、FC)

然后单击“Create”,创建一个逻辑卷。如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第43张

重复上面的步骤,继续增加下面的逻辑卷:

名字:ocrvdisk2大小:14000M,类型:Block(iSCSI、FC)

注意不要将所有磁盘空间用完,最好保留一点。

创建完成后,单击右侧菜单中的”ManagerVolumn“可以查看所有逻辑卷,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第45张

(5)创建iSCSI Target

逻辑卷创建后,数据库服务器是无法直接将逻辑卷挂载到本地,需要通过iSCSI探测器探测Openfiler服务器上的iSCSI Target设备后,才能挂载。

注意:每个逻辑卷都需要创建一个iSCSI Target

下面开始创建iSCSITarget。

在openfiler的菜单上,单击”Services“,如下图所示:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第47张

目前iSCSI Target状态是未启动,系统引导时不自动启动。

单击iSCSI Target的”Enable“和”start“,启动iSCSITarget服务,同时设置为引导时自动启动。

然后单击菜单中的”Volumn“,在右侧选择”iSCSI Target“,如下图所示

利用multipath实现多路径聚合-来自沈超飞的IT博客 第49张

为了便于识别,我喜欢用更具含义的字串来替换这个默认目标 IQN 最后一段。对于第一个 iSCSI 目标(ocrvdisk1),我将这样来修改默认的目标 IQN:将字符串“tsn.ddd42559ac4f”替换为“ocrvdisk1”,然后单击”Add“,添加一个iSCSI Target,如下图所示:

增加iSCSI Target后的界面如下所示

利用multipath实现多路径聚合-来自沈超飞的IT博客 第51张

(6)磁盘映射到iSCSI Target

需要将9.3.4中创建的逻辑磁盘ocrvdisk1映射到iSCSI Target上。

单击上图中的”LUNMapping“,然后点击ocrvdisk逻辑盘后面的”Map“按钮

利用multipath实现多路径聚合-来自沈超飞的IT博客 第53张

单击“Network ACL“,如下图所示

利用multipath实现多路径聚合-来自沈超飞的IT博客 第55张

修改“Access“的值为”Allow“,然后单击“Update”

重复上面的步骤,继续创建另一个iSCSITarget,并将剩下的逻辑磁盘映射到iSCSI Target上。并将Target的Network ACL都设为Allow

至此完成了iSCSI的搭建工作。

三、挂载iSCSI存储

(1)查看iSCSI存储

在测试服务器上,执行下面命令探测Openfiler服务器的iSCSI Target

   返回如下内容:

   192.168.137.50:3260,1 iqn.2006-01.com.openfiler:ocrvdisk2

   172.16.1.1:3260,1 iqn.2006-01.com.openfiler:ocrvdisk2

   192.168.137.50:3260,1 iqn.2006-01.com.openfiler:ocrvdisk1

   172.16.1.1:3260,1 iqn.2006-01.com.openfiler:ocrvdisk1

   表明iSCSI客户端已经正确识别到共享存储,

   在openfiler存储上配置的是两个盘,但是这里却显示了4块硬盘,这是有多路径造成的。

(2)挂载iSCSI磁盘

根据上面探测的结果,执行下面命令,挂载共享磁盘:

    iqn.2006-01.com.openfiler:ocrvdisk1是步骤1探测iscsi target返回的结果

  返回信息如下:

  显示挂载成功

重复上面的步骤,将第二块共享磁盘都挂载到本地。

(3)查看挂载的iSCSI磁盘

可以看出有四块磁盘被挂载到服务器上

四、配置multipath

(1)启动multipath

加载multipath模块:

启动multipath服务

[root@linux ~]

#chkconfigmultipathd on

(2)查看磁盘的SCSI_ID

本地磁盘的SCSI_ID

在三.3中看到有四个设备 /dev/sdb、/dev/sdc、/dev/sdd、/dev/sde,查看他们的SCSI_ID:

[root@linuxdev]

# scsi_id -gud /dev/sdc 14f504e46494c45524b46564346362d6b416e422d654b3154

[root@linuxdev]

# scsi_id -gud /dev/sdd 14f504e46494c45526142456132662d396b6c792d55493975

[root@linuxdev]

# scsi_id -gud /dev/sde 14f504e46494c45526142456132662d396b6c792d55493975

可见/dev/sdb和sdc的ID号一致,说明他们其实是一个LUN。sdd和sde的ID一致。

(3)配置文件的目录

      DM-Multipath的配置文件是 /etc/multipath.conf。
      如果/etc/multipath.conf 不存在,默认是所有设备都不会被聚合。
      在目录/usr/share/doc/device-mapper-multipath-0.4.9/ 下有一个简单的multipath.conf示例文件,可以拷贝到/etc下编辑使用
      如果/etc/multipath.conf文件不存在,可以使用以下命令创建multipath.conf文件:

(4)配置参数

#建议user_friendly_names设为no。如果设定为 no,即指定该系统应使用WWID 作为该多路径的别名。如果将其设为 yes,系统使用文件 #/etc/multipath/mpathn 作为别名。

#当将 user_friendly_names 配置选项设为 yes 时,该多路径设备的名称对于一个节点来说是唯一的,但不保证对使用多路径设备的所有节点都一致。也就是说,

在节点一上的mpath1和节点二上的mpath1可能不是同一个LUN,但是各个服务器上看到的相同LUN的WWID都是一样的,所以不建议设为yes,而是设为#no,用WWID作为别名。

   配置完成后,重启服务。

(5)查看multipath工作模式

从上可以看出每个LUN的两条路径,一个是ACTIVE,一个是ENABLED,表明此时multipath工作模式是主/备

将配置文件中的path_grouping_policyfailover改成

path_grouping_policymultibus

然后重启服务,再次观察,结果如下

从上可以看出每个LUN的两条路径都是ACTIVE,表明此时multipath工作模式是主/主

(6)查看multipath设备别名工作模式

[root@linuxdev]

# cd mapper

[root@linuxmapper]

# ls controlcvdisk1cvdisk2

从上可见,在/dev/mapper中两个设备的名字是配置文件中设置的别名。

将配置文件中的aliascvdisk1、alias cvdisk2注释掉。

重启服务,再次观察:

此时设备名称变成了WWID名称。

(7)挂载multipath设备

格式化多路径设备

创建文件系统

挂载

[root@linux /]

# mkdir cvdisk1

[root@linux /]

# mkdir cvdisk2 mount /dev/mapper/cvdisk1p1 ./cvdisk1 mount /dev/mapper/cvdisk2p1 ./cvdisk2

(8)multipath常用命令

multipath -v3 -d-ll

multipath -ll

卸载所有的LUN文件系统

清除DM-Multipathdevices : multipath -F

停止服务:servicemultipathd stop

五、挂载文件系统

格式化设备

分区后在/dev/mapper下会生成一个新的设备cvdisk1p1

创建文件系统

挂载设备

mount /dev/mapper/ cvdisk1p1 /u01

最后把挂载信息写入/etc/fstab,系统启动后自动挂载:

执行df –h 查看磁盘信息

六、multipath测试

1.负载均衡测试

使用dd命令来对设备进行写操作,并同时通过iostat来查看I/0状态,命令及输出如下:

开启另外一个终端用以下命令查看IO情况

利用multipath实现多路径聚合-来自沈超飞的IT博客 第57张

通过上述输出,我们看到,在对/dev/mapper/cvdisk1读写时,实际上是通过对/dev/dm-1包含的当前active的所有设备,即/dev/sdd1,/dev/sde这2条路径来完成对实际的LUN的写过程。

2.冗余测试

将服务器的一个网卡禁用,再继续上述测试过程:

利用multipath实现多路径聚合-来自沈超飞的IT博客 第59张

此时看到有一个链路断开,处于faulty状态。

执行:

开启另外一个终端用以下命令查看IO情况,大约2分钟后,可以看到sde在工作

利用multipath实现多路径聚合-来自沈超飞的IT博客 第61张

将网卡恢复后,几秒钟恢复正常

//下面这个css和插件后台设置的主题有关系,如果需要换样式,则需要修改以下CSS名称
分享到:

发表评论

昵称

沙发空缺中,还不快抢~