MySQL基础建设之硬盘篇51CTO博客 - 牛牛娱乐

MySQL基础建设之硬盘篇51CTO博客

2019年03月01日14时28分10秒 | 作者: 青寒 | 标签: 硬盘,功用,测验 | 浏览: 1181

MySQL根底建设之硬盘篇 

跟着事务的不断增加,之前的环境越来越乱,由此欲重建整个MySQL数据库根底环境

首要意图是要考虑 数据冗余、功用、平衡 意图是让机器的功用最大的发挥,一起比较好保护

 

一、硬件选型

1.节点核算

现在已将各库进行分隔,但由于每台机器都过老过保,事务安稳可是硬件问题多多,出于节约本钱,将机器数兼并至两台数据库上

 

2.数据量核算

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

某机房


功用事务

data空间运用状况

slow log空间运用状况

bin_log目录运用状况


某同步体系|主库

192G

4.9G

3.2G





某同步体系|从库

281G

43M

3.2G





某api效劳|主库

6.2G

300M

3G





某api效劳|从库

6.6G

13M

3G





归纳事务效劳|主库

2.9G

2M

4.8G





归纳事务效劳|从库

1.4G

92M

3.2G





账号效劳 | 主库

4.7G

207M

44G





账号效劳 | 从库

43G
(*_center 文件占用空间过多)

1M

58M





积分效劳 | 主库

1.5G

200M

11G





积分效劳 | 从库

2.2G

20M

11G





游戏 | 主库

1.4G

1.8G

753M





游戏 | 从库

1.4G

115M

776M





微博事务   | 主库

2.0G

2.5G

674M





微博事务  | 从库

5.5G
(ibdata2占略大)

8G

661M





 

3.硬件选型

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

终究,效劳器挑选了DELL R420;硬盘挑选了Crucial M550 ,详细能够看其参数,价格就不要重视了:

 本文来自 盗贴 可耻

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的效果

触及材料:官方手册,如下所示

咱们知道了咱们的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 Input/Output Operations per Second (IOPS) by using the 2nd core of the PERC (Gemini core) to directly execute I/O and completely bypass caching.

  • Fastpath I/O is most beneficial for SSD disks.

  • Fastpath I/O is not available on H710 controller, only available on H710P and H810 controllers.

  • Fastpath I/O is automatically available on eligible VDs.

Fastpath eligible VDs should have the following properties:

  •  

    • Write-Through

    • No Read Ahead

    • No Background Operation (e.g. Background Initialization, Patrol Read or Consistency Check ) in progress.

 效劳器重启,ctrl+r进阵列卡中挑选对应的VD,然后按enter键查看write policy 和read policy 并设置以上选项

先别着急装备,这儿有触及到两个知识点:

Write-Through          #设置为直接写

No Read Ahead          #设置为非预读  

 

 本文来自 http://y ~iji~u.bl  og.51cto.com 盗贴可耻


3.回写、直写和预读、非预读

关于write back 和Write Through

默许为回写的方法,关于某些数据形式和装备,直写会取得更好的功用

 

回写、Write Back    

首要使用阵列卡的内存,进行缓存,然后sync到磁盘

 

直写、Write Through  

首要是将传递的数据不通过raid阵列卡的缓存,直接写入到磁盘中,封闭写缓存,可开释缓存用于读操作

 

预读:

在没有体系的IO恳求的时分事先将数据从磁盘中读入到缓存中,然后在体系宣布读IO恳求的时分,就会完成去检检查看缓存里边是否存在要读取的数据,假如存在(即射中)的话就直接将成果回来

假如禁用非预读的话,则直接去硬盘中读取数据

 

那么理解以上两点,设置RAID如下图所示:

 

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

六、埋坑:仍是压力测验

了解了上面一切的知识点及之间的调度联系,接下来再进行压力测验,可是有个当地很忧虑,当发压力的时分,是否磁盘还没走到顶,CPU 现已走到顶了。这儿凭借了zabbix进行对体系进行监控 将出更新设置为1秒一次,由于只需2台机器

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

进行64 iodepth 的随机写和次序写,成果如下:

进行了4个线程,随机写别离都是5200,4线程以4kb的写入,那就是总共 28k

均匀下来 随机读的iops,68000左右。那么与官方手册上阐明的是共同了

压测成果核算

读/写

IOPS

随机写

5200

次序写

18512

随机读

68000

以上只对RAID1进行阐明,详细怎样还需求实践去测验

七、RAID选型

通过上面临FastPATH的了解,接下来挑选适宜的RAID类型

1.FastPATH特性及收效规模

官方手册15页清晰阐明,关于以下收效的行为都有标示,如下所示

就是说,以现在的状况来看,只需RAID5和RAID1两者能够挑选了

 

2.选型

以上,还在纠结于RAID1仍是RAID5

持FastPATH,跟RAID1相同只对读有功用的进步,可是RAID5会用其间一块盘做奇偶校验,假如是读的话应该没有影响,可是写的话或许不如RAID1 ,由于之前看那两篇压测的文章上清晰阐明会有一层调度算法进行奇偶校验。所以现在比较好的就是RAID1了

终究挑选了RAID1,效劳器上为4块硬盘,别离做了2个RAID1

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

八、寿数问题

以RAID5的视点来说,SSD 的寿数受限于写的次数。RAID 每次都会多写一份,可是 RAID 1 也会。

咱们的硬盘是 M550,质保是3年。现在的页面我现已找不到 M550 的写入寿数了,之前有篇文档说这款硬盘的寿数应该是 120万次

假定咱们做 RAID 5 ,所以寿数折半(不断定是否会折半,可是肯定会削减),那就是 60万次。

现在现在960G 的硬盘,假定咱们有 900G 作为数据存储空间。60 万次 也就是 514 EB 的总写入量,平分到到三年质保期,每一天要写入 大约 481 TB(应该没算错)的量这个硬盘才会坏。所以寿数问题应该不是咱们忧虑的了。


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表牛牛娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章