MAH介绍
MHA(Master High Availability)是一种MySQL高可用解决方案,由日本DeNA公司开发,主要用于在故障切换和主从提升时进行快速切换,并最大程度保证数据一致性。
MHA主要由两部分组成:
1、MHA Manager(管理节点),管理节点部署在群集之外,主要用于定期监测群集中的主节点,并在主从切换时负责管理调度切换流程。
2、MHA Node(数据节点),数据节点部署在每个群集节点上,负责在主从切换时对比和应用差异日志。
管理节点主要包含以下工具:
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
数据节点主要包含以下工具:
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
##==============================================================##
MHA主要特性:
1、MHA切换不依赖实例使用存储引擎和BINLOG格式;
2、MHA不会增加MySQL服务器性能开销,除MHA管理节点外无需增加额外服务器;
3、在MySQL服务器上部署MHA数据节点不会影响当前实例运行;
4、MHA实现自动故障切换,也可以手动触发在线切换;
5、MHA可以实现秒级的故障切换;
6、MHA可以将任意slave提升master,也可以在切换时指定master候选节点;
7、MHA提供扩展接口,允许在MHA切换过程中的特定时间点执行用户自定义脚本。
##==============================================================##
MaxScale介绍
如图,客户端发送sql请求到MaxScale,MaxScale判断sql是读操作还是写操作,再讲sql请求转发到响应节点上,实现读写分离。
搭建过程
设置三台mysql,搭建主从;一台作为MHA和MaxScale管理节点:
主 1.1.1.1
从 1.1.1.2
从 1.1.1.3
管理节点 1.1.1.4
主从配置就不过多赘述了,可以看之前写的文章 https://blog.csdn.net/qq_33933666/article/details/103362407
搭建MHA
要注意一点,开启mysql的半同步复制:
vim /etc/my.cnf
#添加模块
plugin-load=“rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so”
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_enabled=1
#关闭自动删除relay日志
global relay_log_purge=0
配置整个集群互相免密ssh登录
#以其中一台为例,其他节点配置方法相同
ssh-keygen -t rsa
ssh-copy-id 1.1.1.2
ssh-copy-id 1.1.1.3
ssh-copy-id 1.1.1.4
部署管理节点
安装依赖
yum -y install perl-ExtUtils-* perl-CPAN-*
#注意,管理节点也要安装node包
mha4mysql-node-0.56-0.el6.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
安装manager
tar -xf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56/
perl Makefile.PL INSTALL_BASE=xxx #指定安装路径,我这里没有指定
make && make install
mkdir -p /etc/mha_conf/log #创建mha工作目录和log目录
cp samples/conf/app1.cnf /etc/mha_conf/ #复制配置文件模板
cp bin/'* /sbin/ #复制bin下脚本到环境变量文件里
samples/scripts/master_ip_failover #用于自动切换IP的脚本,但我这里没有使用
samples/scripts/master_ip_online_change #用于手动切换主从的脚本,我这里也没有使用
配置mha配置文件
vim /etc/mha_conf/app1.cnf
1 [server default]
2 manager_workdir=/etc/mha_conf/app1
3 manager_log=/etc/mha_conf/log/manager.log
4 #master_ip_failover_script=/etc/mha_conf/master_ip_failover //未启用自动切换脚本
5
6 ssh_user=root //ssh登录的用户
7 ssh_port=22
8
9 repl_user=repluser //用于配置主从同步的账户
10 repl_password=123456
11
12 user=monitor //用于监控mysql数据库状态的账户
13 password=monitor123
14
15 [server1] //第一台服务器
16 hostname=1.1.1.1
17 candidate_master=1 //是否参与主库竞选
18
19 [server2]
20 hostname=1.1.1.2
21 candidate_master=1
22
23 <