Mysql高可用方案之MHA

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 一、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



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 存储 关系型数据库
MySQL索引(二)索引优化方案有哪些
MySQL索引(二)索引优化方案有哪些
56 0
|
5天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
5天前
|
Kubernetes 关系型数据库 MySQL
MySQL在Kubernetes上的高可用实现
【5月更文挑战第1天】
|
6天前
|
安全 关系型数据库 MySQL
CentOS 7系统加固详细方案SSH FTP MYSQL加固
CentOS 7系统加固详细方案SSH FTP MYSQL加固
|
16天前
|
缓存 关系型数据库 MySQL
【专栏】提升MySQL性能和高可用性的策略,包括索引优化、查询优化和事务管理
【4月更文挑战第27天】本文探讨了提升MySQL性能和高可用性的策略,包括索引优化、查询优化和事务管理。通过合理使用B-Tree和哈希索引,避免过度索引,以及优化查询语句和利用查询缓存,可以改善性能。事务管理中,应减小事务大小并及时提交,以保持系统效率。主从或双主复制可增强高可用性。综合运用这些方法,并根据实际需求调整,是优化MySQL的关键。
|
20天前
|
监控 关系型数据库 MySQL
MySQL高可用集群之MySQL-MMM
MySQL高可用集群之MySQL-MMM
|
1月前
|
存储 SQL 分布式计算
搭建Mysql Cluster集群实现高可用
搭建Mysql Cluster集群实现高可用
19 0
|
1月前
|
关系型数据库 MySQL Linux
centos7下 Mysql+Keepalived 双主热备高可用图文配置详解
centos7下 Mysql+Keepalived 双主热备高可用图文配置详解
29 0
|
2月前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
98 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
73 1

推荐镜像

更多