背景
目前 CPU 的处理性能越来越强,目前单颗 CPU 已经可以达到 128 线程。CPu 高速计算,内存也有着较高的读写速度,但与此同时,硬盘设备的性能提升却不是很大,逐渐成为计算机整体性能的瓶颈。并且生物数据往往都比较大,动辄就达到数 Tb 的数据。由于硬盘设备需要进行持续、频繁、大量的 IO 操作,相较于其他设备,其损坏机率也大幅增加,导致重要数据丢失的机率也随之增加。因此,服务器的磁盘配置非常重要。
一、RAID 磁盘阵列
1.1 什么是 RAID?
服务器与个人电脑之间有很多差别,其中最大的一点不同是服务器使用 RAID,磁盘阵列,英文为 Redundant Arrays of Independent Disks,简称为 RAID,有“独立磁盘构成的具有冗余能力的阵列”之意。现在的服务器上都是用了 RAID 技术,可以解决硬盘 IO 性能弱,稳定性差的问题。
1988 年,美国加利福尼亚大学伯克利分校首次提出并定义了 RAID 技术的概念。RAID 技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。
RAID 的第一个优点是提高了磁盘的读写速度,采用 RAID 技术之后,可以一块数据写到多块磁盘上,这样速度就变成原来 n 分之一。读一块数据并行从多块磁盘读取,这样读速度就变成原来的 n 倍。第二个优点是提高了数据的安全性,当有硬盘出错之后不影响数据完整性,缺点就是需要浪费部分磁盘空间。
1.2 制作 RAID 阵列
制作 RAID 有两种实现方式,一种是通过软件实现 RAID,另一种是通过硬件实现 RAID。
软件 RAID 比较容易,就是通过系统功能或者 RAID 软件实现 RAID,也就是通过软件将多块硬盘连成一块,没有独立的硬件和接口。是通过操作系统实现,现在几乎所有的操作系统都支持软件实现 RAID,既然需要操作系统,软件在系统启动之后就需要运行,那么就需要占用一定的系统资源,比如 CPU,会受到硬盘接口速度的影响,并且受操作系统稳定性影响。
软件 RAID 必须在系统开机之后,才能运行,系统崩溃后,RAID 就没了,数据有可能就丢失了。所以,软件 RAID 的效率不高,一般很少使用软件 RAID。
在生产环境下一般都是使用硬件 RAID。目前的服务器基本上都带硬件 RAID 的功能,硬件RAID 是通过独立的 RIAD 硬件卡实现,有些主板集成 RAID 硬件,有些需要购买独立的 RIAD硬件卡。硬件 RAID 在系统安装之前,就通过硬件实现,所以硬件 RAID 的实现不需要占用其他硬件资源,稳定性和速度都比软件 RAID 要强。在安装操作系统之前,先制作 RAID 阵列。
1.3 RAID 级别
RAID 技术分为很多种,称之为 RAID 的级别,目前有 12 种,不过不是完全按顺序排列的,都有各自的用途,比如有 RAID0,RAID1,RAID5,RAID10,RAID53 等,注意这个层级,不是使用的磁盘数。常用的主要有四种,RAID0,RAID1,RAID5,RAID6。RAID0 可以提高读写性能,RAID1 可以提高读写性能和冗余性,所谓冗余性也就是备份,在硬盘出现故障的时候,数据不丢失。RAID5 也是提高读写性能和稳定性,但是只能损坏一块硬盘。比如我们由 5 块硬盘组成一个 RAID,那么对计算机系统来说,也就是一个硬盘,而不是 5 块,RAID5 其中一块硬盘损失了,数据不丢失,如果超过一块,数据还是会丢失。RAID6 与 RAID5 类似,但是可以保证同时损失两块儿硬盘时不丢失数据。
现在的 RAID 级别从 RAID0 到 RAID10,RAID50 等很多种,每一种都有特定的使用范围,RAID级别不同,主要是利用率与读写速度和冗余性的平衡。
1 RAID 0
RAID 0 是最早的 RAID 形式,它是磁盘利用率的极端,利用效率最高,同一份数据分开写入多块磁盘,因此读写速度最快。但是没有提供冗余或错误修复能力,任何一块磁盘坏掉,整个数据就无法恢复。
2 RAID 1
RAID1 也称为磁盘镜像,冗余性的极端,将同一份数据同时写入多块磁盘,非常浪费磁盘,因此,冗余性最高,读数据时一次从多块磁盘读取,因此读数据速度很快。RAID 1 主要用于重要数据的读写,例如银行账户。任何一块磁盘坏了,还有多份备份。
3 RAID 5
RAID 0 和 1 都是极端情况,RAID 5 保持利用率,冗余性,读写速度一个平衡,RAID5 最少使用 3 块硬盘,注意不是要求至少 5 块硬盘,RAID5 与 RAID0 类似,读写数据的时候,会将数据分布式的读写到所有硬盘上,但是多了一步操作,在写数据的时候,会对数据进行奇偶校验运算,将校验信息同时保存在硬盘上,这个校验信息要比实际数据小很多,比如现在有 4 块磁盘构建的 RAID5,每个磁盘 4T,那么浪费掉 1 块用于校验,实际磁盘可用大小应该是 12T。
4 RAID 10
RAID 5 技术是出于硬盘设备的成本问题对读写速度和数据的安全性能有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此在生产环境中主要使用 RAID 10 技术。
RAID 10 技术是 RAID 1 RAID 0 技术的一个“组合体”。RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏 50%的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能也超过了 RAID 5,因此当前成为广泛使用的一种存储技术。
5 RAID50
RAID50 是 RAID5 与 RAID0 的结合。此配置在 RAID5 的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。每个 RAID5 子磁盘组要求至少三个硬盘。RAID50 具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于 RAID5 子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。
1.4 制作 RAID
RAID 制作,在购买服务器的时候,有些设备提供方已经做好了 RAID,这样拿回来之后就会当成一块硬盘来使用(不要去争辩为什么磁盘的容量少了)。也可以自己手动创建 RAID,操作并不难。不同品牌会有一些差别。下面是一个示意图,实际操作中有很多步骤。
需要注意制作 RAID 最好选择同一品牌磁盘,并且同样大小,这样性能和稳定性更好。
在 BIOS 构建 RAID 示意图
1.5 生物信息服务器磁盘方案
根据以往生物云平台运营方案,这里推荐 RAID0 RAID5 的方案。购买 2 块小的 SSD 固态硬盘,例如两块 800G 磁盘,搭建 RAID1,用来安装操作系统。固态硬盘有更高的读写速度以及稳定性,用来运行整个操作系统。采用服务器机械硬盘用来存储数据,例如购买 3.5 寸,单盘 8~16T 磁盘,配置 RAID5 方案,用来存放数据和分析数据。也可以单独购买存储设备。
二、分区格式化
配置完 RAID 之后就可以安装操作系统了,可以将操作系统安装到小的固态硬盘上,这样将系统和磁盘分开,后续安装升级操作系统不影响磁盘的数据。安装完 Linux 系统之后,磁盘需要分区格式化后才能使用。分区是将磁盘分割成几个相互独立的区域,类似 windows 系统将一块磁盘分为 C 盘 D 盘等操作。Linux 系统使用最广泛的分区工具是 fdisk 命令,fdisk是来自IBM的老牌分区工具,支持绝大多数操作系统,几乎所有的Linux发行版本都装有fdisk命令,fdisk 是一个基于 MBR 的分区工具,如果需要使用 GPT 分区,则无法使用 fdisk 进行分区。fdisk 最多只支持 2T 的硬盘空间,超过 2T 需要使用 parted 命令格式化。生物信息的服务器也可以不分区,直接进行格式化的操作。
代码语言:javascript复制#创建一个文件夹,用户挂载磁盘
mkdir /ifs1
#进行格式化
fdisk -l
parted /dev/vdb ,交互界面 mklabel gpt ,quit
mkfs.xfs -f /dev/vdb
#挂载磁盘
mount /dev/vdb /ifs1
#设置自动挂载,将下面信息追加写入/etc/fstab 文件中
/dev/vdb /ifs1 xfs defaults,uquota 0 0
三、磁盘管理
由于服务器没有开启图形化界面,都是命令行模式,并且同时有多个用户在使用。必须设置合理的目录结构,方便查找文件。一个完成的生物数据分析平台里面主要的数据包括,生物软件,生物数据库,用户组,分析数据,其他数据等。这些必须严格区分,例如软件和数据库是公用的,分析数据放到固定目录,便于查找和归档,每个用户单独隔离。还需要将数据盘与系统盘进行区分。
在根目录下创建一个文件夹,名字可以自己设置,只要不与系统默认磁盘重名且通俗易懂即可。一般可以设置为 data,share 等。如果有其他盘,可以挂载到目录下,为什么叫这个名字呢,其实如果你看过基因学苑公众号之前的博文,应该已经知道了。我们设置的磁盘名字为 ifs1。以字母 i 开头可以与系统其它盘符区分开,可以一步补齐,fs 代表 file system,数字 1 表示第一块盘,后面再加其他盘,可以命名为 ifs2,ifs3 等,也非常方便。当然,你可以随便起名字。
在 ifs1 下在创建其它几个目录,分别存放软件,数据库,用户以及项目数据
代码语言:javascript复制mkdir Software Database User Project
软件目录是生物信息分析平台中非常重要的一个目录,最好不要将软件直接安装到/usr 这样系统目录下,不方便管理,也不要在软件目录下直接运行程序。软件目录可以分为三部分,原始软件包 src 目录,软件安装目录 biosoft,可执行程序快捷方式目录。我们在 Software里面直接创建这三个目录。
代码语言:javascript复制mkdir -p /ifs1/Software/src /ifs1/Software/biosoft /ifs1/Software/bin
最后我们来看一下整体目录结构
代码语言:javascript复制$ tree -L 2 ifs1/
ifs1/ #数据盘
|-- Database #生物数据库
|-- Project #测序数据
|-- Software #生物软件
| |-- bin #可执行程序
| |-- biosoft #安装软件
| `-- src #原始数据
`-- User #用户目录
写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。原地址暂未启用(bioinfoer.com)。
代码语言:javascript复制sx.voiceclouds.cn
有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。