门户网站 建设方案,学网站设计,小程序制作单位,网上商城app开发一、前言 在原本的一主两从数据库架构中#xff0c;是没有高可用功能的#xff0c;当主库挂了时不会自动将剩下的从从升级为主库#xff0c;只能等待主库恢复才能使用#xff0c;或者手动切换#xff0c;但是手动切换后需要更改后端服务中的数据库地址信息#xff0c;在此…一、前言 在原本的一主两从数据库架构中是没有高可用功能的当主库挂了时不会自动将剩下的从从升级为主库只能等待主库恢复才能使用或者手动切换但是手动切换后需要更改后端服务中的数据库地址信息在此情况下需要引入mha服务来实现一主两从数据库的高可用mha服务可以在主库挂掉时自动从剩下的从库中选举出一个主库再将剩下的从库变更为新主库的从库该mha也有缺点只能一次性使用当发生了一次主从切换后mha manage服务就会挂掉挂掉的主库信息也会从mha manage配置文件中剔除当原主库恢复后需要手动将原主库更改为新主库的从库再将信息写入mha manage的配置文件中再启动mha manage这样下次主从发生故障时mha manage才会再次发挥作用 mha对mysql高可用的实现原理在主从的每个节点以及mha manage节点部署mha node服务收集每个节点的信息发送到mha manage当主节点发生故障时mha manage节点会及时监控到mha manage会首先检查每个从节点的健康状态没问题就会在剩下的从节点中选举出新的主节点然后对剩下的从节点进行主从配置并将从节点更改为只读这样就完成了主从节点的故障切换
二、构架
ip服务10.1.60.113mysql、mha node10.1.60.114mysql、mha node10.1.60.115mysql、mha node10.1.60.22mha manage、mha node
三、部署 需要提前部署好一主两从架构的mysql 参考mysql一主两从读写分离搭建_mysql 一主两从搭建-CSDN博客 在github上下载mha node和mha manage安装包 mha manage 参考 Release mha4mysql-manager-0.58 · yoshinorim/mha4mysql-manager · GitHub mha node 参考https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58 所有节点安装mha依赖
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN 在所有主机中创建存放mha安装包目录 mkdit /opt/mha cd /opt/mha 将mha node安装包放到所有节点的mha目录下mha manage安装包只放到mha manage目录下 先在所有节点安装mha node服务 tar -zxvf mha4mysql-node-0.58.tar.gz ls cd mha4mysql-node-0.58 perl Makefile.PL make make install mha node服务安装完成后在mha manage节点安装mha manage服务 tar -zxvf mha4mysql-manager-0.58.tar.gz ls cd mha4mysql-manager-0.58 perl Makefile.PL make make install 在所有mysql节点创建软连接 ln -s /usr/local/mysql/bin/mysql /usr/sbin/ ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/ 配置所有节点互相免密登陆
#113节点执行
ssh-keygen #一直按回车键即可ssh-copy-id 10.1.60.114ssh-copy-id 10.1.60.115ssh-copy-id 10.1.60.22#114节点执行
ssh-keygen #一直按回车键即可ssh-copy-id 10.1.60.113ssh-copy-id 10.1.60.115ssh-copy-id 10.1.60.22#115节点执行
ssh-keygen #一直按回车键即可ssh-copy-id 10.1.60.114ssh-copy-id 10.1.60.113ssh-copy-id 10.1.60.22#22节点执行
ssh-keygen #一直按回车键即可ssh-copy-id 10.1.60.114ssh-copy-id 10.1.60.115ssh-copy-id 10.1.60.113 在mha manage上执行以下拷贝文件命令
cp -rp /opt/mha/mha4mysql-manager-0.58/samples/scripts/send_report /usr/local/bin
ls /opt/mha/mha4mysql-manager-0.58/samples/scripts script目录下有四个文件解释
master_ip_failover发生故障时自动切换VIP的管理脚本
master_ip_online_change在线切换vip 的管理脚本
power_manager故障发生后关闭主机的脚本
send_report故障切换后发送报警邮件的脚本
我的mysql架构中使用了proxysql读写分离组件有集成主从故障切换的功能所以不需要vip就只拷贝了发送告警的脚本
在mysql主从配置的主库中创建以下用于监控的用户
mysql -u root -p
grant all privileges on *.* to mha% identified by 12345678
flush privileges;
在mha manage节点中拷贝配置文件
mkdir /etc/masterha
cp /opt/mha/mha4mysql-manager-0.58/samples/conf/app1.cnf /etc/masterha
编辑配置文件
vi /etc/masterha/app1.cnf
[server default]
manager_log/var/log/masterha/app1/manager.log #mha manage日志
manager_workdir/var/log/masterha/app1 #mha manage工作目录
master_binlog_dir/var/lib/mysql/ #主库保存binlog的位置这里的路径要与主库里配置的binlog的路径一致以便MHA能找到
usermha #监控用户
password12345678 #监控用户密码
ping_interval1 #设置监控主库发送ping包的时间间隔默认是3秒尝试三次没有回应的时候自动进行failover
remote_workdir/tmp #远端mysql在发生切换时binlog的保存位置
repl_password12345678 # 主从复制密码
repl_userdeploy # 主从复制用户
report_script/usr/local/bin/send_report #设置发生故障切换后发送的报警的脚本
ssh_userroot #设置ssh的登录用户名[server1] #发生故障切换后会删除对应故障的地址项配置
hostname10.1.60.113 #myqsl地址
port3306 #myqsl端口[server2]
hostname10.1.60.114
port3306[server3]
hostname10.1.60.115
port3306
配置故障切换告警
vi /usr/local/bin/send_report
my $smtpsmtp.qq.com; # smtp服务器
my $mail_from123456qq.com; # 发件箱
my $mail_user123456; # 用户名 QQ号
my $mail_passiozjqgxcvasdwlbffb; # 授权码
my $mail_to[123456qq.com]; # 收件箱
执行mha脚本检查各节点ssh连接状态
masterha_check_ssh --conf/etc/masterha/app1.cnf 检查数据库主从架构状态
masterha_check_repl --conf/etc/masterha/app1.cnf 启动mha manage服务
nohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null /var/log/masterha/app1/manager.log 21
tail -f /var/log/masterha/app1/manager.log
ps -ef|grep manage 至此mha搭建完成现在是当mha发生主从故障切换时需要手动重新配置mha manage服务重新在配置文件中新增故障的主节点信息再重新启动mha manage服务