如何用现有系统创建NAS服务器单独的网络附加存储服务器向多种多样的客户机提供文件级的存储,实现共享的存储。
本文介绍网络附加存储设备(网络附加存储服务器)的基本原理和如何利用现有系统创建一台网络附加存储服务器。
戴尔高性能计算企业技术专家Jeff Layton说,你经常需要共享的存储、通用的文件系统或者这种能力让客户(甚至是多种多样的客户)之间轻松地共享数据。
理想的情况是你有符合标准的设备,这样,你就可以同Linux、BSD、OSX或者Windows系统共享数据。
幸运的是有用于共享存储的标准:网络文件系统(NFS)。
事实上,它只是一个标准的文件系统,是创建目前广泛应用的网络附加存储(NAS)设备的一个推动因素。
本文简要介绍NFS和NAS设备并且提供在你目前可能拥有的任何服务器上运行NFS的简单步骤。
由于NFS是这个事情的推动因素,我们首先评估一下NFS。
NFSNFS是第一个广泛应用的允许分布式系统有效地共享数据的文件系统。
事实上,它是唯一的能够承受重复的标准的网络文件系统。
实际上,NFS是随着每一个*nix 发布版提供的,你还可以得到诸如Windows等其它操作系统的客户端软件。
NFS基本上允许你使用配置一些附加存储的服务器,并且“导出”这些附加存储或者与一群客户共享这些存储。
这些客户随后能够都可以访问同一个文件系统和共享数据。
这台服务器上的存储实际上是与客户共享文件,而不是像在SAN(存储局域网)中那样仅提供原始数据存储器。
这意味着那台服务器上的存储必须使用ext3、ext4、xfs、jfs、reiserfs等文件系统中的一个文件系统进行格式化。
NFS是一个很容易执行的协议。
所有的信息、数据和元数据都经过一个文件服务器。
这通常是指下面图1显示的一种“带内”数据流模式。
注意,文件服务器接触和管理所有的数据和元数据。
这种模式使存储系统更容易配置和监视,因为你仅担心一个系统。
此外,它有一个窄的定义良好的故障模式。
这种架构的确定包括一个明显的性能瓶颈,负载均衡问题,而且安全是这个服务器节点的一个功能,而不是这个协议。
NFS中的一般的数据流是非常简单的。
当一个客户机向它已经“安装”的一个NFS文件系统提出一个文件请求的时候,这个安装的守护程序把这个请求转发到NFS服务器,然后这个NFS服务器访问在本地文件系统中的文件。
这个数据从NFS服务器传送到那个请求节点,一般使用TCP协议。
请注意,那个NFS是基于文件的。
那就是说,当提出一个数据请求的时候,它是提出的一个文件的请求,不是数据块或者一个字节范围的请求。
这是我们说NFS是一个基于文件的协议的原因。
要了解更详细的NFS的工作原理,下面的图显示了NFS的堆栈布局NFS协议栈在上边这部分(粉色的)是客户机,它有一个应用程序提出一个传送到系统调用接口的I/O请求。
如果这个文件系统是基于NFS的,那么,这个请求通过这个网络传送到服务器(中间的蓝色部分标记为“服务器”)。
这个请求发送到这个文件系统的用户组件,然后这个文件系统与这个文件系统的存储组件沟通。
请注意,在右侧标记为“NVRAM”的方框是一个可选的组件,一些厂商用来通过一个缓存加快运行。
最后,这台服务器与这个存储设备上管理的块的扇区/LBA(逻辑块地址)联络,然后这个存储设备从缓存或者硬盘的盘片中提取数据。
接下来,这个数据传回到客户机应用程序的栈。
对于这个客户机应用程序来说,这个文件系统的行为和外观就像本地文件系统一样。
要让人们更好地理解NFS还有更多的工作要做,但是,本文的重点是讨论利用现有的设备和制作一个NAS设备。
下一节讨论如何在一台服务器上“启用”NFS,有效地创建一个NAS设备。
网络上有许多介绍关于配置和开始应用NFS的方法。
因此,本文仅是一个简单的总结,而不是一个全面的操作方法(也就是说省略了一些细节)。
启动NFS为了更好地解释在一台现有的服务器上设置NFS的步骤,我将使用一台我在以前的文章中使用过的服务器。
本文中使用的这个服务器测试系统的要点是:•CentOS 5.4操作系统•技嘉MAA78GM-US2H主板•一个AMD Phenom II X4 920处理器•8GB内存(DDR2-800)•Linux 2.6.30内核(只有reiser4补丁)•操作系统和启动盘在一个IBM DTLA-307020硬盘上(在Ultra ATA/100接口上的20GB 硬盘)•/home在一个希捷ST1360827AS硬盘上•有两个硬盘用于测试。
它们是希捷ST3500641AS-RK硬盘,每个硬盘有16MB缓存。
它们分别是/dev/sdb和/dev/sdc。
对于这个文件系统,仅使用了第一个希捷硬盘/dev/sdb。
这个硬盘在这个案例中是ext4。
第二个硬盘/dev/sdc用于这个文件系统的日志部分。
这个硬盘分区为正确的尺寸并且只有那个分区用作日志(/dev/sdc1)。
利用现有的服务器创建一个NAS设备的第一步就是设置和启动NFS。
我假设你已经在你的系统中安装了NFS,包括NFS服务器组件。
检查NFS 是否已经安装在这台服务器上的一种方法是检查是否存在“/etc/exports”文件(这个文件也许没有任何内容,但是,这个文件应该存在)。
此外,在CentOS或者RHEL平台上,你还可以通过查看“/usr/sbin/rpc.nfsd”这个文件检查这个NFS服务器是否安装了。
[laytonjb@test64 ]$ ls -s /usr/sbin/rpc.nfsd20 /usr/sbin/rpc.nfsd对于基于rpm(每分钟转速)的系统,你还可以试试下面的方法:[laytonjb@home8 ]{$selection}nbsp;rpm -qa | grep -i nfssystem-config-nfs-1.2.8-1 nfs-utils-1.0.6-46(这是一个老式的CentOS 4.1系统,因此许多数字与比较新的东西是不匹配的)。
在这点上,让我们假设NFS的服务器组件已经安装了。
一般来说,我下一步是启动这台服务器上的NFS。
检查NFS是否运行的一个简便的方法是使用这个命令“rpcinfo -p”,这个命令报告这个系统上的RPC(远程程序调用)信息。
如果NFS服务器还没有启动,你将看到类似于如下的信息:[root@test64 ]# /usr/sbin/rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 774 status100024 1 tcp777 status在这个输出中最重要的事情是这个“portmapper”(端口映射程序)正在运行,它是NFS的一个重要部分。
如果你在这个列表中没有看到“portmapper”,请阅读如何让它运行的说明书。
要启动NFS服务器,或者NFS的服务器部分,在某种程度上取决于你的操作系统发布版。
在这个测试的CentOS系统上,这是通过执行下列指令完成的。
[root@test64 ]# /etc/init.d/nfs start然后,我们再一次运行“rpcinfo -p”,看看NFS是否启动。
[root@test64 ]# /usr/sbin/rpcinfo -p program vers proto port 100000 2 tcp111 portmapper 100000 2 udp111 portmapper 100024 1 udp 774 status100024 1 tcp 777 status 100011 1 udp645 rquotad 100011 2 udp 645 rquotad100011 1 tcp 648 rquotad 100011 2 tcp 648 rquotad 100003 2 udp 2049 nfs 1000033 udp 2049 nfs 1000034 udp 2049 nfs 100021 1 udp 42049 nlockmgr 100021 3 udp 42049 nlockmgr 100021 4 udp 42049 nlockmgr100021 1 tcp54256 nlockmgr 100021 3 tcp 54256 nlockmgr 100021 4 tcp 54256 nlockmgr100003 2 tcp 2049 nfs 100003 3 tcp2049 nfs 100003 4 tcp 2049 nfs 1000051 udp 669 mountd 100005 1 tcp 672 mountd 100005 2 udp 669 mountd 1000052 tcp 672 mountd 1000053 udp 669 mountd 100005 3 tcp672 mountd注意,你看到NFS列表,看到NFS v2、NFS v3和NFS v4启动了(看第二栏)。
还要注意,用于NFS的UDP和TCP协议也列出了。
NFS运行需要一些守护程序。
“/etc/init.d/nfs”脚本为我们启动一切程序。
但是,一般来说,我们需要的守护程序是:rpc.nfsd (服务器)rpc.lockd (对于服务器和客户机都是常见的)rpc.statd (对于服务器和客户机都是常见的)rpc.mountd (对于服务器和客户机都是常见的)rpc.rquotad (服务器)输出数据下一步是告诉NFS服务器什么目录能够与其它系统(客户机)共享。
在NFS的词汇中,这叫作“输出”目录,具体的目录叫作“输出”。
现在,NFS启动了,让我们设置它以便把目录输出到服务器。
要做这个事情,我们通过定义要输出的目录来编辑这个“/etc/exports”文件及其属性。
“/etc/exports ”文件中的典型的输入内容如下:directory machine1(option11,option12) machine2(option21,option22)在这里:•目录(directory)是你要输出到客户机的服务器目录。
它可以是一个目录或者一个整个的硬盘。
然而,它必须用一个文件系统进行格式化。
“/etc/exports”文件中的每一行都是一个单独的目录。
•machine1、machine2是你希望与其共享数据的客户机的名字。
例如,它们的列表可以使用client1或者client2等系统的名字(要保证客户机在/etc/hosts目录中列出或者通过NIS列出),或者使用IP地址列出,如192.168.1.8。
你还可以使用通配符“*”来代表任何客户机。