本文共 5573 字,大约阅读时间需要 18 分钟。
MHA是目前实现mysql高可用的一种流行的解决方案,MHA能够在较短的时间内实现自动故障检测和故障转移,通常在10-30秒以内;在复制框架中,MHA能够很好地解决复制过程中的数据一致性问题,由于不需要在现有的replication中添加额外的服务器,仅需要一个manager节点,而一个Manager能管理多套复制,所以能大大地节约服务器的数量;另外,安装简单,无性能损耗,以及不需要修改现有的复制部署也是它的优势之处。
MHA还提供在线主库切换的功能,能够安全地切换当前运行的主库到一个新的主库中(通过将从库提升为主库),大概0.5-2秒内即可完成。1.从宕机崩溃的master上保存二进制日志文件;
2.识别含有最新更新的slave;3.应用差异的中继日志到其他的slave上;4.应用从master上保存的二进制日志文件;5.自动提升一个slave作为新的master工作;6.使得其他的slave连接到新的master进行复制。MHA软件由两部分组成,Manager工具包和Node工具包
Manager工具包主要包括以下几个工具:1.masterha_check_ssh 检查MHA的SSH配置状况2.masterha_check_repl 检查MySQL复制状况3.masterha_manger 启动MHA4.masterha_check_status 检测当前MHA运行状态5.masterha_master_monitor 检测master是否宕机6.masterha_master_switch 制故障转移(自动或手动)7.masterha_conf_host 添加或删除配置的server信息Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主
要包括以下几个工具:1.save_binary_logs 保存和复制master的二进制日志2.apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave3.filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)4.purge_relay_logs 清除中继日志(不会阻塞SQL线程)注意:为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成的半同步复制自定义扩展:
1.secondary_check_script:通过多条网络路由检测master的可用性2.master_ip_ailover_script:更新Application使用的masterip3.shutdown_script:强制关闭master节点4.report_script:发送报告5.init_conf_load_script:加载初始配置参数6.master_ip_online_change_script:更新master节点ip地址配置文件:
global配置,为各application提供默认配置application配置:为每个主从复制集群Manager | 192.168.99.130 |
---|---|
master | 192.168.99.131 |
slave1 | 192.168.99.135 |
slave2 | 192.168.99.136 |
图示如下:
这里准备了四台centos7主机,分别作为manager,master,slave1和slave2。数据库使用的是maraidb10.2.15
#关闭selinuxsetenforce 0#清空防火墙规则 iptables -F iptables -X#进行时间同步,由于是做集群实验,所以时间不同步会导致实验失败。ntpdate cn.pool.ntp.org
# 生成密钥ssh-keygen# 配置ssh访问ssh-copy-id 192.168.99.130scp -pr .ssh 192.168.99.131:/root/scp -pr .ssh 192.168.99.135:/root/scp -pr .ssh 192.168.99.136:/root/
完成后,进行验证
ssh 192.168.99.131ssh 192.168.99.135ssh 192.168.99.136...安装mha软件包,需要有epel源的支持。
yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm -y
创建对应目录
mkdir /etc/mhamkdir /mha/test -pv
修改配置文件
vim vim /etc/mha/test.cnf# 填入以下字段[server default]#数据库的管理账号和密码user=mhapassword=mha#manager使用的工作目录,如果没有设置,默认使用/var/tmp.manager_workdir=/mha/test/#MHA manager日志文件的绝对目录和文件名,如果没有设置,那么将直接打印到标准输出和标准错误输出.当执行交互式的failover时,MHA manager将会忽略manager_log设置,直接答应到标准输出和标准错误输出.manager_log=/mha/test/manager.log#每个MHA node上,MHA工作使用的目录的绝对路径.如果目录不存在,MHA会自动创建,如果权限不够,那么MHA node会意外终止,注意MHA manager和MHA node都不会检查这个目录的磁盘可用空间,你需要自己保证有足够的可用空间.默认的remote_workdir是'/var/tmp'.remote_workdir=/mha/test/# 基于ssh登陆的账号ssh_user=root#进行数据库备份的账号和密码repl_user=slaverepl_password=slave#这个参数声明MHA manager pings(通过执行sql来ping) master的间隔.当连续三次ping失败,MHA manager认为这个Mysql master宕机,从宕机到检测到宕机,最大的消耗时间是这个参数的四倍,这个参数默认值是3(3秒).如果MHA manager因为权限问题多次连接失败,这不认为master deadping_interval=1# 指定二进制日志的目录,如果参数的主要目的是在master mysql宕机以后,为了通过ssh拷贝需要的binlog event.这个参数是需要的,因为当mysql宕机以后,没法自动获取binary log的目录。#默认情况下,master_binlog_dir的值是"/var/lib/mysql/,/var/log/mysql/",/var/lib/mysql/是大部分mysql发布版本的默认mysql输出目录,你可以设置多个目录,使用逗号分隔.比如(/data1,/data2,/data3)master_binlog_dir=/data/binlog/#节点配置[server1]hostname=192.168.99.131#声明可以作为主的资格candidate_master=1[server2]hostname=192.168.99.135candidate_master=1[server3]hostname=192.168.99.136
管理节点基本配置完毕
在master,slave1,slave2上安装mha节点包
yum install mha4mysql-node-0.56-0.el6.noarch.rpm
编辑数据库配置文件
vim /etc/my.cnf[mysqld]# 数据和二进制日志分离datadir=/data/mysqllog_bin=/data/binlog/mysql-bin#配置唯一idserver_id=1#跳过名称解析,这里必须配置skip_name_resolve=1#关闭清理中继日志relay_log_purge=0编辑完配置文件后,启动数据库.
systemctl start mariadb
进行管理账号和备份账号的授权
#这里先查看二进制日志是为了,之后从数据库可以直接同步主库的账号授权信息。MariaDB [(none)]>show master logs;MariaDB [(none)]> grant replication slave on *.* to slave@'192.168.99.%' identified by'slave';MariaDB [(none)]> grant all on *.* to mha@'192.168.99.%' identified by 'mha';
推荐开启半同步复制,mariadb10.3无需安装插件可以直接命令开启。
# 安装半同步复制的主从插件MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; # 启动半同步复制MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;#查看状态MariaDB [(none)]> show variables like '%semi%';
编辑数据库配置文件
vim /etc/my.cnf[mysqld]datadir=/data/mysqllog_bin=/data/binlog/mysql-bin#不同节点id号必须不同server_id=2skip_name_resolve=1relay_log_purge=0
启动数据库
systemctl start mariadb
开启半同步复制
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
配置同步信息
MariaDB [(none)]> change master to \ -> master_host='192.168.99.131', -> master_user='slave', -> master_password='slave', #二进制日志文件和起始点为之前,在master节点查看到的信息,不能写错 -> master_log_file='mysql-bin.000001', -> master_log_pos=703;
启动同步并且查看同步信息
MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G
#检查ssh密钥登陆是否正常masterha_check_ssh --conf=/etc/mha/test.cnf #检查备份配置是否正常masterha_check_repl --conf=/etc/mha/test.cnf #启动mha开启监控,由于默认在前台执行,所以可以考虑转到后台或者开启会话再执行masterha_manager --conf=/etc/mha/test.cnf 启动mha
1.在master宕机后,mha会自动挑选备用节点中有资格的节点成为新的主;
2.宕机的节点在修复后需要手动加入集群,要配置为从服务器;3.如果在宕机期间数据有了更新,要手动同步新 主的数据并启动同步,作为新从;4.修复完成后,想重启mha监控要删除/mha/test/目录下的complete结尾的文件,否则无法重启监控;5.修复完成重新运行监控命令masterha_manager --conf=/etc/mha/test.cnfmha的rpm包下载在google code,不过版本有点老,这里提供我这边使用包
官方下载个人分享,centos7 也可以安装转载于:https://blog.51cto.com/11010461/2130309