GeekTop
  • 首页
  • 关于

GeekTop

不止代码

MySQL 数据库服务器整体规划

MySQL 数据库服务器整体规划

2015年4月9日 Alex Comments 0 Comment

我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免以后的很多问题的产生,大大节省我们的时间和精力,在一定幅度上降低成本。当然,这会涉及很多方面。比如机器的选型、业务评估和系统规划等。

所有的设计都是跟具体的需求相关的,我们首先要做的就是对业务进行整体评估。我在下面分享一个具体的例子。

业务需求

要求 指标
响应时间 查询和操作请求ms级别返回
数据总量 1年内大约有500GB的数据量
每秒请求量 每秒有3W次请求
读写比 读写比是1:1
重要程度 核心业务,P1级别故障
其他说明 数据具有时效性,历史数据访问较少,一般处理最近7天内的数据,数据总体长度约为1K

业务评估

  • step1:1年的数据量大约是500GB

结果:每秒产生的数据量为50010241024/(3652460*60)=17KB。

  • step2:每秒3W次请求;读写比是1:1

结果:每秒的读请求是15000次;每秒的写请求是15000次。

  • step3:记录的长度大约为1KB

结果:根据step1得出的结果,每秒insert的数据写入大约为17KB;根据step2得出的结果,每秒写入的请求为15000次,可知14083次为update和delete操作。由于MySQL写入操作按照页来处理,页大小为16KB,假设每次操作的页都不相同,那么每秒写操作的数量为16KB15000=234MB。每秒读操作的数量为16KB15000=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

注意:虽然日志文件是随机读写的,但是由于把几个日志文件都放到一个分区,还是可能产生随机化读写的现象。

参考资料:

  • Inexpensive SSDs for Database Workloads:

http://www.percona.com/blog/2013/10/03/inexpensive-ssds-database-workloads/

  • SSD vs HDD: which is best?:

http://www.techradar.com/news/storage/computing-components/ssd-vs-hdd-which-is-best-936111

  • Solid State Drive vs Hard Disk Drive Price andPerformance Study:

http://www.dell.com/downloads/global/products/pvaul/en/ssd_vs_hdd_price_and_performance_study.pdf

  • SSD vs HDD:

http://www.storagereview.com/ssd_vs_hdd


数据库
MySQL

Post navigation

NEXT
解决 MySQL 异常关闭的问题
PREVIOUS
Shell 编程最佳实践

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

最近文章

  • 姥姥
  • 设计一个可扩展的用户模型
  • 使用 Apple 的 Keychain 保存 SSH 的 passphase
  • 解决 ABA 问题
  • 关于 macOS 上面部分 emoji 无法显示的问题
  • 这些年我技术栈的变化
  • 搬瓦工、狗云、hostodo、oracle对比测试
  • Google Drive 无法上传文件
  • 使用 socks5 代理 git ssh 协议
  • 到底要不要“润”
  • 可复用的代码
  • 关于疫情的一点点反思
  • 我的风控策略(投资篇)
  • 我的风控策略(生活篇)
  • Spring Boot是如何处理异常的
  • 编码与解码
  • 基于统计的图像目标检索
  • 有限状态机和状态模式
  • API安全设计
  • 用户密码的存储策略

近期评论

  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • Alex发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《到底要不要“润”》
  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《我的风控策略(生活篇)》
  • ǝɔɐǝԀʎzɐɹϽ发表在《如何写出简洁优雅的代码》
  • 张志亮发表在《如何写出简洁优雅的代码》

分类

  • AI (2)
  • Java应用安全之道 (1)
    • 加密与解密 (1)
  • Odoo (2)
  • Python (1)
  • 图像处理 (1)
  • 年鉴 (1)
  • 数据库 (10)
  • 编程 (14)
    • Spring (1)
  • 读书笔记 (2)
  • 运维 (5)
  • 随笔 (10)

归档

  • 2023年1月 (2)
  • 2022年8月 (1)
  • 2022年7月 (4)
  • 2022年6月 (2)
  • 2022年5月 (2)
  • 2022年4月 (3)
  • 2021年10月 (1)
  • 2021年7月 (1)
  • 2021年5月 (1)
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年3月 (2)
  • 2020年2月 (1)
  • 2019年1月 (1)
  • 2018年12月 (2)
  • 2018年11月 (2)
  • 2017年4月 (1)
  • 2016年11月 (1)
  • 2016年9月 (1)
  • 2016年7月 (1)
  • 2016年5月 (3)
  • 2016年4月 (2)
  • 2016年3月 (1)
  • 2016年2月 (2)
  • 2015年12月 (1)
  • 2015年11月 (2)
  • 2015年8月 (1)
  • 2015年4月 (1)
  • 2015年3月 (1)

标签

Database devops Java MySQL PostgreSQL Python shell Spring SpringBoot Spring Security 安全 年鉴 总结 编程 随笔
© 2015-2023   Geektop.net All Rights Reserved.