mysql数据库卡硬盘_MySQL基础建设之硬盘篇

MySQL 基础建设之硬盘篇 随着业务的不断增长,之前的环境越来越乱,由此欲重建整个MySQL数据库基础环境 主要目的是要考虑 数据冗余、性能、平衡 目的是让机器的性能最大的发挥,同时比较好维护 一、硬件选型 1. 节点统计 目前已将各库进行分隔,但由于每台机

MySQL基础建设之硬盘篇

随着业务的不断增长,之前的环境越来越乱,由此欲重建整个MySQL数据库基础环境

主要目的是要考虑 数据冗余、性能、平衡 目的是让机器的性能最大的发挥,同时比较好维护

一、硬件选型

1.节点统计

目前已将各库进行分隔,但由于每台机器都过老过保,业务稳定但是硬件问题多多,出于节约成本,将机器数合并至两台数据库上

2.数据量统计

出于规划硬盘空间,需将每台机器所占用的data数据、binlog、slow log 及近期备份的日志文件总和一一列出,如下所示某机房

功能业务data空间使用情况slow log空间使用情况bin_log目录使用情况

某同步系统|主库192G4.9G3.2G

某同步系统|从库281G43M3.2G

某api服务|主库6.2G300M3G

某api服务|从库6.6G13M3G

综合业务服务|主库2.9G2M4.8G

综合业务服务|从库1.4G92M3.2G

账号服务 | 主库4.7G207M44G

账号服务 | 从库43G

(*_center 文件占用空间过多)1M58M

积分服务 | 主库1.5G200M11G

积分服务 | 从库2.2G20M11G

游戏 | 主库1.4G1.8G753M

游戏 | 从库1.4G115M776M

微博业务 | 主库2.0G2.5G674M

微博业务 | 从库5.5G

(ibdata2占略大)8G661M

3.硬件选型

总结以上对容量进行相加,可以算出单台机器600G容量就足够,但是考虑到以后几年的扩容情况,这里使用2T的空间,稍后会介绍到

最终,服务器选择了DELL R420;硬盘选择了Crucial M550 ,具体可以看其参数,价格就不要关注了:

本文来自 http://yijiu.blog.51cto.com 盗贴 可耻

M550官方说明http://www.edgememory.com/ssds.aspx

据说理论上iops能达到7w+ 那么下面就来试试

二、一个坑:压力测试

1.压测工具选择

这里使用的是Fio,也可以是其他压测工具,因个人喜好而异

系统做好了,分别做了两个不同的RAID级别,一个是RAID1 一个是RAID0

在网上搜索了一通,看别人都这么做的,所以这里也跟着学了直接复制,可是网上的文章坑很多

不要模仿,之前就是直接复制

顺序写:

fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 32 -filename /dev/sdb1 -ioengine libaio -direct=1

随机写:

fio -name iops -rw=randwrite -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda1 -ioengine libaio -direct=1

随机读:

fio -name iops -rw=randread -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda1 -ioengine libaio -direct=1

本文来自 http://yi jiu.bl og.51ct o.com 盗 贴 可耻

那么用fio来进行RAID0的压测,使用随机写的方式得出结果:

[root@localhost io_test]# fio -filename=/io_test/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=500G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-writell

test-rand-writell: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64

...

fio-2.1.10

Starting 64 processes

test-rand-writell: Laying out IO file(s) (1 file(s) / 512000MB)

Jobs: 30 (f=30): [_wwww_w__www______ww___ww___ww_w__ww__ww_w_wwww_w_w_w______w__ww] [3.3% done] [0KB/70497KB/0KB /s] [0/17.7K/0 iops] [eta 11m:20s]

test-rand-writell: (groupid=0, jobs=64): err= 0: pid=4305: Wed Apr 8 00:49:59 2015

write: io=1452.2MB, bw=74239KB/s, iops=18559, runt= 20028msec

slat (usec): min=15, max=80419, avg=3437.87, stdev=8530.70

clat (msec): min=1, max=747, avg=216.14, stdev=107.04

lat (msec): min=1, max=755, avg=219.57, stdev=108.24

clat percentiles (msec):

| 1.00th=[ 6], 5.00th=[ 30], 10.00th=[ 69], 20.00th=[ 126],

