基于MHA的mysql在线迁移系统及方法与流程

文档序号:11276522阅读:239来源:国知局
基于MHA的mysql在线迁移系统及方法与流程

本发明属于数据库管理技术领域,主要应用于在线迁移mysql数据库节点。



背景技术:

对于互联网公司而言,mysql数据库使用越来越广泛,mysql数据库服务的可用性也显得越来越重要。在管理mysql数据库过程中,经常需要迁移数据库节点。传统迁移数据库节点方法具有如下缺点:

(1)操作繁琐:迁移步骤繁多,时间长。

(2)易出错:在迁移过程中,出现错误的几率很高。

(3)数据不一致:迁移后,新的数据库节点数据不一致。

(4)无法做到大批量迁移:由于缺乏自动化,效率低下,很难做到大批量迁移数据库节点。



技术实现要素:

本发明针对现有技术的不足,提供一种基于mha的mysql在线迁移系统及方法,基于mha,可以实现数据库节点在线迁移自动化,该系统可以支持大规模mysql数据库节点在短时间内在线迁移。

本发明的目的是通过以下技术方案来实现的:一种基于mha的mysql在线迁移系统,该系统包括mha管理节点、mysql主从节点和新从节点三个单元;

mha管理节点:包括mha管理模块、在线切换模块和更新mha配置模块,该节点上部署mha管理软件包和node软件包,当需要切换mysql主库时,通过mha管理节点实现一键操作;当mysql主从节点发生变更时,更改mha相关配置,从而正确检测mysql主从状态;

mysql主从节点:包括在线做数据模块和下线从库模块;从mysql主从集群中,选择一个节点作为在线做数据的源,在线做数据结束后,产生镜像文件,发送所述镜像文件到新从节点;在mysql主从集群中,新从节点加入到mha后,如果待下线节点为从库,直接执行下线操作,将待下线节点从mha配置中删除,然后停止待下线节点mysql服务;如果待下线节点为主库,执行mha在线切换主库操作,人工触发mysql主从切换后,然后再下线待下线节点;

新从节点:包括做从库模块;当镜像文件发送到新从节点,在该节点上可以快速实现一个mysql从库,然后加入到mysql主从集群中。

进一步地,所述mha管理节点中mha管理模块包括:

按照mha部署要求,在mysql主从节点和新从节点上部署mhanode软件,在单独的一台服务器上部署mha管理软件;对于每个mysql主从集群,使用唯一的mysql端口作为标识,在mha管理节点,有一个对应的mha配置和mha切换脚本,mha配置是配置所述mysql主从集群中主库和所有从库的ip、mysql端口和mysql数据目录;mha切换脚本是配置了所述mysql主从集群相应的vip和切换逻辑,用于切换mysql主库操作的脚本文件;

检查mysql主从节点和新从节点的互通性,确保所述mysql主从节点和新从节点之间是互通的;

启动mha监控服务,便于及时监控和mysql主库自动切换。

进一步地,所述mysql主从节点中在线做数据模块包括:

需要传入的参数:待下线节点ip、mysql端口、数据库用户名、数据库密码和做数据目录;所述做数据目录是做数据过程中,保存镜像文件的目录;

针对所述待下线节点ip和mysql端口,根据mysql内部接口,获取所述待下线节点的角色(分为master和slave两种),如果所述待下线节点角色是slave,那么记为做数据源节点,其角色为slave;否则,根据mysql内部接口,获取所述待下线节点对应的所有从库,然后随机从中选择一个从库作为做数据源节点,其角色为slave,如果不存在mysql从库,那么选择mysql主库作为做数据源节点,其角色为master;

采用percona‐xtrabackup工具作为在线做数据工具,根据做数据源节点的角色不同,采用不同的选项进行做数据;做数据过程包括两个阶段:拷贝文件和应用日志;所述拷贝文件是在线拷贝mysql的数据文件和日志文件,不影响mysql数据库服务;所述应用日志,是根据mysql崩溃恢复原理,对日志文件执行前滚和回滚操作;经过两个阶段后得到的一致性文件记为镜像文件。

进一步地,所述新从节点中做从库模块包括:

需要传入的参数:做数据源节点ip和镜像文件;

本模块调用在线做数据模块执行结束后产生的镜像文件,按照mysql数据库部署要求,启动mysql数据库服务,然后启动从库同步数据。做从库模块执行成功结束后,在mha管理节点更新所述mysql主从集群对应的mha配置,把新从节点加入到所述mha配置。

