用开源软件建立一个经济型SAN

  作者:Amteam.org
2008/8/1 9:33:00
本文关键字: 存储 SAN

51CTO.com独家特稿】Simon Brock和Ian Wrigley使用现成的开源软件建立了一个使用iSCSI设备的SAN

近年来,存储区域网络或SAN受到许多人关注,但只有极少数人知道它究竟是什么,为什么想要建立一个SAN,一个最主要的原因是当你坐下来仔细看一看它的造价时,事情就明白了,本文会一一为你解答什么是SAN,你为什么想要建立一个,以及如何使用开源软件建立一个经济型的SAN。

根据你的IT背景不同,你可能会认为SAN是一个伟大的重新也可能会认为是一个很老的想法,但我们跳过历史因素认为SAN是一个新的创意,在普通PC中,任何东西都是安装在一个盒子(机箱)中的:如CPU,内存,硬盘。当你向其中添加硬盘时,可能会很困难,因此有人想出了在盒子(机箱)外面再放一个盒子来安放新添加的设备,硬盘盒子可能有它自身的一些功能,如通过某种类型的RAID控制器基于条带,镜像(或二者同时)实现弹性存储,如何将这个硬盘盒子附加到包括处理器的盒子就显得非常重要了。

SCSI就是一种可以实现这个任务的技术,它在短距离环境下工作得很好,但在长距离(长线缆)环境下就不行了,就是在这种情况下,光纤通道出现了,正好弥补SCSI技术的不足,说简单点就是:光纤通道使用的是光纤维发送SCSI命令而不是传统的电信号电缆,光纤通道也实现了类似以太网交换的交换技术,它允许多台PC同时与同一个硬盘盒子进行会话,或一台PC同时与多个硬盘盒子会话,此外,这些机器有多种途径从硬盘盒子获取数据(访问路径冗余),这就是SAN最基本的功能,SAN是通过光纤网络连接到硬盘盒子的机器集合,它的速度非常快,最初的第一代光纤通道就达到了1Gb/sec,目前已经出现了10Gb/sec的光纤通道产品。

咋一看,SAN并不是如传说中那么优秀,如果你的数据非常多,并且需要从多个不同的地方访问(实现冗余),搭建一个SAN拓扑是解决你的需求的一种办法,你必须要为此进行存储投资预算,而不是简单地分布式部署多台机器。

最近,部分厂家指出1Gb/sec产品会大幅降价,不过这种产品不是采用的的光纤通道技术,而是利用了1000Base T以太网技术,使用传统的铜缆作为传输介质,但为了让SCSI命令能在以太网上传输,需要寻找一种新的方法,以便SAN能在1000Base T上正常运转,于是iSCSI诞生了,它将所有SCSI命令都封装在ip包中进行传输,也就是说,如果你手上有一台机器并有一个支持iSCSI的硬盘盒子,那你现在就可以利用现有的以太网获得一个SAN,它允许你利用以太网和ip提供的所有特性对路线进行排序,并输出可选的路径,不用考虑光纤通道是如何完成转换的,这样iSCSI SAN就诞生了,目前大量厂家都开始支持iSCSI SAN,本文剩下的部分,我将向你介绍如何使用开源软件(大部分开源)搭建一个可靠的,有弹性的iSCSI SAN。


Initiator和target

在继续之前,我们先了解几个iSCSI术语,在iSCSI下,分两部分:initiator(需要数据的机器)和target(提供数据的机器),在基于光纤通道的SAN下,initiator是一台计算机,target是一个RAID阵列,但在我们的例子中,我们将要建立一个由两台PC组成的主--被动服务器对的iSCSI target,其中一台机器担任target处理来自initiator的iSCSI请求,然后将其磁盘镜像到另一台作为后备主机的机器是,如果活动主机失效,后备主机将接管并提供iSCSI服务,当主服务器修好后,重新同步后备机器的磁盘,并重新取回iSCSI服务权,这个任务非常艰巨,写本文时我都没有信心它是否能正常工作,可能会正常运转,我们试目以待吧!

为了实现这个计划,我们将使用两台一样的Dell 1U机架式服务器,用两个千兆以太网端口交叉连接,在这两台服务器上我们将安装一组开源软件,首先,我们需要安装一个操作系统,我们选择使用Linux,千万不要觉得惊奇,在各种发行版中我们选择了CentOS 4,它是基于Red Hat Enterprise Linux(RHEL)的社区企业级Linux发行版,如果你不想支付Red Hat的年度升级服务费用,但又想使用优秀的RHEL,那么CentOS就是你的首选,CentOS只是获取RHEL的源码,重新编译,重新进行打包并发布,因此你可以免费获取来自RHEL的优秀软件包,即使你不能获取Red Hat的升级服务,你也能进行升级。