| 30.00th=[ 161], 40.00th=[ 190], 50.00th=[ 217], 60.00th=[ 243],

| 70.00th=[ 269], 80.00th=[ 306], 90.00th=[ 355], 95.00th=[ 396],

| 99.00th=[ 474], 99.50th=[ 506], 99.90th=[ 578], 99.95th=[ 603],

| 99.99th=[ 693]

bw (KB /s): min= 115, max=38223, per=1.54%, avg=1141.21, stdev=1116.54

lat (msec) : 2=0.55%, 4=0.11%, 10=1.68%, 20=1.63%, 50=3.58%

lat (msec) : 100=7.34%, 250=47.92%, 500=36.62%, 750=0.58%

cpu : usr=0.24%, sys=1.88%, ctx=424437, majf=0, minf=1842

IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.3%, 32=0.6%, >=64=98.9%

submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%

complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%

issued : total=r=0/w=371717/d=0, short=r=0/w=0/d=0

latency : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):

WRITE: io=1452.2MB, aggrb=74239KB/s, minb=74239KB/s, maxb=74239KB/s, mint=20028msec, maxt=20028msec

Disk stats (read/write):

sda: ios=0/371765, merge=0/13948, ticks=0/2776215, in_queue=2776513, util=99.24%

IOPS只有1.8W ,那么需要考虑的为啥只有1.8W 那么继续往下看

本 文来 自 ht tp://y ijiu.bl og.51 cto .com 盗 贴可耻

2.压测工具命令各参数

上面涉及到了FIO,可是好多地方容易被忽略,那么下面就来解释一下之间的参数关系

涉及命令:

fio -filename=/io_test/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=500G -numjobs=64 -runtime=20 -group_reporting

涉及参数解释

Filename 测试文件名称,通常选择需要测试的盘的data目录。

iodepth IO深度

-ioengine=libaio 使用libaio模式

direct=1 测试过程绕过自身缓存

bs=4k 单次io的块文件大小为4k

numjobs=64 本次的测试线程为64

那么知道各参数都是什么作用了,接下来就需要了解硬件各之间的关系了,知道之间怎么去调度的才可以明白压测的实际意义

三、缓存、深度及并发

1.缓存

缓存就不解释了。之前听到好多人说压测的时候文件必须要大,其实是错误的,首先来看 -bs=4k,所以这里是在测试4k 的文件,而当时的内存是80G,通常只要测试到比 80G 多就可以体现出性能了,但是这里有一个direct=1的参数所在,那么我们不需要这么大的文件进行压测, 500G有点浪费磁盘寿命,在直接跳过缓存之后,80G 都是没有必要的了,但是有必要写入2G-10G 左右, RAID卡本身就有缓存的功能,所以,只需要大于这个缓存本身就行了,所以写入2G可以保证,已经开始越过 H710P 的cache。节约时间,节省使用寿命。

2.IO深度和并发

在这个测试里面 蛮重要的一个参数是 -iodepth 64

首先要确定 iodepth 应该走到多少,才会有一个合理的结果,要从 iodepth 到底是影响哪些层面去分析,CPU还是内存还是其他?

#接下来可以试着做一个 4 并发 和 一个 8并发的测试来查看结果,可以自行测试,不再放结果了

direct如果是影响 CPU 的话,那么应该是数字越小,CPU消耗越大。因为数字越小,CPU 要批量往硬盘发数据的次数就是越多,但是数字越大,积压的内存理论上应该越多

同时,硬盘一次能接收的数量总是有个极限的,所以应该是接近这个极限比较好,具体这么极限怎么计算,可能很难。可能要考虑到 CPU 内存,硬盘缓冲等一系列因素

知道以上的结论,接下来就不断调整深度和并发数进行测试就好了

四、RAID卡特性

采购阵列卡的时候必须了解其特性,在官方 Guide 文档里面 15 页有详细介绍

首先是SSD的产品介绍

http://www.edgememory.com/ssds.aspx

RAID阵列卡的产品介绍

http://www.dell.com/learn/us/en/04/campaigns/dell-raid-controllers?c=us&l=en&s=bsd&cs=04&redirect=1

明白之间的管理又查阅了老外的资料几个连接比较符合目前的情况