进一步地,所述mha管理节点中在线切换模块包括:

需要传入的参数:mysql端口和待下线节点的角色;

如果待下线节点的角色为slave,发送mysql端口和待下线节点的ip到更新mha配置模块;否则,需要调用mha自身接口在线切换mysql主库:根据mysql端口获取对应的mha配置,首先检查是否启动了对应的mha监控服务,如果启动了所述mha监控服务,需要停止所述mha监控服务,否则,根据所述mha配置,调用mha自身接口,对mysql主库执行mha在线切换操作,产生新mysql主库,所述mysql主从集群中其他数据库节点重新指向所述新mysql主库,然后,发送mysql端口和待下线节点ip到更新mha配置模块。

进一步地,所述mha管理节点中更新mha配置模块包括:

需要传入的参数:mha配置和待下线节点ip;

在线切换模块执行结束后,发送mysql端口和待下线节点ip到所述更新mha配置模块;从mha配置中删除所述待下线节点ip,从而更新所述mha配置;否则报错退出。

进一步地,所述mysql主从节点中下线从库模块包括:

需要传入的参数:待下线节点ip和mysql端口;

更新mha配置模块执行结束后,登陆所述待下线节点,根据mysql端口,获取到待下线mysql数据库服务,然后执行停止mysql数据库服务操作,最后,清理对应的数据库文件。

一种基于mha的mysql在线迁移方法,该方法包括以下步骤:

(1)按照mha部署要求,在mysql主从节点和新从节点上部署mhanode软件,在单独的一台服务器上部署mha管理软件;对于每个mysql主从集群,使用唯一的mysql端口作为标识,在mha管理节点,对于每个mysql主从集群,有一个对应的mha配置和mha切换脚本;检查mysql主从节点和新从节点的互通性,确保所述mysql主从节点和新从节点之间是互通的;启动mha监控服务;

(2)在线做数据模块针对待下线节点ip和mysql端口,根据mysql内部接口,获取待下线节点的角色,如果所述待下线节点角色是slave,那么记为做数据源节点,其角色为slave;否则,根据mysql内部接口,获取所述待下线节点对应的所有从库,然后随机从中选择一个从库作为做数据源节点,其角色为slave,如果不存在mysql从库,那么选择mysql主库作为做数据源节点,其角色为master;采用percona‐xtrabackup工具作为在线做数据工具,做数据过程包括两个阶段:拷贝文件和应用日志,经过两个阶段后得到的一致性文件记为镜像文件。

(3)做从库模块调用镜像文件,然后按照mysql数据库部署要求,启动mysql数据库服务,然后启动从库同步数据;执行结束后,如果执行失败,那么报错退出;做从库模块成功执行结束后,在mha管理节点,需要更新所述mysql主从集群对应的mha配置,把新从节点加入到所述mha配置。

(4)在线切换模块判断待下线节点的角色为slave,那么发送所述mysql端口和带下线节点ip到更新mha配置模块;否则,调用mha自身接口在线切换mysql主库,产生新mysql主库,所述mysql主从集群中其他数据库节点重新指向所述新mysql主库,然后,发送所述mysql端口和待下线节点ip到更新mha配置模块。

(5)更新mha配置:根据在线切换模块返回值,从mha配置中删除所述待下线节点ip,从而更新mha配置。

(6)下线从库:登陆待下线节点,根据mysql端口,获取到待下线mysql数据库服务,然后执行停止mysql数据库服务操作,最后,清理对应的数据库文件。

本发明的有益效果是:

(1)操作步骤简单,只需要简单的几个命令,就可以完成mysql数据库节点的迁移,尤其是迁移mysql主库节点,更加显得方便简单。

(2)稳定性高,几乎不会出现错误,提高了迁移的质量。

(3)较好地保证了数据一致性,避免出现数据不一致问题。

(4)自动化程度高,只需要点击一下鼠标,就可以实现mysql在线迁移,大大提升了工作效率。

(5)支持大规模迁移:由于操作简单,可以在同一时间内,操作多个mysql主从集群,实现多个mysql数据库节点在线迁移。

附图说明

图1是本发明基于mha的mysql在线迁移方法总体架构图;

图2是本发明基于mha的mysql在线迁移系统各个模块流程图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步详细说明。

本发明提供的一种基于mha的mysql在线迁移系统,如图1所示,包括mha管理节点、mysql主从节点和新从节点三个单元:

