Articles of RAID

用廉价的SSD硬盘来扩展数据库

我希望你们中的许多人正在处理高stream量的数据库驱动的网站,而且你的主要可伸缩性问题可能在数据库中。 最近我注意到了一些事情: 大多数大型数据库都需要一组DBA才能进行扩展。 他们经常与硬盘驱动器的局限性作斗争,并最终采用非常昂贵的解决scheme(SAN或大型RAID,经常维护的磁盘碎片整理和重新分区等)。维护此类数据库的实际年度成本在$ 100K到$ 1M之间太陡了:) 最后,我们有几家公司,如英特尔,三星,FusionIO等,刚刚开始销售基于SLC闪存技术的极速而又经济实惠的SSD硬盘。 这些驱动器的随机读取/写入速度比市场上最好的旋转硬盘驱动器快100倍(每秒高达5万个随机写入)。 他们的查找时间几乎为零,因此随机I / O的成本与顺序I / O相同,这对于数据库来说非常棒。 这些固态硬盘的成本大约是每GB 10-20美元,而且相对较小(64GB)。 因此,似乎有机会通过简单地构build足够大的RAID 5arraysSSD驱动器(这将花费数千美元)来避免以传统方式扩展数据库的巨大成本。 然后,我们不关心数据库文件是否被分割,我们可以承受每秒100次的磁盘写入,而不必将数据库分散到100个主轴上。 。 其他人对此感兴趣吗? 我一直在testing一些SSD驱动器,可以分享我的结果。 如果这个网站上的任何人已经用SSD解决了他们的I / O瓶颈,我很乐意听到你的战争故事! PS。 我知道有很多昂贵的解决scheme可以帮助实现可扩展性,例如经过时间考验的基于RAM的SAN。 我想要清楚的是,即使是5万美元对于我的项目来说也太昂贵了。 我必须find一个解决scheme,花费不超过1万美元,并且不需要太多时间来执行。 Dave,NXC和Burly, 感谢您的回复! 我想澄清的是,“便宜”这个词对我来说非常重要。 所以,我必须使用便宜的戴尔服务器($ 4K 2950s只有8个内存银行)。 我已经安装了32GB的内存,所以我无法继续扩展。 此外,添加内存并不能让你免受磁盘写入瓶颈,这是我现在的主要问题。 我曾经关心固态硬盘的寿命,但在阅读了现代耗损均衡algorithm之后,我确信这些硬盘将持续足够长的时间。 我的数据库每天写入300GB,预计在2009年每天超过1TB。企业级SSD旨在处理多年来每天大约10TB的写入。 我不同意Burly的观点,即从SAS迁移到SSD需要花费太多的人力。 我的数据库是一个同步镜像,所以我可以升级镜子的一面,然后观看它几个月,如果它吹,我可以故障转移到第二台服务器,仍然有旧的好SAS硬盘驱动器…

在Linux上使用软件RAID和LVM时,哪个IO调度程序和预读设置得到遵守?

在多层(物理驱动器 – > md – > dm – > lvm)的情况下,调度程序,预读设置和其他磁盘设置如何交互? 假设你有几个磁盘(/ dev / sda – / dev / sdd)是由mdadm创build的软件RAID设备(/ dev / md0)的所有部分。 每个设备(包括物理磁盘和/ dev / md0)都有自己的IO调度器设置( 如此更改 )和readahead( 使用blockdev更改 )。 当你扔dm(crypto)和LVM之类的东西时,你可以添加更多的图层和自己的设置。 例如,如果物理设备的读取超过了128个块,并且RAID有64个块的先行读取,当我从/ dev / md0读取数据时,这是可以使用的吗? 是否md驱动程序尝试64块读取,物理设备驱动程序然后转换为128块的读取? 或者,RAID是否提前“传递”到底层设备,导致64块读取? 调度人员也有同样的问题吗? 我是否必须担心IO调度程序的多个层次以及它们如何交互,或者/ dev / md0是否有效地覆盖了基础调度程序? 在我试图回答这个问题的时候,我已经find了一些关于调度程序和工具的有趣数据,可能有助于解决这个问题: 来自Google的Linux磁盘调度器基准testing blktrace – 在块设备上生成I / Ostream量的跟踪 相关的Linux内核邮件列表线程

LVM,设备映射器,软件RAID和块设备的Readahead设置 – 什么赢?

