18.1 网络文件系统还是网络驱动器
做为服务器的系统通常是需要储存设备的,而储存设备除了可以使用系统内建的磁盘之外,如果内建的磁盘容量不够大, 而且也没有额外的磁盘插槽 (SATA 或 IDE) 可用时,那么常见解决的方案就是增加 NAS (网络附加储存服务器) 或外接式储存设备。再高档一点的系统,可能就会用到 SAN (储存局域网络) 这个高贵的玩意儿 (注1)。
不过,不论是哪一种架构,基本上,它们的内部硬盘通常是以磁盘阵列 (RAID) 作为基础的。磁盘阵列我们在基础篇第三版的第十五章谈过了,这里就不再啰唆。这里想要了解的是,啥是 NAS 又啥是 SAN ? 这两者有何不同?与本章主题有关的 iSCSI 又是啥呢?底下就让我们来谈一谈。
18.1.1 NAS 与 SAN
由于企业的数据量越来越大,而且重要性与保密性越来越高,尤其类似数据库的内容,常常容量单位是以 TB (1TB = 1024GB) 在进行计算的。哇!真可怕!所以啰,磁盘阵列的应用就很重要了。那么磁盘阵列通常是在哪里呢? 磁盘阵列通常是 (1)主机内部有磁盘阵列控制卡,可以自行管理磁盘阵列。不过想要提供磁盘阵列的容量, 得要透过额外的网络服务才行; (2)外接式磁盘阵列设备,就是单纯的磁盘阵列设备,必须透过某些接口链接到主机上, 主机也要安装适当的驱动程序后,才能捉到这个设备所提供的磁盘容量。
不过,以目前的信息社会来说,你应该很少听到内建或外接的 RAID 了,常常听到的应该是 NAS 与 SAN ,那这是啥咚咚? 让我们简单的来说说:
- NAS (Network Attached Storage, 网络附加储存服务器)
基本上,NAS 其实就是一部客制化好的主机了,只要将 NAS 连接上网络,那么在网络上面的其他主机就能够存取 NAS 上头的资料了。简单的说,NAS 就是一部 file server 啰~不过,NAS 由于也是接在网络上面,所以,如果网络上有某个用户大量存取 NAS 上头的数据时,是很容易造成网络停顿的问题的,这个比较麻烦点~低阶的 NAS 通常会使用 Linux 系统搭配软件磁盘阵列来提供大容量文件系统。不过效能嘛就有待加强啦!此外,NAS 也通常支持 TCP/IP ,并会提供 NFS, SAMBA, FTP 等常见的通讯协议来提供客户端取得文件系统。
那为什么不要直接使用个人计算机安装 Linux 再搭配相关的服务,即可提供 NAS 预计要提供的大容量空间啦!干嘛需要 NAS 呢? 因为,通常 NAS 还会包括很多组态的接口,通常是利用 Web 接口来控制磁盘阵列的设定状况、提供 IP 或其他相关网络设定, 以及是否提供某些特定的服务等等。因为具有较为亲和的操作与控制接口,对于非 IT 的人员来说,控管较为容易啦。 这也是 NAS 存在的目的。
不过,目前倒是有类似 FreeNAS 的软件开发项目 (http://sourceforge.net/projects/freenas/, 注2),可以让你的 Linux PC 变成一部可透过 Web 控管的 NAS 哩!不过不是本章的重点,有兴趣的朋友可以自行前往下载与安装该软件来玩玩~
- SAN (Storage Area Networks, 储存局域网络)
从上面的说明来看,其实那个 NAS 就是一部可以提供大容量文件系统的主机嘛! 那我们知道单部主机能够提供的插槽再怎么说也是有限的! 所以并不能无限制的安插磁盘在同一部实体主机上面。但是如果偏偏你就是有大量磁盘使用的需求,那时该如何是好? 这时就得要使用到 SAN 这玩意儿啦!
最简单的看法,就是将 SAN 视为一个外接式的储存设备。只是单纯的外接式储存设备仅能透过某些接口 (如 SCSI 或 eSATA) 提供单一部主机使用,而 SAN 却可以透过某些特殊的接口或信道来提供局域网络内的所有机器进行磁盘存取。要注意喔,SAN 是提供『磁盘 (block device)』给主机用,而不是像 NAS 提供的是『网络协议的文件系统 (NFS, SMB...)』!这两者的差异挺大的喔!因此,挂载使用 SAN 的主机会多出一个大磁盘,并可针对 SAN 提供的磁盘进行分割与格式化等动作。想想看,你能对 NAS 提供的文件系统格式化吗?不行吧!这样了解差异否?
另外,既然 SAN 可以提供磁盘,而 NAS 则是提供相关的网络文件系统,那么 NAS 能不能透过网络去使用 SAN 所提供的磁盘呢?答案当然是可以啊!因为 SAN 最大的目的就是在提供磁盘给服务器主机使用,NAS 也是一部完整的服务器, 所以 NAS 当然可以使用 SAN 啦!同时其他的网络服务器也能够使用这个 SAN 来进行数据存取。
此外,既然 SAN 开发的目的是要提供大量的磁盘给用户,那么传输的速度当然是非常重要的。因此,早期的 SAN 大多配合光纤信道 (Fibre Channel) 来提供高速的数据传输。目前标准的光纤信道是速度是 2GB ,未来还可能到达 10GB 以上呢~不过,使用光纤等技术较高的设备,当然就比较贵一些。
拜以太网络盛行,加上技术成熟之赐,现今的以太网络媒体 (网络卡、交换器、路由器等等设备) 已经可以达到 GB 的速度了,离 SAN 的光纤信道速度其实差异已经缩小很多啦~那么是否我们可以透过这个 GB 的以太网络接口来连接到 SAN 的设备呢?这就是我们接下来要提到的 iSCSI 架构啦! ^_^
18.1.2 iSCSI 界面
早期的企业使用的服务器若有大容量磁盘的需求时,通常是透过 SCSI 来串接 SCSI 磁盘,因此服务器上面必须要加装 SCSI 适配卡,而且这个 SCSI 是专属于该服务器的。后来这个外接式的 SCSI 设备被上述提到的 SAN 的架构所取代, 在 SAN 的标准架构下,虽然有很多的服务器可以对同一个 SAN 进行存取的动作,不过为了速度需求,通常使用的是光纤信道。 但是光纤信道就是贵嘛!不但设备贵,服务器上面也要有光纤接口,很麻烦~所以光纤的 SAN 在中小企业很难普及啊~
后来网络实在太普及,尤其是以 IP 封包为基础的 LAN 技术已经很成熟,再加上以太网络的速度越来越快, 所以就有厂商将 SAN 的连接方式改为利用 IP 技术来处理。然后再透过一些标准的订定,最后就得到 Internet SCSI (iSCSI) 这玩意的产生啦!iSCSI 主要是透过 TCP/IP 的技术,将储存设备端透过 iSCSI target (iSCSI 目标) 功能,做成可以提供磁盘的服务器端,再透过 iSCSI initiator (iSCSI 初始化用户) 功能,做成能够挂载使用 iSCSI target 的客户端,如此便能透过 iSCSI 协议来进行磁盘的应用了 (注3)。
也就是说,iSCSI 这个架构主要将储存装置与使用的主机分为两个部分,分别是:
iSCSI target:就是储存设备端,存放磁盘或 RAID 的设备,目前也能够将 Linux 主机仿真成 iSCSI target 了!目的在提供其他主机使用的『磁盘』;
iSCSI initiator:就是能够使用 target 的客户端,通常是服务器。 也就是说,想要连接到 iSCSI target 的服务器,也必须要安装 iSCSI initiator 的相关功能后才能够使用 iSCSI target 提供的磁盘就是了。
如下图所示,iSCSI 是在 TCP/IP 上面所开发出来的一套应用,所以得要有网络才行啊!
图 18.1-1、iSCSI 与 TCP/IP 相关性
18.1.3 各组件相关性
由上面的说明中,我们可以知道一部服务器如何取得磁盘或者是文件系统来利用呢?基本上就是:
- 直接存取 (direct-attached storage):例如本机上面的磁盘,就是直接存取设备;
- 透过储存局域网络 (SAN):来自区网内的其他储存设备提供的磁盘;
- 网络文件系统 (NAS):来自 NAS 提供的文件系统,只能立即使用,不可进行格式化。
这三个东西与服务器主机能用的文件系统之间可以用维基百科的图示来展示:
图 18.1-2、服务器取得文件系统的三个来源 (数据源为注1)
从上图中,我们可以发现在一般的主机环境下,磁盘装置 (SATA, SAS, FC) 可以透过主机的接口 (DAS) 来直接进行文件系统的建立 (mkfs 进行格式化),如果想要使用外部的磁盘,那可以透过 SAN (内含多个磁盘的设备),然后透过 iSCSI 等接口来联机, 当然,还是得要进行格式化等动作 (假设这个 SAN 尚未被使用时)。最后,如果是 NAS 的条件下,那么 NAS 必须要先透过自己的操作系统将磁盘装置进行文件系统的建立后,再以 NFS/CIFS 等方式来提供其他主机挂载使用。
接下来,网络服务器、客户端系统、NAS 与 SAN 的角色在区网里面又是如何呢?我们依旧使用维基百科的图示来说明一下 (DAS 是每部主机内部的磁盘,即底下图标中的圆柱体):
图 18.1-3、各组件之间的相关性 (数据源为注1)
NAS 可以使用自己的磁盘,也能够透过光纤或以太网络取得 SAN 所提供的磁盘来制作成为网络文件系统,提供其他人的使用。 Server 可以透过 NFS/CIFS 等方式取得 NAS 的文件系统,当然也能够直接存取 SAN 的磁盘。客户端主要则是透过网络文件系统, 并且直接使用 Server 提供的网络资源 (如 FTP, WWW, mail 等等)。