五、MYSQL企业常用架构与调优经验理论篇

🌻🌻 目录

  • [一、选择 PerconaServer、MariaDB 还是 MYSQL](#一、选择 PerconaServer、MariaDB 还是 MYSQL)
  • [二、常用的 MYSQL 调优策略](#二、常用的 MYSQL 调优策略)
  • [三、MYSOL 常见的应用架构分享](#三、MYSOL 常见的应用架构分享)
  • [四、MYSOL 经典应用架构](#四、MYSOL 经典应用架构)

注:全是理论干货,没有实战,想看实战的绕路哦!!!

选择 Percona Server、MariaDB 还是 MYSQL

  • 常用的 MYSQL调优策略
  • MYSQL常见的应用架构分享
  • MYSQL经典应用架构

一、选择 PerconaServer、MariaDB 还是 MYSQL

  • 1、Mysql 三种存储引擎
    MySQL 提供了两种存储引擎:MyISAMInnoDB,MSQL4 和5使用默认的 MYISAM 存储引擎。从 MYSQL5.5 开始,MySQL 已将默认存储引擎从 MyISAM 更改为 InnoDB。MyISAM 没有提供事务支持,而InnoDB 提供了事务支持。MyISAM是传统型的存储引擎,最大的缺点就是不支持事务,所谓事务 ,就是与业务相关的,数据进行读写的时候有个锁机制,这个锁只能等另外一个操作或事务完成之后释放这么个锁,正因为不支持事务,所以在读写方面性能稍微好一点,InnoDB 可以做回滚操作,安全方面相对稍微好一点。
    XtraDB 是 InnoDB 存储引擎的增强版本,被设计用来更好的使用更新计算机硬件系统的性能,同时还包含有一些在高性能环境下的新特性。
  • 2、Percona Server分支
    PerconaServer 由领先的 MYSQL 咨询公司 Percona 发布。Perconaserver 是一款独立的数据库产品,其可以完全与 MQL 兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB。是最接近官方 MySQLEnterprise 发行版的版本。Percona 提供了高性能 XtraD8 引擎,还提供 PXC 高可用解决方案,并且附带了percona-toolkit 等 DBA 管理工具箱。
  • 3、MariaDB
    MariaDB 由 MQL的创始人开发,MariaDB的目的是完全兼容 MySQL,包括 API和命令行,使之能轻松成为 MySOL 的代替品。
    MariaDB 提供了 MyQL 提供的标准存储引擎,即 MYSAM 和 InnoDB,10.0.9 版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。
  • 4、如何选择
    综合多年使用经验和性能对比,首选Percona 分支,其次是 MariaDB,如果你不想冒一

二、常用的 MYSQL 调优策略

  • 1、硬件层相关优化
    修改服务器 BIOS 设置
    选择 PerformancePerWattOptimized(DAPC)模式,发挥 CPU 最大性能。MemoryFrequency(内存频率)选择MaximumPerformance(最佳性能)内存设置菜单中,启用 NodeInterleaving,避免 NUMA 问题
  • 2、磁盘 I/0 相关
    使用 SSD 硬盘
    如果是磁盘阵列存储,建议阵列卡同时配备 CACHE及 BBU 模块,可明显提升 IOPS。
    raid 级别尽量选择 raid10,而不是 raid5.
  • 3、文件系统层优化
    使用 deadline/noop 这两种 I/0 调度器,千万别用 cfq
    使用 xs 文件系统,千万别用 ext3: ext4 勉强可用,但业务量很大的话,则一定要用 xfs;文件系统 mount 参数中增加:noatime,nodiratime,nobarrier几个选项(nobarrier是xfs文件系统特有的);
  • 4、内核参数优化
    修改 vm.swappiness 参数,降低 swap 使用率。RHEL7/centos7 以上则慎重设置为 0,可能发生 OOM
    调整 vm.dirty badkground rato、vm.dirty_rato 内核参数,以确保能持续将脏数据刷新到磁盘,避免瞬间 I/0 写。产生等待。
    调整 netipv4.tcp tw_recyce、net.ipv4.tcp tw_reuse 都设置为 1,减少 TIME WAIT,提高 TCP 效率。
  • 5、Mysql 参数优化建议
    建议设置 default-storage-engine=lnnoDB,强烈建议不要再使用 MyISAM 引擎。调整 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,基本可以满足大多数应用场景。
    调整 max_connection(最大连接数)、max_connection_error(最大错误数)设置,根据业务量大小进行设置。
    另外,open_files limit、innodb_open files、table_open_cache 、table_definition_cache可以设置大约为 max connection 的 10 倍左右大小。
    key_buffer_size 建议调小,32M 左右即可,另外建议关闭 queny cache。
    mp_table_size 和 max_heap_table_size 设置不要过大,另外 sort buffer_size、
    join_buffer_size、read buffer_size、read _rnd buffer_size 等设置也不要过大。

三、MYSOL 常见的应用架构分享

  • 1、主从复制解决方案
    这是 MySQL 自身提供的一种高可用解决方案,数据同步方法采用的是 MyQLreplicaton技术。MySQLrepication 就是从服务器到主服务器拉取二进制日志文件,然后再将日志文件解析成相应的 SQL 在从服务器上重新执行一遍主服务器的操作,通过这种方式保证数据的一致性。
    为了达到更高的可用性,在实际的应用环境中,一般都是采用 MySQLreplication 技术配合高可用集群软件 keepalived 来实现自动 failover,这种方式可以实现 95.000%的 SLA。
  • 2、MMM/MHA 高可用解决方案
    MMM 提供了 MySQL主封复制配置的监控、故障转移和管理的一套可伸缩的脚本套件。
    在 MMM 高可用方案中,典型的应用是双主多从架构,通过 MySQLreplication 技术可以实现两个服务器互为主从,且在任何时候只有一个节点可以被写入,避免了多点写入的数据冲突。同时,当可写的主节点故障时,MMM 套件可以立刻监控到,然后将服务自动切换到另一个主节点,继续提供服务,从而实现 MySQL的高可用。
  • 3、Heartbeat/SAN 高可用解决方案
    在这个方案中,处理 failover 的方式是高可用集群软件 Heartbeat,它监控和管理各个节点间连接的网络,并监控集群服务,当节点出现故障或者服务不可用时,自动在其他节点启动集群服务。在数据共享方面,通过 SAN(Storage AreaNetwork存储来共享数据,这种方案可以实现 99.990%的 SLA。
  • 4、Heartbeat/DRBD 高可用解决方案
    此方案处理failover 的方式上依旧采用 Heartbeat,不同的是,在数据共享方面,采用了基于块级别的数据同步软件 DRBD 来实现。DRBD 是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。和 SAN 网络不同,它并不共享存储,而是通过服务器之间的网络复制数据。

四、MYSOL 经典应用架构

其中:

Dbm157是mysql 主,dbm158 是 mysql主的备机,dbs159/160/161 是 mysql 从。MySQL 写操作一般采用基于 heartbeat+DRBD+MySQL 搭建高可用集群的方案。通过 heartbeat实现对 mysql 主进行状态监测,而 DRBD 实现 dbm157 数据同步到 dbm158。

相关推荐
程序猿进阶18 分钟前
ThreadLocal 释放的方式有哪些
java·开发语言·性能优化·架构·线程池·并发编程·threadlocal
warrah5 小时前
mysql主从同步
mysql·主从
JSON_L6 小时前
MySQL 事务处理
数据库·mysql
飞翔沫沫情8 小时前
mysql快速定位cpu 占比过高的sql语句
mysql
huaqianzkh9 小时前
使用 Parallel 类进行多线程编码(上)
开发语言·架构
King.6249 小时前
SQLynx如何提高企业数据库安全?
数据库·sql·mysql·postgresql·oracle
ahauedu9 小时前
Spring Boot3项目的常见通用整体架构
spring boot·后端·架构
夜夜亮晶晶10 小时前
MySQL——表操作
数据库·mysql
GGBondlctrl11 小时前
【MySQL】初识MySQL—MySQL是啥,以及如何简单操作???
数据库·mysql
cool 32113 小时前
MySQL—死锁
数据库·mysql