我一直在试图find一个直接的答案,这已被certificate是难以捉摸的。 这个问题和答案很接近,但是并没有给我具体的细节。 让我们从我认为我知道的事情开始。 如果你有一个标准的块设备,你运行sudo blockdev –report你会得到这样的东西: RO RA SSZ BSZ StartSec Size Device rw 256 512 4096 0 500107862016 /dev/sda rw 256 512 4096 2048 399999238144 /dev/sda1 rw 256 512 1024 781252606 1024 /dev/sda2 现在,您决定使用–setra在任何分区–setra默认值256更改为128,并且发生在整个块设备上,如下所示: sudo blockdev –setra 128 /dev/sda1 sudo blockdev –report RO RA SSZ BSZ StartSec Size Device rw 128 512 4096 0 […]

在服务器环境中,消费者(或专业消费者)SSD与快速硬盘

在服务器环境中, 消费类固态硬盘与快速10-15k旋转硬盘有什么区别 ? 在我们的情况下,我们不能使用企业SSD,因为它们太昂贵了。 以下是关于我们特定用例的一些说明: 虚拟机pipe理程序,最多5-10个虚拟机 没有个人虚拟机将疯狂I / O密集。 内部RAID 10,没有SAN / NAS … 我知道企业SSD: 被评为更长的寿命 并长期执行更为一致 比消费者的固态硬盘…但这是否意味着消费者固态硬盘完全不适合服务器环境,或者他们仍然performance比快速旋转驱动器更好? 由于我们通过RAID /备份保护,所以我更关心性能在整个使用寿命期间(只要寿命预计不会太低)。

我需要RAID Fusion-io卡吗?

我可以使用服务器中安装的单个Fusion-io卡来可靠运行吗?还是需要在软件RAID设置中部署两个卡? Fusion-io在回顾他们的营销材料时并不十分清楚(几乎误导)鉴于这些卡的成本,我很好奇其他工程师是如何在真实世界的场景中部署的。 我计划使用HP品牌的 Fusion-io ioDrive2 1.2TB卡作为在Linux上运行的专有独立数据库解决scheme。 这是一个单一的服务器设置,没有真正的高可用性选项。 有一个10分钟的RPOasynchronous复制,将事务日志镜像到第二个物理服务器。 传统上,我将指定一台高端的HP ProLiant服务器,并为此应用程序提供最高级别的CPU。 我需要去SSD,而且我能以比所需容量更低的价格获得Fusion-io。 我是否需要运行两个ioDrive2卡,并使用软件RAID(md或ZFS)join,还是不必要? 我应该担心Fusion-io的失败吗?我会担心RAID控制器故障或主板故障吗? 系统pipe理员喜欢RAID。 这是否需要一个不同的思维模式,考虑到这种外形的不同接口和卡内损耗均衡/纠错? 这些设备的故障率是多less? 编辑:我刚刚从戴尔读了Fusion-io可靠性白皮书 ,外包似乎是“Fusion-io卡有很多内部冗余……不要担心RAID! 。

我应该整理我的RAID卷吗?

在我看来,由于RAID卷是逻辑的(而不是物理的),操作系统认为它们的布局可能不符合实际的物理布局。 那么碎片整理对于RAID有意义吗?

Linux – 真实世界的硬件RAID控制器调优(scsi和cciss)

我pipe理的大部分Linux系统都是function硬件RAID控制器(主要是HP Smart Array )。 他们都运行RHEL或CentOS。 我正在寻找真实世界的可调参数来帮助优化将硬盘RAID控制器与SAS磁盘(Smart Array,Perc,LSI等)以及电池供电或闪存备份caching相结合的设置的性能。 假设RAID 1 + 0和多个主轴(4个以上的磁盘)。 我花了相当多的时间调整Linuxnetworking设置以适应低延迟和金融交易应用。 但是其中的许多选项都有详细logging(更改发送/接收缓冲区,修改TCP窗口设置等)。 工程师在存储方面做了什么? 从历史上看,我对I / O调度电梯进行了修改,最近select了deadline和noop调度程序来提高我的应用程序的性能。 随着RHEL版本的进步,我也注意到SCSI和CCISS块设备的编译默认值也发生了变化。 这对build议的存储子系统设置随着时间的推移已经产生了影响。 但是,从我看到任何明确的build议已经有一段时间了。 而且我知道操作系统默认不是最佳的。 例如,对于在服务器级硬件上部署,似乎128kb的默认预读缓冲区非常小。 以下文章探讨了在块队列上更改预读caching和nr_requests值的性能影响。 http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with-linux-why-tuning-really-matters http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html 例如,这些是对HP智能arraysRAID控制器的build议更改: echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler blockdev –setra 65536 /dev/cciss/c0d0 echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb 还有什么可以可靠地调整,以提高存储性能? 我特别在生产场景中寻找sysctl和sysfs选项。

