目录
一、概述
1.概念
2.组成
3.特点
4.工作原理
二、案例介绍
1.192.168.42.3
2.192.168.42.4
3.192.168.42.5
4.192.168.42.6
三、实际构建MHA
1.ssh免密登录
1.1 所有节点配置hosts
1.2 192.168.42.3
1.3 192.168.42.4
1.4 192.168.42.5
1.5 192.168.42.6
1.6 测试
2.主从复制
2.1 master
2.2 slave(两个都要配)
2.3 验证
3.MHA安装
3.1 所有节点安装perl环境
3.2 node
3.2.1 所有节点安装node
3.2.2 验证
3.3 manager
3.3.1 安装
3.3.2 脚本说明
3.3.3 配置文件建立
3.3.4 目录创建
3.3.5 测试MHA
3.3.6 启动命令
3.3.7 启动时masterIP异常
4.测试
5.故障恢复
一、概述
1.概念
- MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
- MHA 的出现就是解决MySQL 单点的问题。
- MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
- MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
2.组成
- MHA manager:管理节点
- MHA node:数据节点(每个节点上都需要安装)
3.特点
- 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
- 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
- 目前MHA支持一主多从架构,最少三台服务,即一主两从
4.工作原理
- 从宕机崩溃的master 保存二进制日志事件(binlog events);
- 识别含有最新的更新slave日志
- 应用差异的中继日志(relay log)到其他的slave
- 应用从master保存的二进制日志事件
- 提升一个slave为新的master
- 使其他的slave连接新的master进行复制
二、案例介绍
1.192.168.42.3
用作manager(MHA),即mgt
2.192.168.42.4
用作master
3.192.168.42.5
用作slave1
4.192.168.42.6
用作slave2
注:192.168.42.4 | 5 | 6,为node
三、实际构建MHA
1.ssh免密登录
1.1 所有节点配置hosts
vim /etc/hosts
192.168.42.3 mgt
192.168.42.4 master
192.168.42.5 slave1
192.168.42.6 slave2
1.2 192.168.42.3
ssh-keygen
for i in 4 5 6;do ssh-copy-id root@192.168.42.$i;done
1.3 192.168.42.4
ssh-keygen
for i in 3 5 6;do ssh-copy-id root@192.168.42.$i;done
1.4 192.168.42.5
ssh-keygen
for i in 4 3 6;do ssh-copy-id root@192.168.42.$i;done
1.5 192.168.42.6
ssh-keygen
for i in 4 5 3;do ssh-copy-id root@192.168.42.$i;done
1.6 测试
for i in 3 4 5;do ssh 192.168.42.$i hostname;done
2.主从复制
2.1 master
vim /etc/my.cnf
[mysqld]
server-id = 20
log-bin = master-bin
log-slave-updates = true
systemctl restart mariadb
mysql -e "grant replication slave on *.* to 'myslave'@'192.168.42.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.5' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.6' identified by '123.com';"
mysql -e "show master status";
2.2 slave(两个都要配)
vim /etc/my.cnf
server-id=30
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index
systemctl restart mariadb
mysql -e "grant replication slave on *.* to 'myslave'@'192.168.42.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.5' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.42.6' identified by '123.com';"
mysql -e "change master to master_host='192.168.42.4',master_user='myslave',master_password='123.com',master_log_file='master-bin.000003',master_log_pos=1002;"
mysql -e "slave start;"
2.3 验证
master
mysql -e "create database ea;"
slave1
mysql -e "show databases;"
slave2
mysql -e "show databases;"
3.MHA安装
3.1 所有节点安装perl环境
yum install epel-release -y
yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN
3.2 node
3.2.1 所有节点安装node
tar xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL && make && make install
3.2.2 验证
cd /usr/local/bin
看到脚本就OK
3.3 manager
3.3.1 安装
tar xf mha4mysql-manager-0.57.tar.gz
cd /root/mha4mysql-manager-0.57
perl Makefile.PL && make && make install
cp samples/scripts/master_ip_failover /usr/local/bin/
cp samples/scripts/master_ip_online_change /usr/local/bin/
3.3.2 脚本说明
master_ip_failover 自动切换时 VIP 管理的脚本
master_ip_online_change 在线切换时 vip 的管理
power_manager 故障发生后关闭主机的脚本
send_report 因故障切换后发送报警的脚本
3.3.3 配置文件建立
mkdir /etc/masterha
vim /etc/masterha/app1.cnf
3.3.4 目录创建
mkdir /var/log/masterha/app1
3.3.5 测试MHA
vim /usr/local/bin/master_ip_failover
masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf
3.3.6 启动命令
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
3.3.7 启动时masterIP异常
需要工程手动配置VIP
4.测试
停用master的mariadb服务
systemctl stop mariadb
切换到slave1上
ip a
成功。
5.故障恢复
修改app1.cnf启动配置:添加master主机配置信息
分别在slave上重新指定master主机及binlog日志同步信息