数据库MMM故障转移切换

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

 MMM 高可用 MYSQL

工作原理

相较于其它HA软件,MHA的目的在于维持MySQL ReplicationMaster库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。

-从宕机崩溃的master保存二进制日志事件(binlogevents)

-识别含有最新更新的slave

-应用差异的中继日志(relay log)到其它slave

-应用从master保存的二进制日志事件(binlogevents)

-提升一个slave为新master

-使其它的slave连接新的master进行复制。

 

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器

 

其中master对外提供写服务,备选master(实际的slave,主机名centos3)提供读服务,slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的masterslave指向新的mastermanager作为管理服务器。

一、基础环境准备

1、 在配置好IP地址后检查selinuxiptables设置,关闭 selinux iptables  服务以便后期主从同步不出错

注:时间要同步

2、 在四台机器都配置epel

下载地址:http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

截图00.png

3,建立交互式登录

截图01.png

截图02.png

截图03.png

查看每台hosts文件

截图04.png

二、配置mysql半同步复制

为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL的半同步复制。

mysql半同步插件是由谷歌提供,具体位置/usr/local/mysql/lib/plugin/下,一个是master用的semisync_master.so,一个是slave用的semisync_slave.so,下面我们就来具体配置一下。

如果不清楚Plugin的目录,用如下查找:

mysql> show variables like '%plugin_dir%';

截图05.png

1、分别在主从节点上安装相关的插件(master,Candicatemaster,slave)

MySQL上安装插件需要数据库支持动态载入。检查是否支持,用如下检测:

1
mysql> show  var iables like  '%have_dynamic_loading%' ;

截图06.png

所有mysql数据库服务器,安装半同步插件(semisync_master.so,semisync_slave.so) 

1
2
mysql> install plugin rpl_semi_sync_master soname  'semisync_master.so' ;
mysql> install plugin rpl_semi_sync_slave soname  'semisync_slave.so' ;

截图07.png

其他mysql主机采用同样的方法安装

检查Plugin是否已正确安装:
mysql> show plugins;
查看半同步相关信息

截图08.png

1
mysql> select * from information_schema.plugins;

截图09.png

上图可以看到半同复制插件已经安装,只是还没有启用,所以是off

2、修改my.cnf文件,配置主从同步:

注:若主MYSQL服务器已经存在,只是后期才搭建从MYSQL服务器,在置配数据同步前应先将主MYSQL服务器的要同步的数据库拷贝到从MYSQL服务器上(如先在主MYSQL上备份数据库,再用备份在从MYSQL服务器上恢复)

master mysql主机:

截图10.png

rpl_semi_sync_master_enabled=1  1表是启用,0表示关闭

rpl_semi_sync_master_timeout=10000毫秒单位该参数主服务器等待确认消息10秒后,不再等待,变为异步方式。

Candicate master主机:

截图11.png

注:relay_log_purge=0,禁止 SQL 线程在执行完一个 relay log 后自动将其删除对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能

Slave主机:

截图12.png

查看半同步相关信息

mysql>show  variables  like  %rpl_semi_sync%;

查看半同步状态:

mysql>show  status  like %rpl_semi_sync%;

有几个状态参数值得关注的:

rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式  

rpl_semi_sync_master_clients :显示有多少个从服务器配置为半同步复制模式  

rpl_semi_sync_master_yes_tx :显示从服务器确认成功提交的数量 (master成功接收到slave的回复的次数。)

rpl_semi_sync_master_no_tx :显示从服务器确认不成功提交的数量  (master 等待超时的次数)

rpl_semi_sync_master_tx_avg_wait_time :事务因开启 semi_sync ,平均需要额外等待的时间 (即master 花在每个事务上的平均等待时间) 

Rpl_semi_sync_master_tx_wait_time  master 花在所有事物上的等待时间

