
本文共 4917 字,大约阅读时间需要 16 分钟。
MHA简介
MHA(MySQL高可用)是一个为MySQL高可用性环境设计的开源工具套件,专注于在MySQL主从复制环境下实现故障切换和主从状态提升。通过MHA,数据库在故障发生时可以在0-30秒内自动切换主库,并在切换过程中最大限度地保障数据库的一致性,从而实现真正意义上的高可用性。
MHA高可用工作流程
MHA的高可用工作流程主要包含以下几个关键步骤:
复制主库的binlog日志
MHA会将主库的二进制日志(binlog)复制到从库中。找出最全的relaylog日志
在从库中,MHA会识别并找出拥有最完整relaylog日志的那个从库。同步最全的relaylog日志到所有从库
将找到的最全relaylog日志内容同步到所有从库中,完成第一次数据同步。提升最全的从库为主库
将之前最全的那个从库配置为新的主库。将复制的binlog日志添加到新主库中
将主库的binlog日志信息添加到新提升的主库中。重定向其他从库到新主库
将所有其他从库重新指向新的主库,继续主从复制。MHA工具包
MHA工具包分为两个部分:Manager工具包和Node工具包。
Manager工具包
Manager工具包主要用于管理和监控MHA环境,提供以下功能:
masterha_check_ssh
:检查SSH配置是否正常。masterha_check_repl
:检查MySQL复制状态。masterha_check_status
:检测MHA运行状态。masterha_master_monitor
:监控主库是否宕机。masterha_manager
:启动或停止MHA。masterha_master_switch
:控制故障转移(自动或手动)。masterha_conf_host
:添加或删除服务器信息。masterha_secondary_check
:尝试建立TCP连接到远程服务器。masterha_stop
:停止MHA。
Node工具包
Node工具包用于从库节点上执行特定操作,包括:
save_binary_logs
:将主库的binlog日志复制到从库。apply_diff_relay_logs
:识别和处理中继日志中的差异事件。filter_mysqlbinlog
:清除binlog中不必要的ROLLBACK事件。purge_relay_logs
:清除中继日志。
搭建MHA一主双从实验环境
环境配置
实验环境包含三台服务器配置:
主机名 | IP地址(NAT) | 描述 |
---|---|---|
mysql-db01 | 192.168.50.149 | 系统:CentOS 6.5,MySQL 5.6 |
mysql-db02 | 192.168.50.151 | 系统:CentOS 6.5,MySQL 5.6 |
mysql-db03 | 192.168.50.152 | 系统:CentOS 6.5,MySQL 5.6 |
主机名映射
在/etc/hosts
文件中添加以下主机名映射:
127.0.0.1 localhost localhost.localdomain localhostlocalhostlocalhost4 localhost4.localdomain localhost4localhost6 localhost6.localdomain localhost6192.168.50.149 mysql-db01192.168.50.151 mysql-db02192.168.50.152 mysql-db03
安装包准备
安装MHA和MySQL的安装包:
mha4mysql-manager-0.56-0.el6.noarch.rpmmha4mysql-node-0.56-0.el6.noarch.rpmmysql-5.6.17-linux-glibc2.5-x86_64.tar.gz
安装MySQL
使用以下命令安装MySQL 5.6:
yum -y install ncurses-devel libaio tar xf mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz \ -C /usr/local/mysql \ --strip-components=all \ --debu install
配置基于GTID的主从复制
必要条件
- 主库和从库都启用二进制日志。
- 主库和从库的服务器ID不同。
- 配置主从复制用户。
主库操作(mysql-db01)
修改主库配置文件/etc/my.cnf
:
- 启用GTID和二进制日志。
- 设置唯一的服务器ID。
vim /etc/my.cnf
修改内容如下:
[mysqld]gtid_mode=ONlog_slave_updates=1enforce_gtid_consistency=1
创建主从复制用户:
mysql -uroot -p123456grant replication slave on *.* to rep@'192.168.50.%' identified by '123456';
从库操作(mysql-db02和mysql-db03)
修改从库配置文件/etc/my.cnf
:
- 启用GTID和二进制日志。
- 禁止MySQL自动删除relaylog日志。
vim /etc/my.cnf
修改内容如下:
[mysqld]gtid_mode=ONlog_slave_updates=1relay_log_purge=0
重启MySQL服务:
systemctl restart mysqld
配置主从复制
在主库上执行以下命令:
mysql -uroot -p123456change master to master_host='192.168.50.149', master_user='rep', master_password='123456', master_auto_position=1;
启用从库的主从复制功能
在从库上执行以下命令:
mysql -uroot -p123456start slave;show slave status\G;
GTID的新特性
GTID(Global Transaction ID)在MySQL 5.6及以上版本引入了以下新特性:
部署MHA
环境准备
所有节点(mysql-db01、mysql-db02、mysql-db03)需要安装MHA工具包:
yum -y install perl-DBD-MySQLrpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
部署管理节点(MHA-Manager)
选择一个从服务器部署MHA-Manager(例如mysql-db03),并执行以下操作:
安装MHA-Manager依赖包:
yum -y install perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
安装MHA-Manager:
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
配置MHA
创建MHA配置文件目录:
mkdir -p /etc/mhamkdir -p /var/log/mha/mha1
编辑配置文件/etc/mha/mha1.cnf
:
vim /etc/mha/mha1.cnf
配置内容如下:
[server default]manager_log=/var/log/mha/mha1/managermanager_workdir=/var/log/mha/mha1master_binlog_dir=/usr/local/mysql/datauser=mhapassword=123456ping_interval=2repl_user=reprepl_password=123456ssh_user=root
配置SSH信任
使用SSH-copy-id工具创建密钥对并推送到其他节点:
ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsassh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.50.149ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.50.151ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.50.152
启动MHA
启动MHA-Manager:
nohup masterha_manager --conf=/etc/mha/mha1.cnf --remove_dead_master_conf --ignore_last_failover > /var/log/mha/mha1/manager.log 2>&1 &
检查MHA状态:
masterha_check_ssh --conf=/etc/mha/mha1.cnfmasterha_check_repl --conf=/etc/mha/mha1.cnf
故障测试与故障还原
故障测试
停止主库:
/etc/init.d/mysqld stop
检查从库状态:
mysql -uroot -p123456 -e 'show slave status\G'
输出应显示Slave_IO_Running: Yes
和Slave_SQL_Running: Yes
,表明主从复制正常进行。
故障还原
重启主库:
/etc/init.d/mysqld start
将故障库重新加入架构:
mysql -uroot -p123456change master to master_host='192.168.50.149', master_user='rep', master_password='123456', master_auto_position=1;start slave;
查看MHA日志:
cat /var/log/mha/mha1/manager
附录:源码安装MHA的方法
Node节点的源码安装方法
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Params-Validate perl-CPAN perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakertarxf mha4mysql-node-0.56.tar.gz -C /usr/src/cd /usr/src/mha4mysql-node-0.56perl Makefile.PLmakemake install
Manager节点的源码安装方法
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Params-Validate perl-CPAN perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakertarxf mha4mysql-manager-0.56.tar.gz -C /usr/src/cd /usr/src/mha4mysql-manager-0.56perl Makefile.PLmakemake install
以上配置和操作均基于实际环境,建议根据实际需求进行调整。
发表评论
最新留言
关于作者
