博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maraidb高可用——MHA
阅读量:6572 次
发布时间:2019-06-24

本文共 5573 字,大约阅读时间需要 18 分钟。

基础知识

MHA简单功能介绍

MHA是目前实现mysql高可用的一种流行的解决方案,MHA能够在较短的时间内实现自动故障检测和故障转移,通常在10-30秒以内;在复制框架中,MHA能够很好地解决复制过程中的数据一致性问题,由于不需要在现有的replication中添加额外的服务器,仅需要一个manager节点,而一个Manager能管理多套复制,所以能大大地节约服务器的数量;另外,安装简单,无性能损耗,以及不需要修改现有的复制部署也是它的优势之处。

MHA还提供在线主库切换的功能,能够安全地切换当前运行的主库到一个新的主库中(通过将从库提升为主库),大概0.5-2秒内即可完成。

MHA工作原理

1.从宕机崩溃的master上保存二进制日志文件;

2.识别含有最新更新的slave;
3.应用差异的中继日志到其他的slave上;
4.应用从master上保存的二进制日志文件;
5.自动提升一个slave作为新的master工作;
6.使得其他的slave连接到新的master进行复制。
maraidb高可用——MHA

MHA的组成

MHA软件由两部分组成,Manager工具包和Node工具包

Manager工具包主要包括以下几个工具:
1.masterha_check_ssh 检查MHA的SSH配置状况
2.masterha_check_repl 检查MySQL复制状况
3.masterha_manger 启动MHA
4.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 识别差异的中继日志事件并将其差异的事件应用于其他
的slave
3.filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
4.purge_relay_logs 清除中继日志(不会阻塞SQL线程)
注意:为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA
的同时建议配置成的半同步复制

自定义扩展:

1.secondary_check_script:通过多条网络路由检测master的可用性
2.master_ip_ailover_script:更新Application使用的masterip
3.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

图示如下:

maraidb高可用——MHA

实验流程

准备工作

这里准备了四台centos7主机,分别作为manager,master,slave1和slave2。数据库使用的是maraidb10.2.15

做基本的软件环境清理,4台主机都要进行

#关闭selinuxsetenforce 0#清空防火墙规则 iptables -F iptables -X#进行时间同步,由于是做集群实验,所以时间不同步会导致实验失败。ntpdate cn.pool.ntp.org

做四台主机基于ssh的相互访问

# 生成密钥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.131
ssh 192.168.99.135
ssh 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

管理节点基本配置完毕

maraidb高可用——MHA

节点配置

安装node包

在master,slave1,slave2上安装mha节点包

yum install  mha4mysql-node-0.56-0.el6.noarch.rpm

master节点配置

编辑数据库配置文件

vim /etc/my.cnf[mysqld]# 数据和二进制日志分离datadir=/data/mysqllog_bin=/data/binlog/mysql-bin#配置唯一idserver_id=1#跳过名称解析,这里必须配置skip_name_resolve=1#关闭清理中继日志relay_log_purge=0

maraidb高可用——MHA

编辑完配置文件后,启动数据库.

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%';

slave节点配置

编辑数据库配置文件

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

管理节点检查状态并启动mha

#检查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

MHA配置完成

注意:

1.在master宕机后,mha会自动挑选备用节点中有资格的节点成为新的主;

2.宕机的节点在修复后需要手动加入集群,要配置为从服务器;
3.如果在宕机期间数据有了更新,要手动同步新 主的数据并启动同步,作为新从;
4.修复完成后,想重启mha监控要删除/mha/test/目录下的complete结尾的文件,否则无法重启监控;
5.修复完成重新运行监控命令
masterha_manager --conf=/etc/mha/test.cnf

mha的rpm包下载在google code,不过版本有点老,这里提供我这边使用包

官方下载
个人分享,centos7 也可以安装

转载于:https://blog.51cto.com/11010461/2130309

你可能感兴趣的文章
python3 在不同操作系统安装第三方库方法
查看>>
spark shuffle:分区原理及相关的疑问
查看>>
mysql优化
查看>>
Gradle -help
查看>>
css3做的nav
查看>>
互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
查看>>
Intellij IDEA 2018.2 搭建Spring Boot 应用
查看>>
SNMP AGENT函数介绍
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23
查看>>
并发容器与框架——并发容器(一)
查看>>
学界 | 伯克利最新研究:用算法解决算法偏差?公平机器学习的延迟影响
查看>>
多文件上传示例源码(默认支持各种类型,包括图片)
查看>>
9.2. CentOS 区域设置
查看>>
命令行基本操作学习笔记(一)
查看>>
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
查看>>
Oracle——16用户、角色和权限
查看>>
从0实现NavigationController
查看>>
A Visual Git Reference
查看>>