Mysql 的高可用之 MHA

                                                                    Mysql 的高可用之 MHA

MHA作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA
Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA
Node运行在每台MySQL服务器上,MHA
Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其
他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。

MHA工作原理

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log) 到其他slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新master;

(6)使用其他的slave连接新的master进行复制。

MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。

Manager工具包主要包括以下几个工具:

masterha_check_ssh              检查MHA的SSH配置状况masterha_check_repl             检查MySQL复制状况masterha_manger                 启动MHAmasterha_check_status           检测当前MHA运行状态masterha_master_monitor         检测master是否宕机masterha_master_switch          控制故障转移(自动或者手动)masterha_conf_host              添加或删除配置的server信息

Node工具包主要包括以下几个工具:save_binary_logs                保存和复制master的二进制日志apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slavefilter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)purge_relay_logs                清除中继日志(不会阻塞SQL线程)

配置环境,高可用要在主从复制基础前提下实现

实验:

Monitor host and master     server1      192.168.122.11
Candicate master                 server2       192.168.122.12

Slave                                     server3        192.168.122.13

首先确保主从复制

查看slave状态时发现,IO线程为NO;


如下解决:

重启master库:/etc/init.d/mysqld restart

mysql> show master status;

关闭slave,mysql> slave stop;

mysql> change master to master_log_file='binlog.000004',master_log_pos=154;

如下,已经OK!


继续实验:

主上授权  mysql> grant replication slave on *.* to [email protected]'192.168.122.%' identified by 'LH=liuhuan123';

两从        mysql> change master to master_host='192.168.122.11',master_user='cara',master_password='LH=liuhuan123',master_log_file='mysql-bin.000003',master_log_pos=1401;

最好禁掉密码插件(server2,3同理)

[[email protected] ~]# vim /etc/init.d/mysqld

一、进行环境配置

在master上进行授权

修改配置文件my.cnf

master(server1)

slave(server2)

slave (server3)

查看状态


二、安装 MHA 及相关配置

1)Server1 安装

mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm
perl-Log-Dispatch-2.27-1.el6.noarch.rpm
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm
perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm

Server2,3 安装
mha4mysql-node-0.56-0.el6.noarch.rpm

2).编辑配置文件

将配置文件拷贝到指定目录下

修改配置文件

[server default]
user=root
password=LH=liuhuan123
ssh_user=root
repl_password=LH=liuhuan123
repl_user=repl
master_binlog_dir=/var/lib/mysql
remote_workdir=/tmp
ping_interval=1
#master_ip_failover_script=/script/masterha/master_ip_failover
#shutdown_script=/script/masterha/power_manager
#report_script=/script/masterha/send_report
#master_ip_online_change_script=/script/masterha/master_ip_online_change
#secondary_check_script=masterha_secondary_check -s remote_host1 -s
remote_host2
manager_workdir=/usr/local/masterha/   

manager_log=/usr/local/masterha/manager.log

[server1]
hostname=192.168.122.11

[server2]
hostname=192.168.122.12
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.122.13
no_master=1

3).使 master 和 slave 相互之间可以无密码连接

[[email protected] masterha]# ssh-keygen -t rsa
[[email protected] masterha]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

[[email protected] masterha]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

[[email protected] masterha]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

三、测试及结果

[[email protected] masterha]# masterha_check_ssh --conf=/usr/local/masterha/app1.cnf

[[email protected] masterha]# masterha_check_repl --conf=/usr/local/masterha/app1.cnf


分析报错后发现时没有在master端给prel和root授权的缘故


mysql> grant replication slave on *.* to [email protected]'%' identified by 'LH=liuhuan123';

mysql> grant replication slave on *.* to [email protected]'%' identified by 'LH=liuhuan123';


建立授权用户

授权后,可远程登录

mysql> grant all on *.* to [email protected]'%' identified by 'LH=liuhuan123';


测试,master是否切换

[[email protected] masterha]# nohup masterha_manager --conf=/usr/local/masterha/app1.cnf &  在管理主机启动管理程序

[[email protected] masterha]# pkill -9 mysqld    杀掉master端的进程

在server2和server3上查看

server2已经继承master

server3上看到master状态已经变为server2

手动切换:当master端数据库关掉后可用下面手动方法切换

masterha_master_switch --master_state=dead --conf=/usr/local/masterha/app1.cnf --dead_master_host=192.168.122.12   --dead_master_port=3306 --new_master_host=192.168.122.11 --new_master_port=3306 --ignore_last_failover

手动热切换:可以在master正常工作时使其数据库关掉,让备用mastre机接替其工作

masterha_master_switch --conf=/usr/local/masterha/app1.cnf --master_state=alive --new_master_host=192.168.122.12 --new_master_port=3306  --orig_master_is_new_slave --running_updates_limit=10000

当把master切换到备用master上时,若再次想切回master,需要手动将备master和slave上做change master

备用master上:

查看日志 [[email protected] ~]# cat /var/log/mysqld.log 


slave端:

网上查找得如下:

不带MASTER_LOG_FILE,MASTER_LOG_POS参数,执行change master 语句,按照mysql官方文档的说法,执行语句后的复制点应该与之前的复制点一致

测试: 停掉备用主机的io,然后在master主机加入数据,造成备用master和master主机二进制数据不一致,然后关掉master主机的mysql,执行manager命令,使备用master成为master,看数据是否会一致

change master to master_host='192.168.122.11', master_user='cara', master_password='LH=liuhuan123', master_auto_position=1;   #使master指向server1(注意:每次执行需删除app1.failover.complete,否则出错)

1)stop slave io_thread;  停掉备用主机io线程(server2)


2)在主master主机插入数据(server1)

3)在另一台slave中查看数据是否同步过去(server3)



4)主master上,关掉mysql

5)使备用成为master后,查看数据是否根据差异日志恢复过来

slave端master已经改变


再切回master

server2上:  指定master_auto_position=1,不会遇到上面change master 时的错误;

server3上:

四、使用脚本控制master状态


将所需脚本移至指定目录

修改app1.cnf文件

vim master_ip_failover  #给master添加虚拟ip

vim master_ip_online_change #同样只需添加虚拟ip

vim send_report  #添加邮箱和密码

chmod +x send_report master_ip_failover master_ip_online_change   #给脚本添加执行权限

在测试时需要虚拟机进行联网

在物理主机添加路由

[[email protected] MHA]# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE

在需要联网的虚拟机上添加网关,为物理机ip

[[email protected] masterha]# vim /etc/sysconfig/network-scripts/ifcfg-eth0或

[[email protected] masterha]#route add default gw 192.168.122.1

添加本地解析,使其可以上网

[[email protected] masterha]# vim /etc/resolv.conf


重启网络使其生效

[[email protected] masterha]# /etc/init.d/network restart 



以上可以实现邮件报警!

[[email protected] masterha]# masterha_master_switch --conf=/usr/local/masterha/app1.cnf --master_state=alive --new_master_host=192.168.122.11 --new_master_port=3306  --orig_master_is_new_slave --running_updates_limit=10000

原文地址:http://blog.51cto.com/13362895/2129066

时间: 2024-08-28 16:52:45

Mysql 的高可用之 MHA的相关文章

MySQL之高可用架构—MHA

MySQL高可用目前有heartbeat+drbd.MHA.MySQL复制等几种较成熟的方案,heartbeat+drbd的方案可扩展性较差,而且读写都由主服务器负责,从库并不提供读功能,适合于数据增长量不大.一致性要求很高的环境,如银行.金融业等.今天重点讲下MHA的高可用架构. MHA是一款优秀的高可用环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到0-30秒之内自动完成数据库的故障切换,并且在切换的过程中,最大限度的保证数据的一致性,以达到真正意义上的高可用.

MySQL高可用方案MHA自动Failover与手动Failover的实践及原理

集群信息 角色                             IP地址                 ServerID      类型 Master                         192.168.244.10   1                 写入 Candicate master          192.168.244.20   2                 读 Slave                           192.168.244.

技术实战:基于 MHA 方式实现 MySQL 的高可用(转)

转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 MHA 方式实现 Mysql 的高可用的技术实战,希望对您有所帮助. AD:51CTO网+ 首届中国APP创新评选大赛火热招募中…… 数据的重要性对于人们来说重要程度不说自明,在信息时代,数据有着比人们更大的力量,我们也知道最近的斯诺登事件,军事专家对于他掌握的数据给出的评价是,相当于美军十个重装

MySQL高可用之MHA—其它高可用解决方案和问题

在上一篇的MHA介绍中提及过其它一些MySQL的高可用解决方案,只是略微介绍了以下,在这里详细的介绍. MySQL复制是异步或者半同步的.当master故障时,一些slave可能并没有收到最新的relay log,也就意味着每个slave可能处于不同的状态.手动处理这些一致性问题是小事,因为不修复这些问题,就不能开始复制.但是手动修复这些问题,花费一个小时或更多的时间并不少见. 一主一从 如果架构是一主一从,就不会出现一部分slave的状态落后于最新的slave的问题.当master出现故障,可

MySQL高可用之MHA

MySQL高可用之MHA MHA简介 MHA是由日本人yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的MySQL高可用方案.MHA能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性.目前淘宝也正在开发相似产品TMHA,目前已支持一主一从. MHA架构MHA由MHA Manager和MHA Node组成,如下图所示: MHA Manager:运行一些工具,比如masterha_manager工具实现自动监控MySQL Master和实现maste

mysql实现高可用架构之MHA

一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题.MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点. MHA 是由日本人 yoshinorim

MySQL高可用架构-MHA环境部署记录

一.MHA介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是日本的一位 MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQLReplication(二层)环境,目的在于维持Master主库的高可用性.是一套优秀的作为MySQL高可用性 环境下故障切

MySQL的高可用(MHA)

MySQL的高可用(MHA) MHA简介 MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其他从节点:通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主二从,即一台充当master,一台充当备用master,另外一台充当从数据库,出于机器成本的考虑,淘宝进行了改造,目前淘宝TMHA已经一主一从. MHA架构 MHA的工作原理 MHA是由一台manager服务器远程监控主服务器,当主服务器挂了提升一台从服务

MySQL高可用之MHA部署

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. MHA里有两个角色一个是MHA Node(数据节点)另一个是MHA Manager(管理节点). MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台sla