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

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

一、业务需求

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

二、业务评估

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

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

MySQL数据库服务器整体规划(go)的更多相关文章

  1. MySQL数据库服务器整体规划(思路与步骤)

    MySQL数据库服务器整体规划(思路与步骤) 参考资料: http://blog.51cto.com/zhilight/1630611 我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免 ...

  2. 启用CentOS6.5 64位安装时自带的MySQL数据库服务器

    本人在虚拟机上又安装了一台linux机器,作为MySQL数据库服务器用,在安装时选择了系统自带的MySQL服务器端,以下是启用步骤. 首先开启mysqld服务 #service mysqld star ...

  3. MySQL数据库服务器的架设

    导读 MySQL数据库是Linux操作系统上用得最多的数据库系统,它可以非常方便的与其它服务器集成在一起,如Apache.Vsftpd.Postfix等.下面介绍RHEL 6平台MySQL数据库服务器 ...

  4. Geronimo应用服务器和MySQL数据库服务器

    就是Web 2.0的全部,尽管该术语出现才几乎一年的时间,但现在好像只有烹饪杂志还没有加入到讨论Web 2.0未来出路的行列中.自从出现了里程碑式的文章"What Is Web 2.0:De ...

  5. MySQL数据库服务器安装标准

    MySQL数据库服务器安装标准 (1).BIOS优化,阵列配置 1.1:关闭CPU节能,因为服务器品牌众多,BIOS设置不相同,主要是关闭CPU节能,如C1,DELLR730,已经智能设置,直接有个p ...

  6. MySQL数据库服务器(YUM)安装

    1. 概述2. 部署过程2.1 虚拟机console的NFS服务端配置2.2 虚拟机node15的NFS客户端配置2.3 虚拟机安装MySQL环境2.4 配置MySQL3. 错误及解决3.1 启动失败 ...

  7. Cacti监控mysql数据库服务器实现过程

    Cacti监控mysql数据库服务器实现过程 2014-05-29      0个评论    来源:Cacti监控mysql数据库服务器实现过程   收藏    我要投稿 1 先在cacti服务器端安 ...

  8. FAQ | 是什么导致MySQL数据库服务器磁盘I/O高(本文章来自知数堂)

    FAQ | 是什么导致MySQL数据库服务器磁盘I/O高 2016-12-26 叶金荣 老叶茶馆 0.导读 有个MySQL服务器的磁盘I/O总有过高报警,怎么回事? 本文约1500字,阅读时间约10分 ...

  9. MySQL数据库服务器 主从配置

    A B 为两台 MySQL 服务器,均开启二进制日志,数据库版本 MySQL 5.5 一.服务器参数   [A 服务器 192.168.1.100] server-id = 1 binlog-do-d ...

随机推荐

  1. VC++ 报错:Heap corruption detected

    今天在写代码时,发现莫名其妙的错误: std::string strName = L“testtest”; char* pOutString = new char(len + 1); Decrypt( ...

  2. 小程序配置单个页面导航栏的属性(微信小程序交流群:604788754)

    配置单个页面导航栏的属性: 就在所要配置页面相对应的json文件中写入以下想要设置的属性: { "navigationBarBackgroundColor": "#fff ...

  3. CentOS6编译安装Python3

    CentOS6默认Python版本是2, 但我使用的是Python3,因此需要自己安装 但记住,不要删除自带的Python2,否则很多东西会报错,比如yum之类的.(别问我为什么知道...) 话不多说 ...

  4. git push时候总提示输入账号密码,如何免除设置?

    1. 打开.ssh所在目录 home,即C:\Users\Administrator2. 在home中,进入git bash命令终端,创建.git-credentials文件,编辑 touch .gi ...

  5. python 虚拟环境 pyenv

    一.pyenv简介 pyenv 主要用来管理 Python 的版本,比如一个项目需要 Python 2.x ,一个项目需要 Python 3.x . pyenv 通过系统修改环境变量来实现 Pytho ...

  6. C++内置类型的机器实现

    大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节(byte)”,存储的基本单元称为“字(word)”,它通常有几个字节组成. 计算机以比特序列存储数据,即01000101 ...

  7. 逆向路由器固件之SQL注入 Part3

    另寻他径 在前面的内容中,我们使用TEW-654TR路由器的tftp服务实现了获取目标的管理权限.但是要是tftp没有开放到外网怎么办?另寻他径:在这一篇中会我们来分析一个web应用上的漏洞. 初步分 ...

  8. python synflood test

    #!/usr/bin/env python ######################################### # # SYNflood - A multithreaded SYN F ...

  9. Apple原装扫描二维码指定区域

    之前记录了用Apple原装的AVFoundationo类库扫描二维码:http://www.cnblogs.com/foxting/p/4733226.html,此篇记录下如何设置扫描区域. AVCa ...

  10. Oracle中varchar2类型字段长度限制使用问题

    为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...