数据一致性问题。当Master故障时,MHA会从多个Slave中随机选择一个充当新的Master;当然,也可在配置文件中指定某一个Slave优先成为Master。
(2) 互动(手动)Master故障转移
可以只使用MHA的故障转移功能,而不监控Master,当其故障时,手动调用MHA来进行故障切换。
(3)非交互式自动故障转移
MHA还支持非交互式的Master故障切换(不监控Master,但实现自动故障切换),这个特性其实是将Master的监控和VIP接管交给第三方工具来做,比如Heartbeat,MHA只负责Master故障转移和Slave之间的数据同步。
(4) 在线切换Master到不同的主机
在有些情况下,比如更换Raid控制器,升级主机硬件等,则需要将其上的Master实例迁移到其它主机上,MHA支持快速的Master切换和短暂的写操作阻塞,通常只需0.5-2秒的downtime,这是可以接受的,也方便了DBA的操作。
二、搭建环境
系统环境
OS:CentOS 5.8 (x86_64) 内核:2.6.18-308.el5 DB:MySQL 5.5.17
hostname IP MySQL Role MHA Role
node1 192.168.3.27 master node
node2 192.168.3.28 slave1 (备用) node
node3 192.168.3.25 slave2 node
mmm 192.168.3.26 manager
1.安装MHA
MHA的安装包也包括Manager和Node两部分,其中Node包不但要在所有的Node节点上安装,而且还需在Manager节点上安装,因为Manager模块内部依赖Node模块,
Manager包则只需在Manager节点安装即可。
从MHA官网http://code.google.com/p/mysql-master-ha/downloads/list下载合适的安装包,可以是源码包,也可以是RPM包,本例采用RPM包,如下:
Manager包:mha4mysql-manager-0.55-1.el5.noarch.rpm
Node包:mha4mysql-node-0.54-1.el5.noarch.rpm
MHA是采用perl语言编写的一个脚本管理工具,所以需要安装一系列perl依赖包。
1、在所有节点上安装perl语言依赖包
# rpm -ivh MySQL-shared-compat-5.5.17-1.rhel5.x86_64.rpm
# rpm -ivh perl-DBI-1.52-2.el5.x86_64.rpm
# rpm -ivh perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm
(以下依赖包为Manager节点需要)
# rpm -ivh perl-Params-Validate-0.95-1.el5.rf.x86_64.rpm
# rpm -ivh perl-Log-Dispatch-2.26-1.el5.rf.noarch.rpm
# rpm -ivh perl-Config-Tiny-2.12-1.el5.rf.noarch.rpm
# rpm -ivh perl-Parallel-ForkManager-0.7.5-2.2.el5.rf.noarch.rpm
在所有节点及manager上安装node包
# rpm -ivh mha4mysql-node-0.54-1.el5.noarch.rpm
在manager节点上安装manager包
# rpm -ivh mha4mysql-manager-0.55-1.el5.noarch.rpm
成功安装后,会在/usr/bin目录下生成如下一系列命令工具:
/usr/bin/masterha_check_repl
/usr/bin/masterha_conf_host
/usr/bin/masterha_master_switch
/usr/bin/masterha_check_ssh
/usr/bin/masterha_manager
/usr/bin/masterha_secondary_check
/usr/bin/masterha_check_status
/usr/bin/masterha_master_monitor
/usr/bin/masterha_stop
2.配置MHA
接下来就可以配置MHA配置文件了,只需在Manager服务器上操作;RPM包安装时,缺省不会生成该配置文件,可手动生成,也可从MHA Manager源码安装包中查找配置文件模板,及一系列调用脚本。
创建工作目录
在Node上创建一个单独的工作目录,用于remote_workdir参数来存放相关日志文件,缺省为/var/tmp,若未创建,MHA也会自动创建,但这需要有创建权限。
# mkdir -p /mha/appl
在Manager上创建工作目录,用于manager_workdir参数,其中存放日志文件和一系列脚本文件等。
# mkdir -p /mha/appl
# mkdir -p /mha/scripts
配置masterha_default.cnf文件
这是全局配置文件,缺省为/etc/masterha_default.cnf,适用于一个Manager管理多套MySQL Replication的情况,在[server_default]下定义一些多套复制环境通用的Global Scope类型的参数。本例只有一套MySQL Replication,所以也可不用配置该文件,而是在对应的应用配置文件(appl.conf)下的[server_default]中定义相关参数。
执行MHA相关命令时,会在/etc目录下搜索该配置文件,若找不到,虽然不会有什么错误,但会给出一个警告,如“[warning] Global configuration file /etc/masterha_default.cnf not found.”。
为此可以在/etc目录下创建一个名为masterha_default.cnf的空文件,本例不打算这么做,而是在其中配置一些通用的[server_default]类参数,如下:
# vi /etc/masterha_default.cnf
[server default]
user = root
password = mysql --mysql密码
ssh_user = root
repl_user = repl
repl_password = repl_pwd
ping_interval = 3
ping_type = SELECT
配置appl.conf文件
这是针对每一套MySQL Replication应用专门的配置文件,若管理多套MySQL Replication,可配置多个文件,其中包括[server_default]和[server_xxx]两个项目,分别用于配置App Scope、Local Scope类型的参数。
# vi /etc/appl.cnf
[server default]
manager_workdir = /mha/appl
manager_log = /mha/appl/manager.log
remote_workdir = /mha/appl
#master_ip_failover_script=/mha/scripts/master_ip_fai