(1)mha管理节点

包括mha管理模块、在线切换模块和更新mha配置模块,该节点上需要部署mha管理软件包和node软件包,当需要切换mysql主库时,通过mha管理节点实现一键操作;当mysql主从节点发生变更时,需要更改mha相关配置,从而正确检测mysql主从状态。

(2)mysql主从节点

包括在线做数据模块和下线从库模块。从mysql主从集群中,选择一个节点作为在线做数据的源,在线做数据结束后,产生镜像文件,发送所述镜像文件到新从节点;在mysql主从集群中,需要下线的数据库节点记为待下线节点,新从节点加入到mha后,如果待下线节点为从库,直接执行下线操作,将所述待下线节点从mha配置中删除,然后停止所述待下线节点mysql服务;如果所述待下线节点为主库,需要执行mha在线切换主库操作,人工触发mysql主从切换后,然后再下线待下线节点。

(3)新从节点

包括做从库模块。当所述镜像文件发送到新从节点,在该节点上可以快速实现一个mysql从库,然后加入到mysql主从集群中。

进一步地,每个单元具体包括的模块如下:

(1)mha管理模块

首先,按照mha部署要求,在mysql主从节点和新从节点上部署mhanode软件,在单独的一台服务器上部署mha管理软件。

对于每个mysql主从集群,使用唯一的mysql端口作为标识,在mha管理节点,有一个对应的mha配置和mha切换脚本,mha配置是配置所述mysql主从集群中主库和所有从库的ip、mysql端口和mysql数据目录;mha切换脚本是配置了所述mysql主从集群相应的vip和切换逻辑,用于切换mysql主库操作的脚本文件。

然后,检查mysql主从节点和新从节点的互通性,确保所述mysql主从节点和新从节点之间是互通的。

最后,启动mha监控服务,便于及时监控和mysql主库自动切换。

(2)在线做数据模块

需要传入的参数:待下线节点ip、mysql端口、数据库用户名、数据库密码和做数据目录;

做数据目录是做数据过程中,保存镜像文件的目录。

针对所述待下线节点ip和mysql端口,根据mysql内部接口,获取所述待下线节点的角色(分为master和slave两种),如果所述待下线节点角色是slave,那么记为做数据源节点,其角色为slave;否则,根据mysql内部接口,获取所述待下线节点对应的所有从库,然后随机从中选择一个从库作为做数据源节点,其角色为slave,如果不存在mysql从库,那么选择mysql主库作为做数据源节点,其角色为master。

本发明采用percona‐xtrabackup工具作为在线做数据工具,该工具采用不同的选项支持不同角色的做数据源节点做数据。根据做数据源节点的角色不同,所述做数据工具采用不同的选项进行做数据。做数据过程包括两个阶段:拷贝文件和应用日志。所述拷贝文件是在线拷贝mysql的数据文件和日志文件,不影响mysql数据库服务。所述应用日志,是根据mysql崩溃恢复原理,对日志文件执行前滚和回滚操作。经过两个阶段后得到的一致性文件记为镜像文件。

拷贝文件操作如下:

1)做数据源节点角色是slave

#innobackupex‐‐slave‐info‐‐rsync‐‐user=数据库用户名‐‐password=数据库密码‐‐host=做数据源节点ip‐‐port=mysql>端口‐‐no‐timestamp做数据目录

2)做数据源节点角色是master

#innobackupex‐‐rsync‐‐user=数据库用户名‐‐password=数据库密码‐‐host=做数据源节点ip‐‐port=mysql端口‐‐no‐timestamp做数据目录

应用日志操作如下:

#innobackupex‐‐apply‐log做数据目录

很显然,做数据步骤简单,而且不影响mysql数据库服务。

本模块执行结束后,如果返回值为0,表示操作成功;否则,表示操作失败,如果操作失败,那么报错退出。

(3)做从库模块

需要传入的参数:做数据源节点ip和镜像文件

在做数据源节点上执行在线做数据模块结束后,如果返回值为0,那么在新从节点上执行本模块。

在线做数据模块执行结束后,会产生镜像文件,在新从节点上执行该模块。本模块调用镜像文件,然后按照mysql数据库部署要求,启动mysql数据库服务,然后启动从库同步数据。

调用镜像文件操作如下:

#scp–r做数据源节点ip:镜像文件mysql数据目录

