免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2904 | 回复: 0

multipath & gfs调优手札 [复制链接]

论坛徽章:
0
发表于 2008-08-08 14:49 |显示全部楼层
写得比较流水账,大家莫见怪,:)

=================================

还真是无需求不前进了!

M哥发来需求要我看看以前在前前公司摆弄的Global Filesystem为何性能如此底下以至于不及老迈的NFS。M哥的忙怎么不帮,虽然不知能否帮得到,先答应下来回去看文档。

丢了差不多一年的这个GFS,先把以前写的文档(非官方那种,官方总是带有推销性质的)翻了一遍,总算找了点感觉回来。M哥提出是否multipath的问题,于是先从此方向着手。

multipath全名叫device-mapper-multipath,顾名思义,设备映射、多条路径,在现实环境中往往是SAN架构中的一个block设备,通过多个HBA卡和多台SAN交换机后,被主机访问到时呈现出多条路径,其实这多条路径指向的是同一个物理设备。multipath的工作就是把多个路径映射成一个单一的路径,在主机看来就只有一个块设备。multipath还掌管主机对该设备的访问细节,比如是以负载均衡还是failover方式访问,请求方式是round-robin还是其他,以及底层设备的基础。

鉴于我这里无真实环境,遂用虚拟机vware来实现。我现在的需求是,模拟出一个物理设备在主机方来看是有多条路径的,即/dev/sdc、/dev/sdd、/dev/sde之类的都指向同一个设备。首先想到的是在虚拟机里把同一个硬盘添加几次,但5秒钟后vmware告诉我不行。也是,vmware添加硬盘是通过总线方式的,而一块硬盘是如何也不能接到两个总线的接口上的。

然后,想到了一个iscsi的方式。因为以前接触过一些iscsi的概念。所谓iscsi,即Internet scsi总线技术,它的原理是把scsi协议封装在ip包里,通过tcp/ip协议传输到对端机器,从而让ip网络上的机器能以scsi总线的方式访问到某台服务器的本地磁盘。到这一想,哎,有门路了,因为我即使同一个本地硬盘,而我ip链路可以有很多的嘛。

想到马上干,驱猫上网找RHEL下的iscsi模拟软件,找到一个套装,iscsitarget(server site)+iscsi-initialator(client site,RHEL 5自带)。因为是基于RHEL 5 os系统,当然是找兼容性早已做好了的el5.rpm包了。iscsitarget的依赖性依然需要自己解决。initialator的不用。以前最怕的就是解决rpm包的依赖性,现在发现一个非常好的网站,rpm.pbone.net,它可以帮你找到比如缺少了什么库.so文件具体位于哪一个rpm包,并且会给出相应平台的rpm包(如果有)。依赖性解决,rpm安装无误。具体怎么装就不说了,模拟multipath的原理是这样的。首先iscsitarget释放出两个target,名字一样,但是id不同,重要的是ScsiId这个必须一致(以0x86开头的字符串),这样在客户端看来才是同一个block设备。

ok,客户端既然看到了两个路径/dev/sdb、/dev/sdc,那么,继续,装multpath,RHEL 5自带。相关进程启动后(当然multipath.conf要配置),multipath -ll看到已经map到一个路径例如/dev/dm-0的设备。接下来就在这个dm-0上mkfs,mount,然后进行常规测试比如dd。边测边调,最后发现一个比较好的值,rr_min_io 5000,在该值下基本达到了直接写物理磁盘的极限了。doc上说rr_min_io的值为切换到下一条路径前执行的io次数,线上环境的值为100次,显然是有点小了,这样会导致multipath在大量小io读写操作是频繁切换路径,造成不必要的开销。

multipath的问题基本解决,是参数配置问题。

接下来看一下GFS方面,是否有得调。模拟真实环境,在iscsitarget端释放出两个物理磁盘(当然,vmware下的物理磁盘而已,不是真的disk),然后分别两台client段装multipath,装rhcs+gfs套件。gfs这些不打算再写怎么装了,RHEL 5在这方面做得很好了,没有以前那么麻烦,所有的包在安装盘里都有,依赖性可以通过建立cdrom上rpm包的yum仓库来解决。

gfs的配置是拷贝了线上的,很简单,两个node,手动fence,资源啊什么的都不用设置。

通过iscsitarget释放出的两个磁盘,4个target,两个target对应一个磁盘,这样在客户端看来就是有4块设备了,通过multipath一整合,刚好/dev/dm-1、/dev/dm-2,这里不是从0开始了,估计是multipath在系统里残留了些东西吧,不去深究。

启动cman,启动clvmd即可,不需要在启动gfs/gfs2(这两个是用来检查fstab里是否有gfs挂载点的,和netfs用途一样),不需要启动rgmanager(这个是用来管理集群资源的,gfs不属于集群的资源,而是专门的集群,叫存储集群,这个在rhcs overview里已经明确的定义了)。这里需要在两台node执行。

接下来就是创建pv,vg,创建一个条带化的lv(参数 -i 2),只需要在一台node执行即可,另一台node已经功过rhcs提供的基本集群功能和clvmd进程获得了相关信息,可以用xxdispay来看相关lvm的东西。然后mkfs.gfs,也是只需要在一台node。

最后两台node都mount.gfs即可(当然,mount还有参数)。

正如线上,df,ls -R都很慢。上网查看gfs相关的更新,看到gfs2针对gfs进行了很多bugfix,于是在测试完一遍gfs后,改成gfs2方式再进行测试。顺便也在iscsitarget那台机export了一个本地目录,结果gfs2和nfs测试结果表面,gfs2确实有改进!赞一个。

关于改进了些啥,以及一下相关的技术细节,这里不详谈。有兴趣去redhat.com上去搜gfs2吧。

至此,自认为基本可以进行下一步的线上改造了,当然,在改造前还需对rhcs+gfs的doc进行更深入的了解。这个我就不去参与了,哈哈,顾问一下是可以的。

总结:gfs当初上线太急,当然也因为它优势明显。后期还需进行大量的文档阅读和测试工作,才能把rhcs+gfs这东西玩好,总之,rhcs是一个好东西,业界基本的集中集群类型都能在其基础上搭建。对于一些比较care cost-effective的场合来说再合适不过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP