热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MYSQL性能优化之Mysql数据库高可用架构设计之MMM架构设计(上)

高可用性H.A.(HighAvailability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间

高可用性H.A.(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不同。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。

使用正常可用时间和全年时间百分比来表示高可用

99999365*24*60*(1-0.99999) = 5.256分钟
  • 严重的主从延迟
  • 主从复制中断
  • 锁引起的大量阻塞
  • 软硬件故障,服务器宕机

成本和高可用性呈正相关,结合业务和成本来考虑
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

单点故障的解决

这里写图片描述

  • IDC机房
  • 网卡……

这里写图片描述

方法1:共享存储

  • 缺点:共享存储本身就是一个单点,随机IO性能不理想
  • 优点:避免除存储外其他组件

方法2:DRDB磁盘(推荐)

这里写图片描述

  • 优:数据冗余
  • 缺:故障转移所需时间比较长,备用服务器不能提供服务(包括读),成本高。磁盘文件损坏,主备文件都会损坏

这里写图片描述

这里写图片描述

  • 多写集群性能取决于最差的机器
  • 多写集群mysql写入性能肯定比单台性能差
  • 第二种比较完美,但是如果内存不足,NDB集群的性能就会非常差(很少使用到生产环境中)

这里写图片描述

面临的问题:主服务器的单点问题

这里写图片描述

MMM架构

这里写图片描述
通过监控服务器MMM和各个服务器上的监控代理软件交互来完成监控和数据库迁移的

MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制。
虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。
可以看上一篇我写的文章:主备模式的主主复制

这里写图片描述

MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。对于那些对数据的一致性要求很高的业务,非常不建议采用MMM这种高可用架构。

MMM功能

这里写图片描述
- MMM简单的找到主库的当前日志点,然后使所有的从库日志点和该日志点同步。如果在一个繁忙的系统中,很有可能对数据造成丢失的情况
- 写虚拟IP只能在两个主服务器之间切换,读虚拟IP可以在任意服务器之间切换

MMM部署所需资源

这里写图片描述

  • 两个主服务器配置要尽量相同,否则会引起性能问题
    • 查看MySQL服务器配置信息 mysql> show variables;
    • 查看MySQL服务器运行的各种状态值 mysql> show global status;
    • server_id肯定不一样
  • 从服务器分担负载,但是不能太多(出现的问题会越来越大)
  • 监控服务器监控主从复制情况和复制链路情。当出现宕机或者主从延迟大于某个阈值时,虚拟IP切换。
  • 一个监控服务器可以监控多个服务器集群,最好使用独立的服务器资源
  • 每一个数据库服务器上都会有两个IP:服务器物理IP,读需IP.主服务器需要一个写需IP

MMM部署步骤

这里写图片描述

MMM演示拓扑图

这里写图片描述

MMM演示

建立复制账号

这里写图片描述

主库备份(复制到备主服务器和从服务器)100

这里写图片描述

主主同步复制(两个主都需要复制)

备主服务器数据复制101

导入数据库,mysql -uroot -p < all.sql

查看主服务器二进制日志名字和时间点 all.sql

这里写图片描述

这里写图片描述

这里写图片描述

主服务器数据复制100

这里写图片描述

从服务器数据复制102

导入数据库,mysql -uroot -p < all.sql

查看主服务器二进制日志名字和时间点 all.sql

这里写图片描述

这里写图片描述

各个服务器优化yum源及工具安装

下载rpm包

wget http://mirrors.opencas.cn/epel/epel-release-latest-6.noarch.rpm

这里写图片描述

安装rpm

rpm -ivh epel-.....rpm
rpm -ivh remi-.....rpm

编辑配置文件

vim /etc/yum.repos.d/remi.repo

这里写图片描述

vim /etc/yum.repos.d/epel.repo

这里写图片描述

安装监控服务

yum search mmm

这里写图片描述

yum install mysql-mmm-agent.noarch -y 每个服务器都要安装的代理(3个)
安装监控服务器包
yum -y install mysql-mmm*

数据账号主创建->同步到主备,从服务器

监控用户

代理用户(故障转移,主从切换)

复制用户(复制集群时已经创建)

这里写图片描述

MMM数据库节点配置


vim /etc/mysql-mmm/mmm_common.conf(所有集群节点必须一致)

这里写图片描述

这里写图片描述

这里写图片描述

  • 统一网卡设备号
  • ips 虚拟IP

拷贝到所有其他服务器
这里写图片描述

vim /etc/mysql-mmm/mmm_agent.conf 配置各个服务器名(保证不冲突)

这里写图片描述

MMM数据库监控节点配置(监控服务器102)

vim /etc/mysql-mmm/mmm_mon.conf
  • ping_ips额外检查所需要的新IP地址,为了防止MMM切换出现脑裂,建议大家把所有的服务器ip,还有网关都写上(仲裁机制)
  • auto_set_online 主机出现问题,恢复之后在线时间

What does “split-brain” mean?(红帽文档的解释)

“Split brain” is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the cluster were intact. This is like having two governments trying to rule the same country. If multiple computers are allowed to write to the same file system without knowledge of what the other nodes are doing, it will quickly lead to data corruption and other serious problems.
Split-brain is prevented by enforcing quorum rules (which say that no group of nodes may operate unless they are in contact with a majority of all nodes) and fencing (which makes sure nodes outside of the quorum are prevented from interfering with the cluster).
解决方案:磁盘锁 仲裁机制 或者冗余心跳线等方式来解决

这里写图片描述

MMM启动

三台服务器(节点) /etc/init.d/mysql-mmm-agent start
监控服务器启动监控服务 /etc/init.d/mysql-mmm-monitor start
查看当前集群的状态 mmm_control show

这里写图片描述

这里写图片描述

虚拟IP正确配置(监控服务器)

这里写图片描述

测试

关闭主服务器

/etc/init.d/mysqld stop

监控服务器查看

mmm_control show

这里写图片描述

主从关系变化(查看配置)
show slave master 用于提供有关从属服务器线程的关键参数的信息
这里写图片描述

MMM集群优点

  • 可以使用Prel语言来自己定制
  • 主数据库IP变更后如何通知应用对新的主DB进行连接?->虚拟IP(读和写)。
  • 前端使用的是虚拟IP
  • 主从延迟过高,就会把延迟过高的服务器迁移到没有延迟的服务器上(避免了因数据延迟导致业务逻辑上的错误)
  • 原主和主备是主主同步的关系,故障服务器重新上线可以自动的对主进行同步
  • 可以对多个MMM集群进行监控,节约服务器成本

这里写图片描述

这里写图片描述

这里写图片描述

MMM集群缺点

这里写图片描述

这里写图片描述

  • 不支持gtid,多线程。
  • 主从不一致的主要原因是主是多线程的,从是单线程的。并发写压力大时,无法使用多线程同步的配置。MMM会自动把主从延迟大的从服务器读VIP迁移到其他服务器上或者主服务器上。在写并发压力大时,可能会出现读VIP全部集中到主服务器上,进而导致连接数占满或者压宕机
  • LVS F5
  • 由于mysql是异步的,不能保证日志点都是最近的,所以容易造成事务丢失或者重复提交事务(主从切换没有对比从服务器日志同步点进而选择最新的从服务器,而是主备,就是它)
  • 需要开发MMM监控服务的监控程序

推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
author-avatar
流云清动_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有