说明:mysql数据目录是存放mysql数据库文件的目录

登陆mysql从库,启动从库数据同步操作如下:

startslave;

登陆mysql从库,通过如下方式查看从库同步状态:

showslavestatus\g

本模块执行结束后,如果执行成功,返回为真,否则报错退出。

做从库模块执行成功结束后,在mha管理节点,需要更新所述mysql主从集群对应的mha配置,把新从节点加入到所述mha配置。

(4)在线切换模块

需要传入的参数:mysql端口和待下线节点的角色

做从库模块执行成功结束后,在mha管理节点,执行本模块。

如果待下线节点的角色为slave,那么发送mysql端口和待下线节点ip到更改mha配置模块;否则,需要调用mha自身接口在线切换mysql主库。

根据mysql端口获取对应的mha配置,首先检查是否启动了对应的mha监控服务,如果启动了所述mha监控服务,需要停止所述mha监控服务,否则,执行该模块。

根据所述mha配置,调用mha自身接口,在线切换mysql主库,产生新mysql主库,所述mysql主从集群中其他数据库节点重新指向所述新mysql主库,然后,发送mysql端口和待下线节点ip到更改mha配置模块。

在线切换mysql主库操作如下:

#masterha_master_switch‐‐master_state=alive‐‐interactive=0‐‐running_updates_limit=60mha配置

(5)更新mha配置模块

需要传入的参数:mysql端口和待下线节点ip

在线切换模块执行结束后,返回所述mysql端口和待下线节点ip给本模块,根据所述mysql端口,获取对应的所述mha配置。

更改mha配置模块,主要是从mha配置中,删除所述待下线节点ip,从而更新所述mha配置。

然后,启动mha监控服务,启动操作如下:

#nohupmasterha_managermha配置‐‐ignore_fail_on_start‐‐remove_dead_master_conf‐‐ignore_last_failover‐‐wait_on_monitor_error=3600‐‐manager_log=/tmp/manager.log&

(6)下线从库模块

需要传入的参数:待下线节点ip和mysql端口

更新mha配置模块执行结束后,在待下线节点上执行本模块。

登陆所述带下线节点,根据mysql端口,获取到待下线mysql数据库服务,然后执行停止mysql数据库服务操作,最后,清理对应的数据库文件。

本发明还提供了一种基于mha的mysql在线迁移方法,如图2所示,该方法包括以下步骤:

(1)按照mha部署要求,在mysql主从节点和新从节点上部署mhanode软件,在单独的一台服务器上部署mha管理软件;对于每个mysql主从集群,使用唯一的mysql端口作为标识,在mha管理节点,对于每个mysql主从集群,有一个对应的mha配置和mha切换脚本;检查mysql主从节点和新从节点的互通性,确保所述mysql主从节点和新从节点之间是互通的;启动mha监控服务;

(2)在线做数据模块针对待下线节点ip和mysql端口,根据mysql内部接口,获取待下线节点的角色,如果所述待下线节点角色是slave,那么记为做数据源节点,其角色为slave;否则,根据mysql内部接口,获取所述待下线节点对应的所有从库,然后随机从中选择一个从库作为做数据源节点,其角色为slave,如果不存在mysql从库,那么选择mysql主库作为做数据源节点,其角色为master;采用percona‐xtrabackup工具作为在线做数据工具,做数据过程包括两个阶段:拷贝文件和应用日志,经过两个阶段后得到的一致性文件记为镜像文件。

(3)做从库模块调用镜像文件,然后按照mysql数据库部署要求,启动mysql数据库服务,然后启动从库同步数据;执行结束后,如果执行失败,那么报错退出;做从库模块成功执行结束后,在mha管理节点,需要更新所述mysql主从集群对应的mha配置,把新从节点加入到所述mha配置。

(4)在线切换模块判断待下线节点的角色为slave,那么发送所述mysql端口和带下线节点ip到更新mha配置模块;否则,调用mha自身接口在线切换mysql主库,产生新mysql主库,所述mysql主从集群中其他数据库节点重新指向所述新mysql主库,然后,发送所述mysql端口和待下线节点ip到更新mha配置模块。

(5)更新mha配置:根据在线切换模块返回值,从mha配置中删除所述待下线节点ip,从而更新mha配置。

(6)下线从库:登陆待下线节点,根据mysql端口,获取待下线mysql数据库服务,然后执行停止mysql数据库服务操作,最后清理对应的数据库文件。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1