http://blog.xbyte.com/author/lyndsieezell/page/2/

有句话需要特别注意:

For 2 and 4 disk arrays, performance for 100% sequential I/O was improved by utilizing FastPath.

在2块和4块盘的阵列里面,配置 FastPath会带来 IO 方面 100% 的性能提升

1、参考其他人的压测经验

这里不得不说一下,作者使用了RAID10来做压力测试,前期iops达到了2.6W,这里提到了发现了H710P的FastPATH功能,专门为SSD的使用

前沿部分最后提到:

压测真实数据只有60% 随机,其他都为顺序压测

最后提到最主要的是需要明白使用什么样的IO调度方式,这里我理解为文件系统层面的io调度方式

本 文来 自 htt p:/ /yiji u.blog.51cto.com 盗贴 可耻

以下为RAID 5 和 RAID10的压测结果

RAID10的压测结果如下:

6块SSD做的RAID10可能会导致性能的下降,建议使用较少的磁盘数量比数量多的更佳

对于长期频繁读写,较大数量的RAID阵列(理解为4块以上为较大);容量更小的SSD的可能更有意义(老外反复提到)

RAID 5 的压测结果

在压测中,总结:对于较大的阵列,在FastPATH工作中,FastPATH是否禁用后性能是否有影响,需要进行实际测试;因为它需要将一块磁盘拿出来做奇偶校验,所以可能会进行频繁的调度

但是如图上所显示,RAID 5 在后期可能会略有下降

本文来 自 h ttp :/ /yijiu.blog .51c to.com 盗 贴~可耻

最后作者又提到,如果使用raid5做读写工作都非常频繁的场景下建议使用多块小硬盘

对于io负载较高的场景下,最好是使用容量大的SSD,以及数量较少的RAID的阵列;这里可以理解为4块盘之内的RAID阵列包括4块盘

最后说明:在RAID 1/10和5使用SSD表现良好,但是出于实际考虑,需要确保是否符合当前的负载情况,不能盲目选型,不然可能无法达到预期的性能

第二篇文档也明确提到以上观点

http://www.cnblogs.com/ylqmf/archive/2013/02/28/2936895.html

在对RAID 0 的阵列上使用bs=4k 的随机读测试,只有128kb的效果比较明显,比之前提高了24%.与4kb的小小相比,单块盘的RAID 0 效率要高41%

文中提到未压缩的压测结果:

设置的CrystalDiskMark默认模式,主要用于不压缩数据

在没有压缩数据的顺序读写的测试中,顺序读最快的性能与更小的bs来实现,使用4k比 128k的性能高11% ,顺序写测试高于单块硬盘的283%的性能;

512kb压测对比

随机读写

最快的size 为8kb ,比单盘性能要高出 74% -- 88%

在随机测试中,所有szie大小的性能都差不多,但都远高于单块盘。

在测试RAID 0两个随机读取写测试中,不管多少size为4kb块没有任何优势

在顺序读写,以及在 512 kiB 块的随机测试,RAID 0的单块盘的性能比典型的RAID 0性能提高了80% - 324%

总结:

文中作者通过对比得出,size大小,大小其实不重要,只要高于本身缓存;如果场景是比较大文件的传输或者是需要大量压缩文件的场景,可以选择128kib的大小配置,如果不是,可以使用任意值;因此,文章中又提到,不是采用了单块大容量的SSD,而是选择了两个小容量的ssd做为RAID 0 效果会更佳,(这里也提到了用容量小的SSD做RAID效果会更好)

而且以上的文章反复都提到了FASTPATH这个功能,那么下面将其功能开启再试试

五、设置FastPATH

1.FastPATH的作用

涉及资料:官方手册,如下所示

1511c5559694c4c540b791ca6022f07d.png

我们知道了我们的RAID卡是支持FastPATH的功能的,那么接下来要设置FastPATH功能

本文来 自 ht~t p://yi~ji~u.bl~og.51~cto.co~m ~盗贴 可耻

2.开启FastPATH

FastPATH 默认为开启状态;主要作用为直接写入缓存和不进行预读操作

Fastpath I/O (H710P and H810 only)Fastpath I/O is a method of increasing Inpu

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值