赞
踩
高可用性(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。
如何实现高可用?
如何解决 MySQL 库的单点故障?
MMM(Multi-Master Replication Manager)是 MySQL 多组复制的简称,它是由 Perl 语言开发的用于管理 MySQL 主主同步架构的工具集。主要作用就是监控和管理 MySQL 的主主复制拓扑,并在当前的主服务器失效时,进行主和主备服务器之间的主从切换和故障转移等工作。
MMM 提供了什么功能?
监控 MySQL 主从复制健康情况(MMM 架构同一时间只有一台主服务器对外提供服务,另外的主备服务器只能用于查询);
在主库出现宕机时进行故障转移并自动配置其他从对新主的复制。
提供了一个写虚拟 IP 和多个读虚拟 IP,写虚拟 IP 只能在主数据库之间进行切换,读虚拟 IP 则可以在服务器所有主从节点进行切换。在主从服务器出现问题时可以自动迁移虚拟 IP。
MMM 架构图:
MMM 部署所需资源:
资源名称 | 数量 | 说明 |
---|---|---|
主DB服务器 | 2 | 用于主备模式的主主复制配置 |
从DB服务器 | 0-N | 可以配置0台或多台服务器,但不建议太多 |
监控服务器 | 1 | 用于监控MySQL复制集群 |
IP地址 | 2 * (N+1) | N为MySQL服务器的数量 |
监控用户 | 1 | 用于监控数据库状态的MySQL用户(replication client) |
代理用户 | 1 | 用于MMM代理的MySQL用户(super, replication client, process) |
复制用户 | 1 | 用于配置MySQL复制的MySQL用户(replication slave) |
MMM 架构优点:
MMM 架构缺点:
MHA(Master High Availability)也是由 Perl 语言开发的,在 MySQL 高可用方面是一个相对成熟的解决方案。
MHA 完成主从切换超高效,基本上在 30 秒内完成主从切换,并且在切换过程中最大程度的保证数据一致性。达到真正意义上的高可用。
MHA 提供了什么功能?
MHA 是如何进行主从切换的?
MHA 架构图:
MHA 支持 GTID 的复制,而 MMM 不支持,GTID 也是安全性比较高的一种复制模式,配合 MHA 使用也是更加的合理。
MHA 配置步骤:
MHA 架构优点:
MHA 架构缺点:
对于任何系统来说,监控都是重要的组成部分。数据库是一切系统的核心组件,数据库的稳定性从一定程度上决定了系统的稳定性,所以,对于数据库的监控,就显得尤为重要了。常见的开源监控软件有 Nagios、Zabbix。这些监控软件,或是提供了数据库监控插件,或是允许用户以插件的形式开发自己对数据库的监控脚本,并且支持的脚本语言也是多种多样的,用户完全可以按照自己的习惯,来选择自己的监控软件,以及编写适合自己的监控脚本。
对于 MySQL 来说,最基本的监控应该包含以下内容:
首先我们先来看下如何确认数据库是否可以通过网络进行连接。使用 MySQL 的本地的 SQL 文件连接数据库服务器,并不意味着可以通过网络 TCP/IP 协议能连接到 MySQL。确认数据库是否可以通过网络进行连接,通常使用以下几种方式中的一种:
可以连接到数据库并不代表数据库就是可用的,所以还需要确认数据库是否可以读写。
如何确认数据库是否可读写?
可以连接到MySQL 的线程数是有限制的,如何监控数据库的连接数?
show variables like 'max_connections'; //获取MySQL能接受最大连接数的数量
show global status like 'Threads_connected'; //获取系统变量Threads_connected的值,记录了当前数据库的连接数量
例如报警就可以当 Threads_connected / max_connections > 0.8 时,就需要报警。
性能监控不同于可用性监控,性能监控更关注的是数据库性能的变化趋势,所以在进行性能监控的脚本开发时,就需要注意记录好性能监控过程中所采集到的数据库的状态信息,以便分析数据库性能变化趋势时使用。
对于性能监控来说,可能关注最多的就是 QPS 和 TPS。
QPS = (Queries2 - Queries1) / (Uptime_since_flush_status2 - Uptime_since_flush_status1)
TPS = ((Com_insert2 + Com_update2 + Com_delete2) - (Com_insert1+ Com_update1 + Com_delete1)) /
(Uptime_since_flush_status2 - Uptime_since_flush_status1)
这几个参数获取方式:
show global status like 'Queries'
show global status like 'Uptime_since_flush_status'
show global status like 'Com_insert'
show global status like 'Com_update'
show global status like 'Com_delete'
如何监控数据库的并发请求数量?
通常情况下,数据库系统的性能会随着并发处理请求数量的增加而下降。所以并发请求数量通常还需要和 CPU 的使用率等指标结合起来分析。
数据库当前并发请求数量可以通过 show global status like ‘Threads_running’ 获取。并发处理的数量通常会远小于同一时间连接到数据库的线程的数量。
通常情况下并发请求数量是很稳定的,如果我们发现某一时刻并发量突然间增大,那么就需要检查是否出现了数据库的异常,比如数据库出现大量阻塞的情况下,就很有可能出现这种现象。
如何监控 InnoDB 的阻塞?
查询阻塞时间超过 20 秒的 SQL:
SELECT b.trx_mysql_thread_id AS '被阻塞线程'
,b.trx_query AS '被阻塞SQL'
,c.trx_mysql_thread_id AS '阻塞线程'
,c.trx_query AS '阻塞SQL'
,(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started)) AS '阻塞时间'
FROM information_schema.innodb_lock_waits a
JOIN information_schema.innodb_trx b ON a.requesting_trx_id=b.trx_id
JOIN information_schema.innodb_trx c ON a.blocking_trx_id=c.trx_id
WHERE (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started))>20
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。