高性能MySQL:平衡硬件RAID和软件RAID

作者:港云互联 时间:2019-12-31

        操作系统、文件系统和操作系统看到的驱动器数量之间的相互作用可以是复杂的。Bug、限制或只是错误配置,都可能会把性能降低到远远低于理论值。



        如果有10块硬盘,理想中应该能够承受10个并行的请求,但有时文件系统、操作系统或RAID控制器会把请求序列化。面对这个问题- 个可行的办法是尝试不同的RAID配置。例如,如果有10个磁盘,并且必须使用镜像冗余,性能也要好,可以考虑下面几种配置:



        配置一个包含五个镜像对(RAID 1)的RAID 10卷。操作系统只会看到一个很大的单独的硬盘卷,RAID 控制器会隐藏底层的10块硬盘。

高性能MySQL:平衡硬件RAID和软件RAID


        在RAID控制器中配置五个RAID 1镜像对,然后让操作系统使用五个卷而不是一个卷。



        在 RAID 控制器中配置五个 RAID 1镜像对, 然后使用软件 RAID 0把五个卷做成一个逻辑卷,通过部分硬件、部分软件的实现方式,有效地实现了RAID 10。



        哪个选项是最好的?这依赖于系统中所有的组件如何相互协作。不同的配置可能获得相同的结果,也可能不同。



        我们已经提醒了多种配置可能导致串行化。例如,ext3 文件系统每个inode有一个单一的Mutex,所以当InnoDB是配置为innodb flush method=0_ DIRECT (常见的配置)时,在文件系统会有inode级别的锁定。这使得它不可能对文件进行I/O并发操作,因而系统表现会远低于其理论上的能力。



        我们见过的另一个案例,请求串行地发送到一个10块盘的RAID10卷中的每个设备,使用ReiserFS文件系统,InnoDB 打开了innodb file per_ table选项。尝试在硬件RAID1的基础上用软件RAID 0做成RAID 10的方式,获得了五倍多的吞吐,因为存储系统开始表现出五个硬盘同时工作的特性,而不再是一个 了。造成这 种情况的是一个已经被修复的Bug,但是这是一个很好的例证,说明这类事情可能发生。



        串行化可能发生在任何的软件或硬件堆栈层。如果看到这个问题发生了,可能需要更改文件系统、升级内核、暴露更多的设备给操作系统,或使用不同的软件或硬件RAID组合方式。应该检查你的设备的并发性以确保它确实是在做并发I/O (本章稍后有更多关于这个话题的内容)。



        最后,当准备上线一种新服务器时, 不要忘了做基准测试!这会帮助你确认能获得所期望的性能。例如,若一个硬盘驱动器每秒可以做200个随机读,一个有 8个硬盘驱动器的RAID 10卷应该接近每秒1 600个随机读。如果观察到的结果比这个少得多,比如说每秒500个随机读,就应该研究下哪里可能有问题了。确保基准测试对I/O0子系统施加了跟MySQL一样的方式的压力一例如, 使用0 DIRECT标记,并且如果使用没有打开innodb file per table选项的InnoDB,要用一个单一的文件测试I/0性能。通常可以使用sysbench来验证新的硬件设置都是正确的。


新人注册,即送价值满880元现金劵

立即注册>>
客服 电话 反馈 活动 回顶部

服务热线

+852-5764-9835

1对1贴心服务,7X24小时热线