|
用开源软件建立一个经济型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按钮,将会显示如下图所示的一个对话框。
【责任编辑:布丁 TEL:(010)68476606】 责编: 微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友 著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。 |
最新专题 |
|