MySQL企业常见架构与调优经验分享
Percona Server、MariaDB和MySQL选择
- Percona Server分支 Percona Server是由领先的MySQL咨询公司Percona发布。
Percona Serve是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代友的情况下将存储引擎更换成XtraDB,是最接近官方MySQL Enterprise发行版本的版本。
percona 提供了高性能的XtraDB引擎,还提供了Pxc高可用解决方案,并且附带了 percona-toolkit等dba管理工具箱。 - MariaDB
MariaDB是由MySQL创始人开发的,完全兼容MySQL,10.0.9版本使用XtraDB(代号为Aria)来代替MySQL的InnoDB。
安装:yum install mariadb-server
- 怎么选择
一般首选 Percona分支,其次是MariaDB(改动了很多源码)
常见的MySQL调优策略
1、 硬件层相关优化
修改服务器bios设置
. 选择Performance Per wait(optimeized(DAPC)模式,发挥cpu最大性能。
. MemoryFrequency(内存频率) 选择Maximum Performance(最佳性能)
. 内存设置菜单中,启用Node Interleaving,避免NUMA问题。
2、 磁盘I/O相关
. 使用ssd磁盘
. 如果是使用磁盘阵列的,配置raid卡的cache和BBU模块。
. raid级别尽量选择raid10,而不是raid 5
3、 文件系统层优化
. 使用deadline/noop这两种I/O调度器,千万别用cfq。
[root@gitlab ~]# cat /sys/block/sda/queue/scheduler noop deadline [cfq] [root@gitlab ~]#
. 使用xfs文件系统,千万别用ext3,ext4勉强可用,但业务量很大的话,则一定要用xfs;
. 文件系统mount参数中增加:noatime,nodiratime,nobarrier几个选项(nobarrier是xfs文件系统有的)
4、 内核参数优化 . 修改vm.swappiness参数,降低swap使用率,一般是设置成5~10。Centos7以下则慎重设置为0,可能发生OOM,
[root@gitlab ~]# cat /proc/sys/vm/swappiness 60 [root@gitlab ~]#
. 调整vm.dirtybackgroundratio、vm.dirtyratio内核参数,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生等待。
vm.dirtybackground_ratio: 这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存;vm.dirty_ratio: 而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
[root@gitlab ~]# cat /proc/sys/vm/dirty_background_ratio 10 [root@gitlab ~]# cat /proc/sys/vm/dirty_ratio 20
. 调整net.ipv4.tcptwrecycle、net.ipv4.tcp_twreuse都设置为1,减少TIMEWAIT,提高TCP效率。(这个参考timeout设置篇,不一定都设置为1,要看情况。)/proc/sys/net/ipv4/tcp_tw_recycle
5、Mysql参数优化建议
. 建议使用default-storage-engine=InnoDB
. 调整innodb_buffer_pool_size的大小,如果是单实例且绝大多数是InnoDb引擎表的话,可考虑设置为物理内存的50%~70%左右。
. 设置innodb_file_per_table=1,使用独立表空间。
. 调整innodb_data_file_path = ibdata1:1G:autoextend,建议不要使用默认的10M,在高并发场景下,性能会有很大提升。
. 设置innodb_log_file_size=256M,设置innodb_log_files_in_group=2(两组或个log_file日志的意思,备份的意思),基本可以满足大多数应用场景。
. 调整max_connection(最大连接数)、max_connection_error(最大错误数)设置,根据业务量大小进行设置。
. 另外,open_files_limit、innodb_open_files、table_cache、table_definition_cache可以设置大约为max_connection的10倍左右大小。
. key_buffer_size建议调小,32M左右即可,另外建议关闭querycache。
. tmp_table_size和max_heap_table_size设置不要过大,另外sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size等设置不要过大。
MySQL常见的应用架构分享
1、主从复制解决方案
keepalieved(双主,但同时只有一个库在写)
2、 MMM/MHA
3、PXC
4、drbd
原文链接:MySQL企业常见架构与调优经验分享,转载请注明来源!