一.方案介绍

在上一篇文章中已经介绍了mmm方案,接下来介绍一下mha方案,mha方案在淘宝和58同城有在使用。MHA(mysql-master-ha)。

MHA有以下一些特点

1.主服务器的自动监控和故障转移

MHA监控复制架构的主服务器,一旦检测到主服务器故障,就会自动进行故障转移。即使有些从服务器没有收到最新的relay log,MHA自动从最新的从服务器上识别差异的relay log并把这些日志应用到其他从服务器上,因此所有的从服务器保持一致性了。MHA通常在几秒内完成故障转移,9-12秒可以检测出主服务器故障,7-10秒内关闭故障的主服务器以避免脑裂,几秒中内应用差异的relay log到新的主服务器上,整个过程可以在10-30s内完成。还可以设置优先级指定其中的一台slave作为master的候选人。由于MHA在slaves之间修复一致性,因此可以将任何slave变成新的master,而不会发生一致性的问题,从而导致复制失败。

2.交互式主服务器故障转移

可以只使用MHA的故障转移,而不用于监控主服务器,当主服务器故障时,人工调用MHA来进行故障故障。

3. 非交互式的主故障转移

不监控主服务器,但自动实现故障转移。这种特征适用于已经使用其他软件来监控主服务器状态,比如heartbeat来检测主服务器故障和虚拟IP地址接管,可以使用MHA来实现故障转移和slave服务器晋级为master服务器。

4.在线切换主服务器

在许多情况下,需要将现有的主服务器迁移到另外一台服务器上。比如主服务器硬件故障,RAID控制卡需要重建,将主服务器移到性能更好的服务器上等等。维护主服务器引起性能下降,导致停机时间至少无法写入数据。另外,阻塞或杀掉当前运行的会话会导致主主之间数据不一致的问题发生。MHA提供快速切换和优雅的阻塞写入,这个切换过程只需要0.5-2s的时间,这段时间内数据是无法写入的。在很多情况下,0.5-2s的阻塞写入是可以接受的。因此切换主服务器不需要计划分配维护时间窗口(呵呵,不需要你在夜黑风高时通宵达旦完成切换主服务器的任务)。

二.方案部署

1.MHA方案的优缺点

优点:相比mmm方案可以自动同步差异的日志,可以自己写故障转移的脚本,比较灵活

缺点:如果故障转移了需要重新修改配置文件,重新启动masterha_manager服务

2.安装部署

服务器IP

角色 OS mysql 说明
10.1.10.24 Monitor节点 Centos 5.5 64bit ---
10.1.10.4 Master 节点 Centos 5.5 64bit Mysql5.5.18
10.1.10.16

Slave节点(master替补节点)

Centos 5.5 64bit Mysql5.5.18
10.1.10.70 Slave Centos 5.5 64bit Mysql5.5.18

2. 在数据库节点安装node

首先安装yum -y install perl-DBD-MySQL

tar -zxvpf mha4mysql-node-0.54.tar.gz

perl Makefile.PL

make && make install

3. 在管理节点安装mha manager

yum install perl-DBD-MySQL

yum install perl-Config-Tiny

yum install perl-Log-Dispatch

yum install perl-Parallel-ForkManager

yum install perl-Config-IniFiles

tar -zxvpf mha4mysql-manager-0.54.tar.gz

perl Makefile.PL

make && make install

4.编辑管理节点的配置文件

mkdir /etc/masterha

mkdir -p /masterha/app1

