利用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上 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 ~]#service NetworkManager stop [root@linux ~]#chkconfig NetworkManager off (2)关闭防火墙[root@linux ~]# iptables ?F [root@linux ~]#chkconfig iptables off (3)关闭Selinux[root@linux ~]# vi /etc/selinux/config 将文件中的:SELINUX=enforcing 改为:SELINUX= disabled 存盘退出。 (4)添加网卡将虚拟机关闭后,添加一块网卡,绑定到VMnet10,如下图所示 点击“确定”,然后重启服务器。执行如下命令:
[root@ linux ~]#ifconfig ?a 可见,系统已经识别到两块网卡。 进入/etc/sysconfig/network-scripts/目录: [root@linux~]# cd /etc/sysconfig/network-scripts [root@linux ~]# ls 如下图所示: 除了第一块网卡,并没有其他网卡的配置文件,需要手工创建: [root@linux ~]# cd/etc/sysconfig/network-scripts [root@linux network-scripts]#cp ifcfg-eth0 ifcfg-eth1 修改新创建的配置文件中的IP地址、MAC地址和UUID以及其他网络参数 那么如何获得eth1的MAC地址和UUID呢? [root@linux network-scripts]# ifconfig eth1 从中可以得到MAC地址,另外执行下面命令,可以新生成一个UUID [root@linux network-scripts] uuidgen 4d487f45-4d27-4663-a93f-71903608a8bd 开始编辑ifcfg-eth1文件 [root@rac-1 network-scripts]# vi ifcfg-eth1 修改后的结果如下所示: 存盘退出后,重启网路服务 [root@rac-1 network-scripts]# service network restart 再此查看网卡信息: 可见两块网卡工作都正常。 2.安装所需的软件(1)安装iSCSI探测器[root@linux~]# yum -y install iscsi-initiator-utils (2)安装multipath软件包:[root@linux ~]#yum -y installdevice-mapper [root@linux ~]# yum -y install device-mapper-multipath
(3)启动mutipath服务
[root@linux ~]# servicemultipathd start Starting multipathd daemon:[OK] [root@linux ~]# chkconfigmultipathd on 二、配置OpenFiler服务器1.安装Openfiler服务器Openfiler软件可以从http://www.openfiler.com/community/download下载,它是一个包含linux系统的安装光盘,最新版本是2.99。在VM9中创建新虚拟机,具体过程省略 2.添加iSCSI磁盘首先将openfiler服务器关机,然后编辑stor属性,如下图所示: 单击“Add”,弹出窗口如下图所示: 选择“Hard Disk”,然后单击“Next”,如下图所示: 选择“Create a new virtual disk” 然后单击“Next”,如下图所示: 在“Virtual disk type”中选择“SCSI(Recommanded)”, 在Mode中选择“Independent”以及“Persistent” 然后单击“Next”,如下图所示: 磁盘大小设为30G,勾选“All all disk space now”,并选择“Storevirtual disk as a single file”, 然后单击“Next”,如下图所示: 单击“Finish”完成磁盘添加工作 3.配置Openfiler服务器在宿主机的浏览器中输入: https://192.168.137.50:446 即可访问并配置Openfile,如下图所示: (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”,进入原始设备配置界面,如下图所示: 单击图片下方中的链接“create new physical volumes.”,如下图所示: 可以看出,/dev/sda是opefiler服务器的系统盘,/dev/sdb是我们计划用来为RAC服务的iSCSI磁盘。 单击“/dev/sdb”链接,如下图所示: 单击“Create”,创建iSCSI磁盘,如下图所示: 到此,原始设备的配置完成,下面开始为iSCSI配置卷组 (3)配置iSCSI卷组卷组的作用是把几个物理硬盘组合成一个逻辑大硬盘。 单击右侧菜单中的“VolumnGroup”,如下图所示 在“Volumn groupname”中输入:rac-shared-disk 并勾选“/dev/sdb” 然后单击“Add VolumnGroup”,创建完成后,结果如下所示: (4)配置iSCSI逻辑卷上一步创建了逻辑硬盘后,对这个硬盘进行分区,就是我们所说的创建逻辑卷 Openfiler对磁盘的管理与Linux的LVM概念类似,在卷组上还需要创建一个或多个逻辑卷,系统才能使用。 单击右侧菜单中的“AddVolumn”,如下图所示: 在”Volume Name”中输入:ocrvdisk1 在“Volumn Space”中输入:5000 “FileSystem/VolumnType”选择::Block(iSCSI、FC) 然后单击“Create”,创建一个逻辑卷。如下图所示: 重复上面的步骤,继续增加下面的逻辑卷: 名字:ocrvdisk2大小:14000M,类型:Block(iSCSI、FC) 注意不要将所有磁盘空间用完,最好保留一点。 创建完成后,单击右侧菜单中的”ManagerVolumn“可以查看所有逻辑卷,如下图所示: (5)创建iSCSI Target逻辑卷创建后,数据库服务器是无法直接将逻辑卷挂载到本地,需要通过iSCSI探测器探测Openfiler服务器上的iSCSI Target设备后,才能挂载。 注意:每个逻辑卷都需要创建一个iSCSI Target 下面开始创建iSCSITarget。 在openfiler的菜单上,单击”Services“,如下图所示: 目前iSCSI Target状态是未启动,系统引导时不自动启动。 单击iSCSI Target的”Enable“和”start“,启动iSCSITarget服务,同时设置为引导时自动启动。 然后单击菜单中的”Volumn“,在右侧选择”iSCSI Target“,如下图所示 为了便于识别,我喜欢用更具含义的字串来替换这个默认目标 IQN 最后一段。对于第一个 iSCSI 目标(ocrvdisk1),我将这样来修改默认的目标 IQN:将字符串“tsn.ddd42559ac4f”替换为“ocrvdisk1”,然后单击”Add“,添加一个iSCSI Target,如下图所示: 增加iSCSI Target后的界面如下所示 (6)磁盘映射到iSCSI Target需要将9.3.4中创建的逻辑磁盘ocrvdisk1映射到iSCSI Target上。 单击上图中的”LUNMapping“,然后点击ocrvdisk逻辑盘后面的”Map“按钮 单击“Network ACL“,如下图所示 修改“Access“的值为”Allow“,然后单击“Update” 重复上面的步骤,继续创建另一个iSCSITarget,并将剩下的逻辑磁盘映射到iSCSI Target上。并将Target的Network ACL都设为Allow 至此完成了iSCSI的搭建工作。 三、挂载iSCSI存储(1)查看iSCSI存储在测试服务器上,执行下面命令探测Openfiler服务器的iSCSI Target
[root@linux init.d]# iscsiadm -m discovery-t sendtargets -p 192.168.137.50:3260 返回如下内容: 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磁盘根据上面探测的结果,执行下面命令,挂载共享磁盘:
[root@linux ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:ocrvdisk1 -p192.168.137.50 -l iqn.2006-01.com.openfiler:ocrvdisk1是步骤1探测iscsi target返回的结果 返回信息如下: Loggingin to [iface: default,target: iqn.2006-01.com.openfiler:ocrvdisk1,portal:192.168.137.50,3260] (multiple) Login to[iface: default,3260] successful. 显示挂载成功 重复上面的步骤,将第二块共享磁盘都挂载到本地。 (3)查看挂载的iSCSI磁盘[root@linux ~]#lsblk NAMEMAJ:MIN RMSIZE RO TYPE MOUNTPOINT sr011:014.1G0 rom sda8:0040G0 disk ?..sda18:10200M0 part /boot ?..sda28:205.9G0 part [SWAP] ?..sda38:305.9G0 part /tmp ?..sda48:401K0 part ?..sda58:50 28.1G0 part / sdc8:3204.9G0 disk sdb8:1604.9G0 disk sdd8:480 13.7G0 disk sde8:640 13.7G0 disk 可以看出有四块磁盘被挂载到服务器上 四、配置multipath(1)启动multipath加载multipath模块: [root@linux ~]#modprobedm-multipath 启动multipath服务 [root@linux ~]#servicemultipathd start [root@linux ~]#chkconfigmultipathd on (2)查看磁盘的SCSI_ID本地磁盘的SCSI_ID [root@linux ~]#scsi_id-gud /dev/sda 36000c291dbf53ab43ebd016f89a85989 在三.3中看到有四个设备 /dev/sdb、/dev/sdc、/dev/sdd、/dev/sde,查看他们的SCSI_ID: [root@linuxdev]# scsi_id -gud /dev/sdb 14f504e46494c45524b46564346362d6b416e422d654b3154 [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。 mpathconf--enable (4)配置参数#建议user_friendly_names设为no。如果设定为 no,即指定该系统应使用WWID 作为该多路径的别名。如果将其设为 yes,系统使用文件 #/etc/multipath/mpathn 作为别名。 #当将 user_friendly_names 配置选项设为 yes 时,该多路径设备的名称对于一个节点来说是唯一的,但不保证对使用多路径设备的所有节点都一致。也就是说, 在节点一上的mpath1和节点二上的mpath1可能不是同一个LUN,但是各个服务器上看到的相同LUN的WWID都是一样的,所以不建议设为yes,而是设为#no,用WWID作为别名。 defaults { user_friendly_names no path_grouping_policy failover } #先将所有的设备列入到blacklist中,也就是说先使得所有设备不能聚合 blacklist { devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" devnode "^(hd|xvd|vd)[a-z]*" wwid "*" } # 将想要聚合的设备列入blacklist_exceptions. blacklist_exceptions{ wwid "14f504e46494c45526142456132662d396b6c792d55493975" wwid "14f504e46494c45524b46564346362d6b416e422d654b3154" } multipaths{ multipath { wwid"14f504e46494c45526142456132662d396b6c792d55493975" alias cvdisk2 # 由于是通过wwid来设置别名,所以在多节点情况下,各个节点的别名能够保持一致. } multipath { wwid"14f504e46494c45524b46564346362d6b416e422d654b3154" alias cvdisk1 } } 配置完成后,重启服务。 [root@linux~]#service multipathd restart (5)查看multipath工作模式[root@linuxetc]# multipath -ll cvdisk2(14f504e46494c45526142456132662d396b6c792d55493975) dm-1 OPNFILER,VIRTUAL-DISK size=14G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 6:0:0:0 sdd 8:48 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 5:0:0:0 sde8:64 active ready running cvdisk1(14f504e46494c45524b46564346362d6b416e422d654b3154) dm-0 OPNFILER,VIRTUAL-DISK size=4.9G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 3:0:0:0 sdb 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 4:0:0:0 sdc8:32 active ready running 从上可以看出每个LUN的两条路径,一个是ACTIVE,一个是ENABLED,表明此时multipath工作模式是主/备 将配置文件中的path_grouping_policyfailover改成 path_grouping_policymultibus 然后重启服务,再次观察,结果如下 [root@linuxetc]# multipath -ll cvdisk2 (14f504e46494c45526142456132662d396b6c792d55493975)dm-1 OPNFILER,VIRTUAL-DISK size=14G features='0' hwhandler='0' wp=rw `-+- policy='round-robin 0' prio=1 status=active |- 6:0:0:0 sdd8:48 active ready running `- 5:0:0:0 sde8:64 active ready running cvdisk1(14f504e46494c45524b46564346362d6b416e422d654b3154) dm-0 OPNFILER,VIRTUAL-DISK size=4.9G features='0' hwhandler='0' wp=rw `-+- policy='round-robin 0' prio=1 status=active |- 3:0:0:0 sdb8:16 active ready running `- 4:0:0:0 sdc8:32 active ready running 从上可以看出每个LUN的两条路径都是ACTIVE,表明此时multipath工作模式是主/主 (6)查看multipath设备别名工作模式[root@linuxetc]# .cd /dev [root@linuxdev]# cd mapper [root@linuxmapper]# ls controlcvdisk1cvdisk2 从上可见,在/dev/mapper中两个设备的名字是配置文件中设置的别名。 将配置文件中的aliascvdisk1、alias cvdisk2注释掉。 重启服务,再次观察: [root@linuxmapper]# ls 14f504e46494c45524b46564346362d6b416e422d654b3154control 14f504e46494c45526142456132662d396b6c792d55493975 此时设备名称变成了WWID名称。 (7)挂载multipath设备格式化多路径设备 fdisk /dev/mapper/cvdisk1 fdisk /dev/mapper/cvdisk2 创建文件系统 mkfs.ext4 /dev/mapper/cvdisk1 mkfs.ext4 /dev/mapper/cvdisk2 挂载 [root@linux /]# cd /mnt [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 五、挂载文件系统格式化设备 fdisk /dev/mapper/ cvdisk1 分区后在/dev/mapper下会生成一个新的设备cvdisk1p1 创建文件系统 mkfs.ext4 /dev/mapper/ cvdisk1p1 挂载设备 mount /dev/mapper/ cvdisk1p1 /u01 最后把挂载信息写入/etc/fstab,系统启动后自动挂载:
/dev/mapper/cvdisk1p1/u01ext4defaults0 0 执行df ?h 查看磁盘信息 六、multipath测试1.负载均衡测试使用dd命令来对设备进行写操作,并同时通过iostat来查看I/0状态,命令及输出如下: # dd if=/dev/zero of=/dev/mapper/cvdisk1 开启另外一个终端用以下命令查看IO情况 # iostat 1 通过上述输出,我们看到,在对/dev/mapper/cvdisk1读写时,实际上是通过对/dev/dm-1包含的当前active的所有设备,即/dev/sdd1,/dev/sde这2条路径来完成对实际的LUN的写过程。 2.冗余测试将服务器的一个网卡禁用,再继续上述测试过程: 此时看到有一个链路断开,处于faulty状态。 执行: # ddif=/dev/zero of=/dev/mapper/cvdisk1 开启另外一个终端用以下命令查看IO情况,大约2分钟后,可以看到sde在工作 将网卡恢复后,几秒钟恢复正常 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |