mysql-mha高可用
一.方案介绍
在上一篇文章中已经介绍了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高可用相关推荐
- 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 ...
- MySQL MHA 高可用架构
2019独角兽企业重金招聘Python工程师标准>>> MySQL MHA 项目的地址:https://code.google.com/p/mysql-master-ha/,这个 ...
- mysql MHA高可用架构安装
是什么(是一个软件) MHA(Master High Availability)是MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完 ...
- MySQL服务MySQL+MHA高可用服务集群搭建
MySQL MHA MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 1.所有服务器,关闭系统防火墙和安全机制 2.修改 master(192.1 ...
- MySQL MHA高可用架构官方文档全文翻译
目录 MHA项目官方github地址 关于MHA 概述 主故障切换的难点 现有的解决方案和问题 MHA的架构 MHA的优势 使用案例 其他高可用解决方案和问题 纯手动解决 单主单从 一个主节点.一个备 ...
- MySQL MHA高可用集群部署及故障切换(图文详解)
文章目录 MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 实验思路 实验环境.安装包 1.所有服务器,关闭系统防火墙和安全机制 2.修改 mas ...
- MySQL MHA高可用
目录 前言 一.MHA概念 二. MHA 的组成 三. MHA 的特点 四.工作流程 五.MHA 搭建过程 六.MYSQL于MHA的搭建 1.环境需求 2.关闭安全机制 3.mysql服务器配置 4. ...
- Mysql+MHA高可用集群
http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/ 转载于:https://www.cnblogs.com/cci ...
- 理论+实验·MHA高可用配置及故障切换
这里写目录标题 MHA概述 安装MySQL数据库 配置MySQL一主两从 安装MHA软件 配置无密码认证 配置MySQL-MHA高可用 六.模拟 master 故障切换 MHA概述 传统的MySQL主 ...
- MHA高可用配置及故障切换——实验+理论!!!
文章目录 一.MHA高可用配置 1.什么是MHA 2.MHA的组成 3.为什么使用MHA? 3.1 问题 3.2 解决办法 4.MHA特点 二.MHA案例 1.案例拓扑图 2.案例思路 3.环境 4. ...
最新文章
- 从普通JAVA程序员到阿里P8架构师,他用了六年
- getAttribute与getParameter的区别
- idea 设置java内存_java相关:IntelliJ IDEA设置显示内存指示器和设置内存大小的方法...
- leetcode 413. Arithmetic Slices | 413. 等差数列划分(Java)
- ZedGraph使用经验
- 用多模态信息做 prompt,解锁 GPT 新玩法
- GitHub 被爆开始实名制,以便于执行美国贸易制裁;特斯拉推出超大储能产品Megapack;高通宣布与腾讯游戏达成战略合作……...
- 我与Python | 从Hacker到探索Deep Learning
- Spring Boot系列教程六:日志输出配置log4j2
- firebug js版
- Xamarin开发Android---提示、跳转、传递数值 (学习总结)
- centos mysql proxy_CentOS7搭建MysqlProxy实现读写分离
- C# .NET 爬虫抓取京东商城所有商品分类
- xise菜刀千万不要随便下载!(警惕!)
- 一个老程序员的阶段性总结
- 利用布尔运算可以做出怎样的PPT特效
- SQL实现次日、三日及七日用户留存率的计算
- 如何编写GIMP插件(三)
- 一文读懂 HTTP(超文本传输)协议
- 心电电路算法滤波_心电仪滤波