cp samples/conf/* /etc/masterha/

cat /etc/masterha/app1.cnf

[server default]

manager_workdir=/masterha/app1

manager_log=/masterha/app1/manager.log

user=mha_mon

password=123456

ssh_user=root

repl_user=repl

repl_password=replPAS

ping_interval=1

shutdown_script=""

master_ip_online_change_script=""

report_script=""

#master_ip_failover_script="/usr/local/bin/master_ip_failover"

[server1]

hostname=10.1.10.4

master_binlog_dir=/data/dbdata/mysqllog/binlog

candidate_master=1

[server2]

hostname=10.1.10.16

master_binlog_dir=/data/dbdata/mysqllog/binlog

candidate_master=1

[server3]

hostname=10.1.10.70

master_binlog_dir=/data/dbdata/mysqllog/binlog

5.配置机器之间相互ssh的访问

在每台机器上面执行ssh-keygen -t rsa,会生成两个文件id_rsa和Identity.pub。

在10.1.10.27点上执行

ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.1.10.4

ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.1.10.16

ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.1.10.70

同理在其余的三台机器上面也把分别自己的rsa传到剩余的机器上面,这样这四台机器之间就可以相互ssh登陆了。

6.测试ssh连接

masterha_check_ssh --conf=/etc/masterha/app1.cnf

如果正常,会显示MySQL Replication Health is OK.

7.建立mha监控访问账号

GRANT ALL PRIVILEGES ON *.* TO 'mha_mon'@'10.1.10.%' IDENTIFIED BY ‘123456’

8.测试机器之间的复制连接

masterha_check_repl --conf=/etc/masterha/app1.cnf

如果正常,会显示MySQL Replication Health is OK

9.启动管理几点的进程

nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log< /dev/null 2>&1 &

10.检查MHA的状态

masterha_check_status --conf=/etc/masterha/app1.cnf

如果正常,会显示[PING_OK],否则会显示[NOT_RUNNING]

3.故障转移测试

关闭master 10.1.10.4的mysql服务,slave 10.1.10.16升级为master ,slave 10.1.10.70的maseter

连接指向了10.1.10.16,自动完成了切换。Master 10.1.10.4节点从集群中排除。

切换的日志如下:

----- Failover Report -----

app1: MySQL Master failover 10.1.10.4 to 10.1.10.16 succeeded

Master 10.1.10.4 is down!

Check MHA Manager logs at localhost:/masterha/app1/manager.log for details.

Started automated(non-interactive) failover.

The latest slave 10.1.10.16(10.1.10.16:3306) has all relay logs for recovery.

Selected 10.1.10.16 as a new master.

10.1.10.16: OK: Applying all logs succeeded.

10.1.10.70: This host has the latest relay log events.

Generating relay diff files from the latest slave succeeded.

10.1.10.70: OK: Applying all logs succeeded. Slave started, replicating from 10.1.10.16.

10.1.10.16: Resetting slave info succeeded.

Master failover to 10.1.10.16(10.1.10.16:3306) completed successfully.

虽然这里完成了slave到master的升级切换,但是对于前段应用程序来说,还要更换IP地址,这是比较麻烦的。那么如何通知前端应用程序呢?这里需要在配置文件中设置如下两个参数。

u master_ip_failover_script

u master_ip_online_change_script

说到Failover,通常有两种方式:一种是虚拟IP地址,一种是全局配置文件。MHA并没有限定使用哪一种方式,而是让用户自己选择,虚拟IP地址的方式会牵扯到其它的软件(vrrpd).

如果要测试效果的话,可以kill掉当前的MySQL主服务器,稍等片刻,MHA就会把某台MySQL从服务器提升为新的MySQL主服务器,并调用master_ip_failover_script脚本,我们在master_ip_failover_script脚本里可以把新的MySQL主服务器的ip和port信息持久化到配置文件里,这样应用就可以使用新的配置了。

有时候需要手动切换MySQL主服务器,可以使用masterha_master_switch命令,不过它调用的不是master_ip_failover_script脚本,而是master_ip_online_change_script脚本,但调用参数类似,脚本可以互用。

三.MHA适用于的复制

1.单个master,多个 slaves

M(RW)M(RW), promoted from S1

||

+------+------+--(master crash)-->+-----+-----+

S1(R) S2(R)S3(R)S2(R)S3(R)

M服务器down掉,s1升级为M. 这是一种最常见的结构。

2.单个master,多个slave(其中一个slave是远程的数据中心,不作为升级master的目标)

M(RW)M(RW), promoted from S1

||

+------+---------+--(master crash)-->+-----+------+

S1(R) S2(R)Sr(R,no_master=1) S2(R)Sr(R,no_master=1)

需在配置文件sr机器设置no_master=1

3.单个master,多个slave,一个候选master

M(RW)-----S0(R,candidate_master=1)M(RW), promoted from S0

||

+----+----+--(master crash)-->+----+----+

S1(R)S2(R)S1(R)S2(R)

需在配置文件s0机器设置candidate_master=1

4.多台master,多个slave

M(RW)<--->M2(R,candidate_master=1)M(RW), promoted from M2

||

+----+----+--(master crash)-->+----+----+

S(R)S2(R)S1(R)S2(R)

需在配置文件M2机器设置candidate_master=1

5.三层复制结构

M(RW)M(RW), promoted from S1

||

+------+---------+--(master crash)-->+-----+------+

S1(R) S2(R)Sr(R)S2(R)Sr(R)

||

++

Sr2Sr2

Sr2不要在配置文件中配置

6.三层复制结构,多个master

M1(host1,RW) <-----------------> M2(host2,read-only)

||

+-----+--------++

S1(host3,R)S2(host4,R)S3(host5,R)

=> After failover

M2(host2,RW)

|

+--------------+--------------------------+

S1(host3,R)S2(host4,R)S3(host5,R)

[server default]

multi_tier_slave=1

[server1]

hostname=host1

candidate_master=1

[server2]

hostname=host2

candidate_master=1

[server3]

hostname=host3

[server4]

hostname=host4

[server5] hostname=host5

转载于:https://blog.51cto.com/appoint/1288311

mysql-mha高可用相关推荐

  1. mysql mha配置文件详解_十四、MySQL MHA 高可用配置(一)

    MHA 高可用 1.准备三台机器 IP:10.0.0.51 主机名:db01 内存:2G IP:10.0.0.52 主机名:db02 内存:2G IP:10.0.0.53 主机名:db03 内存:2G ...

  2. MySQL MHA 高可用架构

    2019独角兽企业重金招聘Python工程师标准>>> MySQL MHA   项目的地址:https://code.google.com/p/mysql-master-ha/,这个 ...

  3. mysql MHA高可用架构安装

    是什么(是一个软件) MHA(Master High Availability)是MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完 ...

  4. MySQL服务MySQL+MHA高可用服务集群搭建

    MySQL MHA MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 1.所有服务器,关闭系统防火墙和安全机制 2.修改 master(192.1 ...

  5. MySQL MHA高可用架构官方文档全文翻译

    目录 MHA项目官方github地址 关于MHA 概述 主故障切换的难点 现有的解决方案和问题 MHA的架构 MHA的优势 使用案例 其他高可用解决方案和问题 纯手动解决 单主单从 一个主节点.一个备 ...

  6. MySQL MHA高可用集群部署及故障切换(图文详解)

    文章目录 MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 实验思路 实验环境.安装包 1.所有服务器,关闭系统防火墙和安全机制 2.修改 mas ...

  7. MySQL MHA高可用

    目录 前言 一.MHA概念 二. MHA 的组成 三. MHA 的特点 四.工作流程 五.MHA 搭建过程 六.MYSQL于MHA的搭建 1.环境需求 2.关闭安全机制 3.mysql服务器配置 4. ...

  8. Mysql+MHA高可用集群

    http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/ 转载于:https://www.cnblogs.com/cci ...

  9. 理论+实验·MHA高可用配置及故障切换

    这里写目录标题 MHA概述 安装MySQL数据库 配置MySQL一主两从 安装MHA软件 配置无密码认证 配置MySQL-MHA高可用 六.模拟 master 故障切换 MHA概述 传统的MySQL主 ...

  10. MHA高可用配置及故障切换——实验+理论!!!

    文章目录 一.MHA高可用配置 1.什么是MHA 2.MHA的组成 3.为什么使用MHA? 3.1 问题 3.2 解决办法 4.MHA特点 二.MHA案例 1.案例拓扑图 2.案例思路 3.环境 4. ...

最新文章

  1. 从普通JAVA程序员到阿里P8架构师,他用了六年
  2. getAttribute与getParameter的区别
  3. idea 设置java内存_java相关:IntelliJ IDEA设置显示内存指示器和设置内存大小的方法...
  4. leetcode 413. Arithmetic Slices | 413. 等差数列划分(Java)
  5. ZedGraph使用经验
  6. 用多模态信息做 prompt,解锁 GPT 新玩法
  7. GitHub 被爆开始实名制,以便于执行美国贸易制裁;特斯拉推出超大储能产品Megapack;高通宣布与腾讯游戏达成战略合作……...
  8. 我与Python | 从Hacker到探索Deep Learning
  9. Spring Boot系列教程六:日志输出配置log4j2
  10. firebug js版
  11. Xamarin开发Android---提示、跳转、传递数值 (学习总结)
  12. centos mysql proxy_CentOS7搭建MysqlProxy实现读写分离
  13. C# .NET 爬虫抓取京东商城所有商品分类
  14. xise菜刀千万不要随便下载!(警惕!)
  15. 一个老程序员的阶段性总结
  16. 利用布尔运算可以做出怎样的PPT特效
  17. SQL实现次日、三日及七日用户留存率的计算
  18. 如何编写GIMP插件(三)
  19. 一文读懂 HTTP(超文本传输)协议
  20. 心电电路算法滤波_心电仪滤波

热门文章

  1. 转载:每一个程序员要遵守的一些优秀编程风格
  2. iOS 模糊化效果 ANBlurredImageView的使用
  3. Top 10 steps to optimize data access in SQL Server
  4. 对软件体系结构的认识
  5. MONO Design创建电信3D机房
  6. 人生的84000种可能
  7. 我在PMCAFF,感觉身体被掏空
  8. shell变量,管道符,作业控制,shell变量,以及变量配置文件
  9. mysql优化概述4
  10. 小白学数据分析-----从购买记录分析道具支付环节