在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免以后的很多问题的产生,大大节省我们的时间和精力,在一定幅度上降低成本。当然,这会涉及很多方面。比如机器的选型、业务评估和系统规划等。 所有的设计都是跟具体的需求相关的,我们首先要做的就是对业务进行整体评估。我在下面分享一个具体的例子。 一、业务需求
二、业务评估 step1:1年的数据量大约是500GB 结果:每秒产生的数据量为500*1024*1024/(365*24*60*60)=17KB。 step2:每秒3W次请求;读写比是1:1 结果:每秒的读请求是15000次;每秒的写请求是15000次。 step3:记录的长度大约为1KB 结果:根据step1得出的结果,每秒insert的数据写入大约为17KB;根据step2得出的结果,每秒写入的请求为15000次,可知14083次为update和delete操作。由于mysql写入操作按照页来处理,页大小为16KB,假设每次操作的页都不相同,那么每秒写操作的数量为16KB*15000=234MB。每秒读操作的数量为16KB*15000=234MB。 step4:处理最近7天的数据 结果:热数据量为:(500/365)*7=21GB step5:操作ms级别返回 结果:操作ms级别返回,并且读写基本平衡。需要尽可能多的将数据加载到内存。按照内存命中率接近100%计算的话,那么innodb_buffer大约需要21GB,而其它的内存大约需要1~2GB,因此内存超配大约为32GB。按照超配原则,写带宽(wBPS)限制为250MB/s。读带宽(rBPS)限制为250MB/s。 三、硬盘选择(HDD vs SSD) HDD类型的硬盘更善于处理一些顺序读写的内容,而SSD硬盘不管是顺序还是随机的性能都有远远优于HDD的硬盘,但是SSD的硬盘价格比较昂贵。因此,我们可以通过合理的分配,降低整体拥有的成本。 例如,对于一些日志文件,这些日志文件主要是顺序IO,我们可以把这些文件放到HDD上,可以考虑使用RAID5级别,提高日志系统的容错能力。对于数据文件,我们可以考虑放到SSD上,使用RAID10提高容错能力。
四、机型测试 性能对比测试:对不同硬件设备在压力测试下数据库表现性能指标。对于硬件性能做出整体的评估。 稳定性测试:没有抖动现象,可以持续稳定的提供服务。 掉电保护测试:这个环节挺麻烦,需要系统工程师的支持。 内存异常测试:测试内存是否容易出现问题,能否对业务提供稳定支持。 此外还有IO设备和坏盘重构。 经过一系列的测试,我们可以选出2~3种候选机型,我们应当尽量避免应用和设备绑定,防止单个机型缺货,供应不足影响业务。
五、成本评估 通过前面的一系列的准备工作,我们可以选出候选的机型,考虑我们的使用成本。这包括: 设备成本 运维成本 功耗成本 特别注意:我们虽然有的时候单机使用成本虽然会上升,但是整体的使用成本却下降了。这是因为我们提升了单个机器的性能,可以减少机器的数目。降低运维和功耗的成本,甚至也降低了整体设备的成本。
六、文件系统规划 MySQL数据库的特点: ——单数据目录(单个实例不能指定多个数据库) ——混合读写(日志和数据的读写方式是不一样的) ——请求随机 文件系统划分: /dev/sda1 /boot /dev/sda2 / /dev/sda3 /home /dev/sda4 /tmp /dev/sdb1 /data /dev/sdc1 /log 根据使用经验,建议IO调度策略为deadline的方式: #echo deadline > /sys/block/sd{b,c}/queue/scheduler MySQL数据库日志文件是顺序读写的,建议放在普通的SSD硬盘。 ——binlog日志文件、error日志文件、slow日志文件可以存放在/log日志目录中 ——tmp文件指定为系统的目录/tmp ——其他所有目录指定为数据目录/data 注意:虽然日志文件是随机读写的,但是由于把几个日志文件都放到一个分区,还是可能产生随机化读写的现象。 |
请发表评论