我如何区分“真RAID”与真RAID?

FakeRaid上的Ubuntu wiki页面如下所示: 一些硬件产品声称是IDE或SATA RAID控制器…几乎没有一个是真正的硬件RAID控制器。 相反,他们只是多通道磁盘控制器结合特殊的BIOSconfiguration选项… 有没有一种典型的方式来识别(从产品规格)主板是否有“真正的”RAID,或者是“真正的”RAID产品一般无法提供给消费者?

文件服务器 – 存储configuration:RAID与LVM vs ZFS的东西…?

我们是一家小公司,除了其他function之外,还进行video编辑,并且需要一个地方来保存大型媒体文件的备份副本并使其轻松共享。 我已经安装了Ubuntu Server和4 x 500 GB驱动器。 他们目前使用Samba作为Mac / Windows工作站可以看到的四个共享文件夹进行设置,但我想要一个更好的解决scheme。 这主要有两个原因: 500 GB不够大(有些项目比较大) pipe理当前设置很麻烦,因为单个硬盘驱动器具有不同数量的可用空间和重复的数据(用于备份)。 现在很混乱,一旦有多台服务器,情况就会变得更糟。 (“该项目在share4上的sever2”等) 所以,我需要一种方法来组合硬盘驱动器,以避免单个驱动器故障导致数据完全丢失,因此用户只能在每台服务器上看到一个共享。 我已经完成了Linux软件RAID5,并有一个不好的经验,但会再试一次。 LVM看起来不错,但似乎没有人使用它。 ZFS看起来很有趣,但是比较“新”。 什么是最有效率和风险最小的方式来结合我的用户方便的硬盘驱动器? 编辑:这里的目标基本上是创build包含任意数量的硬盘驱动器的服务器,但从最终用户的angular度来限制复杂性。 (即他们看到每个服务器一个“文件夹”)备份数据在这里不是一个问题,但每个解决scheme如何响应硬件故障是一个严重的问题。 这就是为什么我把RAID,LVM,ZFS和谁知道在一起的原因。 我以前使用RAID5的经验也在Ubuntu服务器上,而且有一些棘手的情况导致完全的数据丢失。 我可以避免这一点 ,但留下了一个感觉,我正在为系统添加一个不必要的额外故障点。 我没有使用RAID10,但是我们使用的是商品硬件,每个盒子的数据驱动器大多数都是固定的6.我们有很多500 GB的驱动器,而1.5 TB是非常小的。 (然而,至less还有一个服务器的选项) 我没有使用LVM的经验,并且阅读了有关如何处理驱动器故障的冲突报告。 如果一个(非条纹)LVM设置可以处理单个驱动器失败,只有松散的文件有一部分存储在该驱动器(并将大多数文件存储在一个驱动器上),我们甚至可以忍受。 但是只要我要学习一些全新的东西,我也可以一路走到ZFS。 与LVM不同的是,我也必须改变我的操作系统(?),以便增加我在哪里和我想要的位置之间的距离。 我在uni使用了solaris的一个版本,但不会介意它太可怕了。 在IT频谱的另一端,我想我也可以探索FreeNAS和/或Openfiler,但这并不能真正解决如何解决组合驱动问题。

在硬盘驱动器上是一个真正的问题? 可以做些什么呢?

一位朋友正在跟我谈论随机翻转硬盘上的位元腐蚀问题,破坏了数据。 非常罕见,但有足够的时间,这可能是一个问题,而且不可能检测到。 该驱动器不会认为它是一个坏的部门,备份只会认为文件已经改变。 没有校验和来validation完整性。 即使在RAID设置中,也会检测到差异,但无法知道哪个镜像副本是正确的。 这是一个真正的问题吗? 如果是的话,可以做些什么呢? 我的朋友推荐zfs作为解决scheme,但我无法想象我们的文件服务器正在工作,把Solaris和zfs放在一起。