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

news2024/11/15 7:06:58

🌻🌻 目录

  • 一、选择 PerconaServer、MariaDB 还是 MYSQL
  • 二、常用的 MYSQL 调优策略
  • 三、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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1977209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ScriptEcho:AI赋能的前端代码生成神器

ScriptEcho:AI赋能的前端代码生成神器 在前端开发中,如果你总是觉得写代码太费时费力,那么 ScriptEcho 将成为你的救星。这个 AI 代码生成平台不仅能帮你省下大量时间,还能让你轻松愉快地写出生产级代码。本文将带你了解 ScriptEc…

Java中spring boot validation 自定义注解使用

创建一个注解 Target({ElementType.FIELD})//需要写注解的三三个要素 Retention(RUNTIME) Documented Constraint(validatedBy {IsSystemYesNoVaildation.class})//绑定 在这里会报错 你需要去实现 public interface IsSystemYesNo {String message() default "数据字典&…

【Python实战】如何优雅地实现文字 二维码检测?

前几篇,和大家分享了如何通过 Python 和相关库,自动化处理 PDF 文档,提高办公效率。 【Python实战】自动化处理 PDF 文档,完美实现 WPS 会员功能【Python实战】如何优雅地实现 PDF 去水印?【Python实战】一键生成 PDF…

自媒体新闻资讯类网站模板/EyouCMS自媒体资讯类网站模板

自媒体新闻资讯类网站模板,EyouCMS自媒体资讯类网站模板。模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS,完美兼容IE7、Firefox、Chrome、360浏览器等;主流浏览器;结构容易优化&#x…

U460909 [BCSP小高2024T4]先序遍历/小羊的晚餐 题解

Part.1 有关本题 本蒟蒻想起这道巧妙 又毒瘤 的题,到处搜寻提交窗口。好不容易找到窗口,有花了 3 h 3h 3h 的时间调题。 本蒟蒻为了悲剧不再发生,于是出了这道题,有写下了这篇题解以供后人。 以下的题解默认以阅读过原题。 P…

数学建模--禁忌搜索

目录 算法基本原理 关键要素 应用实例 实现细节 python代码示例 总结 禁忌搜索算法在解决哪些具体类型的组合优化问题中最有效? 禁忌搜索算法的邻域结构设计有哪些最佳实践或案例研究? 如何动态更新禁忌表以提高禁忌搜索算法的效率和性能&#…

FPGA开发——数码管数字时钟的设计

一、概述 数码管数字时钟的基本原理是通过内部的计时电路(如晶振、分频器、计数器等)产生一个稳定的时钟信号,该信号经过处理后被转换为小时、分钟和秒的时间信息。这些信息随后被发送到数码管显示模块,通过控制数码管中不同LED段…

Android读取拨号记录功能

Android读取拨号记录功能 Android读取拨号记录功能 首先会检测应用是否有读取拨号记录的权限 MainActivity.java public class MainActivity extends AppCompatActivity {private ListView listCalls;private List<Map<String, Object>> mapList;private static f…

有界,可积,存在原函数和连续的关系

目录 1.可积和有界的关系 2.连续和可积的关系 3.连续和存在原函数的关系 4.可积和存在原函数没有关系 1.可积和有界的关系 可积必有界&#xff0c;有界不一定可积&#xff0c;反例可以举狄利克雷函数 2.连续和可积的关系 f(x)连续&#xff0c;则一定可积&#xff0c;可积不…

Mac安装nvm以及配置环境变量

安装nvm brew install nvm安装成功后会出现这样一段话: Add the following to your shell profile e.g. ~/.profile or ~/.zshrc:export NVM_DIR"$HOME/.nvm"[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh&q…

Substance Painter界面介绍

1 界面介绍01_哔哩哔哩_bilibili 界面 选择texture 笔刷参数 分成不同的材质球 选择不同工具跟着变动 p4

STL序列式容器之list的使用及实现

std::list 和 std::vector 是两种不同的数据结构&#xff0c;std::vector 是基于数组的动态数组&#xff0c;而 std::list 是基于双向链表的数据结构。list适用于需要在序列中频繁执行插入和删除操作的场景。 1.list的特性 双向链表&#xff1a; list是一个双向链表&#xff…

R 语言学习教程,从入门到精通,R的安装与环境的配置(3)

1、R 基础语法 一门新的语言学习一般是从输出 “Hello, World!” 程序开始&#xff0c;R 语言的 “Hello, World!” 程序代码如下&#xff1a; myString <- "Hello, World!" print ( myString )以上示例将字符串 “Hello, World!” 赋值给 myString 变量&#x…

【hive】HiveSQL中两个json解析函数的使用json路径定位小工具

文章目录 1.HiveSQL中两个json解析函数1&#xff09;get_json_object2&#xff09;json_tuple 2.json中key所在层级路径定位小工具 关于json&#xff1a; https://blog.csdn.net/atwdy/article/details/124668815 1.HiveSQL中两个json解析函数 1&#xff09;get_json_object …

使用 Squid 搭建 Http 代理服务器隐藏 IP

在一些情况下&#xff0c;需要变更自己的访问 IP&#xff0c;可以通过 Squid 搭建代理服务器实现。 本文使用的是 CentOS 7.6 系统。 一、部署 Squid 安装 Squid。 yum install squid -y启动服 systemctl start squid二、访问控制 总有刁民想害郑&#xff0c;疯狂访问朕的…

C++ 最小生成树 洛谷

介绍&#xff1a; 最小生成树是个啥&#xff1f;其实就像杨志一行人押送生辰纲。抛开最后生辰纲被抢的结局不谈&#xff0c;杨志他们需要到好几个地方&#xff0c;每个地方都需要花点过路费给梁山好汉们打点。比如下面就是一张城市地图&#xff1a; 其中每两个图之间的路径长就…

【保姆级系列:锐捷模拟器的下载安装使用全套教程】

保姆级系列&#xff1a;锐捷模拟器的下载安装使用全套教程 1.介绍2.下载3.安装4.实践教程5.验证 1.介绍 锐捷目前可以通过EVE-NG来模拟自己家的路由器&#xff0c;交换机&#xff0c;防火墙。实现方式是把自己家的镜像导入到EVE-ng里面来运行。下面主要就是介绍如何下载镜像和…

【Unity】3D功能开发入门系列(三)

Unity3D功能开发入门系列&#xff08;三&#xff09; 一、运动脚本&#xff08;一&#xff09;物体的运动&#xff08;二&#xff09;相对运动&#xff08;三&#xff09;运动的方向 二、旋转脚本&#xff08;一&#xff09;物体的旋转&#xff08;二&#xff09;相对旋转&…

图像相关的基础知识【RGB和RGBA】—附python代码实现

文章目录 1、图像基础知识2、像素和通道的理解3、RGB和RGBARGB (Red, Green, Blue)RGBA (Red, Green, Blue, Alpha)应用场景 4、H,W,C5、小结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#x…

aurora8b10b ip的使用(framing接口下的数据回环测试)

文章目录 一、Aurora8B/10B协议二、时钟、复位与状态指示1、时钟2、复位3、状态指示 三、数据发送、接受接口&#xff08;1&#xff09;AXI4-Stream位排序&#xff08;2&#xff09;Streaming接口&#xff08;3&#xff09;Framing接口&#xff08;帧传输接口&#xff09; 四、…