Mysql高可用方案之MHA

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
|
21天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
168 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
21天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
2月前
|
存储 SQL 关系型数据库
(二十三)MySQL分表篇:该如何将月增上亿条数据的单表处理方案优雅落地?
前面《分库分表的正确姿势》、《分库分表的后患问题》两篇中,对数据库的分库分表技术进行了全面阐述,但前两篇大多属于方法论,并不存在具体的实战实操,而只有理论没有实践的技术永远都属纸上谈兵,所以接下来会再开几个单章对分库分表各类方案进行落地。
115 3
|
2月前
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
20 0
|
2月前
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
17 0
|
2月前
|
安全 关系型数据库 MySQL
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
|
3月前
|
关系型数据库 MySQL 数据库
|
4月前
|
运维 容灾 关系型数据库
介绍几种 MySQL 官方高可用方案
MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。
657 3
介绍几种 MySQL 官方高可用方案
下一篇
无影云桌面