最近,CentOS已经开始吸收额外的软件进入它自己的发行版,我们将使用到其中的两个,第一个是Heartbeat,它来自Linux高可用项目(http://www.linux-ha.org/),使用它我们可以实现主--被动服务器故障转移,正如它的名字暗示的那样,Heartbeat允许一组PC相互监视对方的活动(通过心跳信号),检测到‘死亡’信号就接管该节点的服务,第二个软件包是DRBD,它允许在两台机器之间共享一个块设备(通常是一个磁盘分区),使用该设备的机器就是主服务器,它对设备产生的任何更新都会传输给后备服务器,如果主服务器失效,后备服务器就成为主服务器,当失效的服务器修好后,重新同步当前的主服务器,然后接管资源提供服务,后备服务器重新成为后备。

在CentOS上安装这两个软件非常简单,输入命令‘yum groupinstall drbd-heartbeat’,然后将drbd安装为内核模块,用‘uname -r’获取操作系统的版本,在我们的系统上输出内容是‘2.6.9-22.0.1.ELsmp’,因此要将drbd安装为内核模块,只需要输入‘yum install kernel-module-drbd-2.6.9-22.0.1.ELsmp’。

剩下的就是安装iSCSI target软件本身了,在互联网上一搜会搜到一大把,但很多都是不能用的,我们选择了最近才创建的项目,叫做iSCSI Enterprise Target(http://iscsitarget.sourceforge.net/),但从其网站上的消息指出它不能在我们的CentOS 4上运行,因为至少需要2.6.13或更高的内核支持(我们的内核是2.6.9),然而,这是由Red Hat提供的内核,多少都经过特殊修改,Red Hat所有的软件包都倾向于从基层开始(这里是2.6.9),然后不停地打补丁,因此在2.6.9和以后的内核之间有差别,但已经被集成到Red Hat的内核中去了,在基于Wiki的文档上已经有如何在Red Hat上安装的记录了,按照这些命令在这两台机器上安装好target软件。


配置iSCSI

让我们从一个简单的情景开始,我们在一台只有一块硬盘的机器,通过iSCSI将其发布出去,所有配置都放在一个文件中,/etc/ietd.conf,编辑这个文件,包括下面三行内容:

IncomingUser joe secretsecret

这一行设置只允许一个用户访问(我们使用了12个字母的密码secretsecret,它在Windows下也能工作),下一行是:

Target iqn.2005-11.uk.co.widearea:storage2.diskc

这一行安装常规iSCSI规范命名了一个target,它由年-月,后面跟一个反向的域名和主机标识符组成,最后一行必须缩进:

Lun 0 Path=/dev/sdb,Type=fileio

这一行指出我们将要使用SCSI磁盘/dev/sdb作为iSCSI设备,然后我们在另一台机器上做类似的事情。

现在我们需要一个initiator,为了证明能跨平台运行,我们选择了Microsoft iSCSI initiator,boxout显示了它如何与iSCSI Enterprise Target一起工作,在我们的例子中,我们从每个机器上加载了在Windows机器上的iSCSI磁盘,我们将它们设为动态磁盘并加入镜像,在格式化和同步后,这样我们就在Windows机器上具有一个弹性的镜像,它是通过在Linux盒子上建立IP SAN实现的,如果其中一台机器消失了,镜像会中断,但Windows会继续向其他机器更新,当其他机器返回时,镜像可能已经修复,Windows将会进行磁盘同步,然而,最大的问题是Microsoft还不支持使用iSCSI作为动态磁盘,因此我们必须另觅它法。

首先我们要做的是要让DRBD运行起来,如果你参阅了预安装的/etc/drbd.conf文件,这会非常简单,需要做的是从这个文件中找到第一个有两个“on”标志的资源小节,它定义了如何将磁盘块设备整合到一起,需要提供机器名,ip地址和磁盘分区,然后将这个文件拷贝到两台机器上,运行/etc/init.d/drbd start,所有都会工作起来,文件/proc/drbd显示了探测到的东西和两台机器上的辅助、辅助状态的磁盘,当它正常工作起来后,其中一台机器就成为主服务器,另一台就成为后备机器,然而,最初会显示状态不一致,不允许你将某一台机器设为主服务器,第一次设备DRBD设备时,你需要告诉哪一台是主服务器,然后你才能在其上运行‘drbdadm’命令完成主服务器的设置,然后再看/proc/drbd时就会发现正在做同步操作。

现在DRBD设备已经运行起来了,需要修改/etc/ietd.conf,要将新设备/dev/drbd0包括进来,也就是前面谈到的/dev/sdb,然后启动iSCSI target,并在另一台机器上挂载。

如果一切工作正常,开始下一步工作,下一阶段就是安装Heartbeat软件,我们需要修改三个文件,/etc/ha.d目录下的Readme文件会告诉你在哪里去找例子,首先需要安装ha.cf文件,每台机器上都应该不一样,在这个文件中,我们需要添加‘node’行指出这两个节点的名字,并且还要一行‘ucast’指出其他机器的地址,然后我们需要安装authkeys文件,在这两台机器上这个文件应该一样,最后我们需要在这两台机器上安装haresources文件,它的内容如下:

machine1 10.0.0.46 drbddisk::r0 iscsi-target

这里的machine1是在ha.cf中定义的主服务器名,ip地址是对外提供服务的地址,它与普通的ip地址有点不一样,最后两项告诉Heartbeat软件使用drbd磁盘r0,并启动iscsi-target服务。

启动好Heartbeat和iscsi-target服务后,从Windows机器挂载新的卷,并格式化,拷贝一些文件看是否能正常工作,接下来干一件龌龊的事情,拷贝一个非常大的文件,然后将主服务器上的Heartbeat关闭,这时拷贝过程肯定会暂停,但当Windows重新发现ip地址后,又会恢复继续拷贝。

然后我们干点更具破坏性的操作,拔下主服务器的电源线,看它是否还会继续工作,正如预料之中的,Heartbeat会从主服务器将资源转移到后备服务器,Windows initiator看上去好像暂停了一下,但马上接着又继续拷贝直至结束,我不太相信在这种破坏环境下它还能工作得很好,于是我用MD5校验工具校验了放在iSCSI驱动器上的文件,结果报告与源文件的校验值一致,意味着它的确工作得很好,所有的数据块都被正确地传输过去了。

最后关于iSCSI target软件要注意的是它在Linux上的可用性:它允许你导出块设备,前面我们已经看到,包括raw磁盘,磁盘上的分区,仿真块设备等。在这个例子中,我们使用DRBD仿真块设备,当我们曾经从系统中导出过软RAID设备,在写本文的时候,开源解决方案还不支持导出字符设备,意味着你还不能导出磁带驱动器,即使iSCSI协议支持,目前只有一些商业解决方案支持导出字符设备。

我们使用开源软件建立起一套经济的SAN,也只接触到最基础的知识,SAN是什么,iSCSI是什么,但这是一个伟大的开始。


Windows上的iSCSI

在文章的前面部分,我们使用Linux作为服务器,Windows作为客户端,但我们认为多写几行文字来描述如何Windows上实现iSCSI也是值得的,可以从微软公司的存储网站http://www.microsoft.com/windowsserversystem/storage下载到Microsoft iSCSI initiator软件,安装它非常简单,安装后会有一个控制面板,从它可以访问到iSCSI服务器,假设你已经按照我前面说的方法安装了一台Linux服务器,打开控制面板,然后点击Discovery标签,然后点击Add按钮,将会显示如下图所示的一个对话框。



1、输入服务器或集群的ip地址,端口保持不变,然后点击Advanced按钮,显示




2、如果你没有看到输出设备,点Refresh,选择你想要的设备,然后点击Log On,显示



3、在General标签页,你需要开启CHAP登陆,并输入与ietd.conf中一样的登录名和密码,然后点两次Ok按钮回到控制面板,如果你的密码少于16个字符,会提示你,但这样还是能工作的,选择Target标签,显示



4、如果你打算每次重启系统都使用iSCSI卷,请选中'Automatically restore'选项,至此,你就拥有一个附加的磁盘了,在磁盘管理器中也能看到它,并可以当正常磁盘使用了,值得注意的是目前在Windows上iSCSI还不支持动态磁盘,它可以用于诸如exchange,sql server等应用程序。

【责任编辑:布丁 TEL:(010)68476606】


责编:
vsharing微信扫一扫实时了解行业动态
portalart微信扫一扫分享本文给好友

著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
最新专题
流动存储 为大数据而生

伴随信息技术的突飞猛进,更大量级的非结构化数据与结构化数据构成的大数据成为企业级存储所面临的最大挑战:一方..

磁盘阵列及虚拟化存储

利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。虚拟化存储,对存储硬件资源进行抽象化表现。

    畅享
    首页
    返回
    顶部
    ×
      信息化规划
      IT总包
      供应商选型
      IT监理
      开发维护外包
      评估维权
    客服电话
    400-698-9918
    Baidu
    map