本发明属于数据库管理技术领域,主要应用于在线迁移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数据库服务操作,最后清理对应的数据库文件。