Mysql高可用方案之MHA

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 一、MHA概述 MHA是由日本Mysql专家用Perl写的一套Mysql故障切换方案以保障数据库的高可用性,它能在0-30s之内实现主Mysql故障转移。 适用场景: 个人认为此系统非常适合一主挂多从的拓扑结构。

一、MHA概述

MHA是由日本Mysql专家用Perl写的一套Mysql故障切换方案以保障数据库的高可用性,它能在0-30s之内实现主Mysql故障转移。

适用场景:

 个人认为此系统非常适合一主挂多从的拓扑结构。故障转移后,所有的slave都能自动切换到新的master上去,而且主从保持一致。
 在大规模的读写分离系统中,实用性非常强。
 其他场景有待挖掘。

优点:

 1)当master crash后,MHA自动识别slave间relay logevents的不同,然后应用到不同的slave,最终所有slave都同步。
 2)在master挂载了很多slave的场景下,当master crash后,它能自动将slave切换到新的master上去,而不发生主从一致性问题。 

缺点:

 1)在线切换时,会阻塞写操作0.5-2秒。
 2)故障转移后,原master会被踢出集群,需要重新部署才能加入集群。
 3)故障转移中的原master和新master之间的数据一致性仍然依赖半同步。

二、MHA配置

1.架构规划

需要至少3台机器,机器部署如下:

主库:192.168.66.13
备选主库:192.168.66.67
从库:192.168.66.218
MONITOR:192.168.66.91

2.配置MySQL主从复制

这个依照相关文档配置即可 http://wiki.sa.inzwc.com/wiki/index.php/Linux下MYSQL主从复制配置

3.设置SSH公钥免密码登录

有篇文档写的非常好,也不再赘述了 http://blog.163.com/lgh_2002/blog/static/44017526201011333227161/ 需要配置所有机器的双向ssh免密码登录

4.安装node及manage

Node运行在每一台MySQL服务器上,而manage安装到MONITOR机器上即可,如果资源吃紧,也可以选其中一台机器充当MONITOR。 安装node:

 shell> yum install perl-DBD-MySQL
 shell> rpm -Uvh http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.52-0.noarch.rpm 

安装manage:

 shell> yum install perl-DBD-MySQL
 shell> yum install perl-Config-Tiny
 shell> yum install perl-Log-Dispatch
 shell> yum install perl-Parallel-ForkManager
 shell> rpm -Uvh http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.52-0.noarch.rpm shell> rpm -Uvh http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.52-0.noarch.rpm

5.进行各种相关配置

1)在MONITOR节点配置全局配置文件

[server default]
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
remote_workdir=/usr/local/mysql
user=mha
password=mha
ssh_user=root
repl_user=rep
repl_password=slavepasswd
ping_interval=3
shutdown_script=""
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change_script
report_script=""
#multi_tier_slave=1
[server1]
hostname=192.168.66.13
port=3312
master_binlog_dir=/data/mysqldata/3312/binlog/
#candidate_master=1
[server2]
hostname=192.168.66.67
port=3308
master_binlog_dir=/data/mysqldata/3306/data/
candidate_master=1
[server3]
hostname=192.168.66.218
master_binlog_dir=/data/mysqldata/3306/binlog/
no_master=1

2)在manage上检查ssh连接

命令:masterha_check_ssh --conf=/etc/app1.cnf

3)在manage上检查复制配置

命令:masterha_check_repl --conf=/etc/app1.cnf

6.启动MHA

1)启动MHA进程

命令:masterha_manager --conf=/etc/app1.cnf
在生产机上使用nohup使此进程后台运行

2)检查MHA状态

命令:masterha_check_status --conf=/etc/app1.cnf

3)停止MHA

命令:masterha_stop --conf=/etc/app1.cnf

7.failover的两种方式

1)全局配置文件

将如下脚本添加至master_ip_failover_script,并赋予可执行权限。使用其他脚本也是可以的。
#!/usr/bin/env php
<?php $longopts = array(
   'command:',
   'ssh_user:',
   'orig_master_host:',
   'orig_master_ip:',
   'orig_master_port:',
   'new_master_host::',
   'new_master_ip::',
   'new_master_port::',
);

$options = getopt(null, $longopts);

if ($options['command'] == 'start') {
   $params = array(
       'ip'   => $options['new_master_ip'],
       'port' => $options['new_master_port'],
   );
 
   $string = '<?php return ' . var_export($params, true) . '; ?>';

   file_put_contents('config.php', $string, LOCK_EX);
}

exit(0);
?>

2)使用VIP方式

软件推荐keepalived,具体实现方式不再赘述

三、MHA测试

kill掉或关掉主库上的mysql,观察其他主机上的变化,并观察MONITOR上的日志观察切换是如何进行的。

观察发现,kill掉主库后,备选主库接管成为新的master,其他slave指向新的master并开始同步。旧的master被踢出集群,manage管理进程关闭。并且重启进程后,旧的master不会再次提升为master。

四、总结

经过测试和分析,得出如下结论:  MHA适合一主挂多从的场景,其故障转移后所有的slave指向新master的特性,可以很好的应用于读写分离的集群中。如果是一主多从并且写少读多,或者写入允许延迟的情况下,也可以启用半同步来保证数据的一致性。

五、参考资料

1.官方文档 https://code.google.com/p/mysql-master-ha/

2.MySQL高可用性大杀器之MHA http://huoding.com/2011/12/18/139

3.mysql-mha高可用 http://blog.chinaunix.net/uid-28437434-id-3476641.html



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
455 3
Mysql高可用架构方案
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
48 9
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
Aurora MySQL负载突增应对策略与优化方案
通过以上策略,企业可以有效应对 Aurora MySQL 的负载突增,确保数据库在高负载情况下依然保持高性能和稳定性。这些优化方案涵盖了从架构设计到具体配置和监控的各个方面,能够全面提升数据库的响应速度和处理能力。在实际应用中,应根据具体的业务需求和负载特征,灵活调整和应用这些优化策略。
68 22
MySQL 分库分表方案
本文总结了数据库分库分表的相关概念和实践,针对单张表数据量过大及增长迅速的问题,介绍了垂直和水平切分的方式及其适用场景。文章分析了分库分表后可能面临的事务支持、多库结果集合并、跨库join等问题,并列举了几种常见的开源分库分表中间件。最后强调了不建议水平分库分表的原因,帮助读者在规划时规避潜在问题。
327 20
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
130 5
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
100 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等