rpl_semi_sync_master_net_avg_wait_time :事务进入等待队列后,到网络平均等待时间(即master 等待slave 回复的平均等待时间。单位毫秒.  

Rpl_semi_sync_master_net_wait_time  master 总的等待时间

Rpl_semi_sync_master_net_waits  master 等待slave 回复的的总的等待次数。

Rpl_semi_sync_master_no_timesmaster 关闭半同步复制的次数。

Rpl_semi_sync_master_timefunc_failures  :记录master调用类似 gettimeofday()等函数的失败次数

Rpl_semi_sync_master_tx_waits  master总的等待次数

Rpl_semi_sync_master_wait_sessions  :当前有多少个session 因为slave 的回复而造成等待

master主机:

截图13.png

第一条grant命令是创建一个用于主从复制的帐号,在mastercandicate master的主机上创建即可。

第二条grant命令是创建MHA管理账号,所有mysql服务器上都需要执行。MHA会在配置文件里要求能远程登录到数据库,所以要进行必要的赋权。

Candicate master主机:

1
2
mysql> grant replication slave on *.* to mharep@ '192.168.2.%'  identified by  '123456' ;
mysql> grant all privileges on *.* to manager@ '192.168.2.%'  identified by  '123456' ;

查看从的状态,以下两个值必须为yes,代表从服务器能正常连接主服务器

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

截图14.png

Slave主机:

1
2
mysql> grant all privileges on *.* to manager@ '192.168.2.%'  identified by  '123456' ;
mysql> change master to master_host= '192.168.2.105' ,master_port= 3306 ,master_user= 'mharep' ,master_password= '123456' ,master_log_file= 'mysql-bin.000001' ,master_log_pos= 742 ;

查看从的状态,以下两个值必须为yes,代表从服务器能正常连接主服务器

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

截图15.png

查看master服务器的半同步状态:

1
mysql>show  status  like ‘%rpl_semi_sync%’;

截图16.png

、配置mysql-mha

mha包括manager节点和data节点,data节点包括原有的MySQL复制结构中的主机,至少3台,即12从,当masterfailover后,还能保证主从结构;只需安装node包。manager server:运行监控脚本,负责monitoring 和 auto-failover;需要安装node包和manager包。

1、 在所有主机上安装mha所依赖的软件包

1
[root@centos2 src]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-Test-Mock-LWP.noarch perl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

1、 以下操作管理节点需要两个都安装, 3台数据库节点只要安装MHAnode节点:

在所有数据库节点上安装mha4mysql-node-0.56.tar.gz

截图17.png

其他两个数据节点也安装mha4mysql-node-0.56.tar.gz(过程略)

管理节点需要两个都安装mha4mysql-node-0.56.tar.gzmha4mysql-manager-0.56.tar.gz

安装mha4mysql-node-0.56.tar.gz

截图18.png

安装mha4mysql-manager-0.56.tar.gz(确保manager主机正常连接internet)

截图19.png

根据提示输入

1
2
3
4
5
[root@centos1 mha4mysql-manager- 0.56 ]# mkdir /etc/masterha
[root@centos1 mha4mysql-manager- 0.56 ]# mkdir -p /masterha/app1
[root@centos1 mha4mysql-manager- 0.56 ]# mkdir /scripts
[root@centos1 mha4mysql-manager- 0.56 ]# cp samples/conf/* /etc/masterha/
[root@centos1 mha4mysql-manager- 0.56 ]# cp samples/scripts/* /scripts/

1、 配置mha

与绝大多数Linux应用程序类似,MHA的正确使用依赖于合理的配置文件。MHA的配置文件与mysqlmy.cnf文件配置相似,采取的是param=value的方式来配置,配置文件位于管理节点,通常包括每一个mysql server的主机名,mysql用户名,密码,工作目录等等。

编辑/etc/masterha/app1.conf,内容如下:

截图19.png

保存退出

截图20.png

配关配置项的解释:

manager_workdir=/masterha/app1 //设置manager的工作目录

manager_log=/masterha/app1/manager.log //设置manager的日志

user=manager//设置监控用户manager

password=123456  //监控用户manager的密码

ssh_user=root  //ssh连接用户

repl_user=mharep  //主从复制用户

repl_password=123.abc //主从复制用户密码

ping_interval=1   //设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover

master_binlog_dir=/usr/local/mysql/data   //设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录

candidate_master=1//设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库

1
2
SSH 有效性验证:
[root@centos1 ~]# masterha_check_ssh --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf
1
2
3
集群复制的有效性验证:
mysql必须都启动
[root@centos1 ~]# masterha_check_repl --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf

验证成功的话会自动识别出所有服务器和主从状况

注:验证成功的话会自动识别出所有服务器和主从状况

在验证时,若遇到这个错误:Can't exec "mysqlbinlog" ......

解决方法是在所有服务器上执行:

1
ln -s /usr/local/mysql/bin/* /usr/local/bin/

启动 manager

截图21.png

注:在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用&在程序结尾来让程序自动运行。比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql&。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,

状态检查:

1
[root@centos1 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf

故障转移验证:(自动failover)

master dead后,MHA当时已经开启,候选Master库(Slave)会自动failoverMaster.

验证的方式是先停掉 mastercentos2),因为之前的配置文件中,把Candicatemaster(centos3)作为了候选人,那么就到 slave(centos4) 上查看 master 的 IP 是否变为了 centos3 的 IP

1)停掉 master

 master192.168.1.102)上把mysql停掉

2)查看 MHA 日志

[root@centos1 ~]# cat /masterha/app1/manager.log

----- Failover Report -----

 

app1: MySQL Master failover 192.168.1.102(192.168.1.105:3306) to 192.168.1.105(192.168.1.103:3306) succeeded

 

Master 192.168.1.105(192.168.1.102:3306) is down!

 

Check MHA Manager logs at centos1.benet.com:/masterha/app1/manager.log for details.

 

Started automated(non-interactive) failover.

从日志信息中可以看到 master failover 已经成功了,并可以看出故障转移的大体流程

3)检查 slave2 的复制

登录 slave192.168.1.104)的Mysql,查看 slave 状态

3)检查 slave2 的复制

登录 slave192.168.1.104)的Mysql,查看 slave 状态

mysql> show slave status\G;

可以看到 master 的 IP 现在为 192.168.1.105,已经切换到和192.168.1.105同步了本来是和192.168.1.106同步的说明 MHA 已经把Candicatemaster(centos3)提升为了新的 masterIO线程和SQL线程也正确运行,MHA 搭建成功





     本文转自柴鑫旺 51CTO博客,原文链接:http://blog.51cto.com/chaixinwang/2072202A ,如需转载请自行联系原作者



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
JSON 自然语言处理 负载均衡
数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
55 0
|
4月前
|
运维 Oracle 关系型数据库
服务器数据恢复-raid5故障导致上层oracle数据库故障的数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统+ext3文件系统,服务器上层部署有oracle数据库。 服务器故障&检测: raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法挂载,oracle数据库无法正常使用。 通过管理后台查看服务器中硬盘的状态,显示有两块硬盘处于离线状态。
|
6月前
|
SQL Java 关系型数据库
JSP故障信息管理系统myeclipse开发sql数据库web结构计算机java编程
JSP 故障信息管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
19 0
|
7月前
|
存储 Oracle 算法
数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
ORACLE数据库常见故障: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。
|
9月前
|
存储 运维 监控
分布式数据库HBase的重要机制和原理的宕机恢复和故障处理
HBase是一个分布式数据库系统,支持高可用性、高性能和高伸缩性。在分布式环境中,数据的分布式存储和管理是非常重要的。HBase通过分布式存储和管理数据来实现高可用性和高性能。同时,HBase还提供了一些重要的机制和原理来支持宕机恢复和故障处理。
315 1
|
10月前
|
Oracle 关系型数据库 网络安全
连接Oracle数据库失败(ORA-12514)故障排除
ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障,它通常表示无法连接到数据库实例,这里姚远老师告诉大家如何排除这类故障。
4023 0
|
数据库
巧用iptables模拟数据库故障
巧用iptables模拟数据库故障
|
SQL 弹性计算 运维
数据库故障致美国超一万航班取消或延迟
在2023年新年的第二周,美国东部时间1月11日上午,6点29分,美国航空监管机构(FAA)发布了一条仅40字的通告,随后不久,很快就宣布停飞全美所有国内航班。通告内容是,FAA正在对NOTAM(Notice to Air Missions)系统进行验证和恢复,在第一条通知之后的50分钟,FAA就宣布停飞所有国内航班。
331 0
数据库故障致美国超一万航班取消或延迟
|
存储 缓存 关系型数据库
语音聊天开发,应对数据库故障需对症下药
语音聊天开发,应对数据库故障需对症下药
|
运维 Oracle 关系型数据库
oracle 数据库在线重做日志故障处理
Oracle 数据库在线日志故障处理是DBA的基本操作之一,不但要掌握操作,还要掌握原理。
205 0