发明内容
本申请实施例提供了一种数据迁移方法、装置、电子设备以及存储介质,可以在第一集群中的源实例产生新的数据时,立即将新产生的数据同步迁移到第二集群中的目标实例中,实现了ElasticSearch集群之间的数据的实时迁移。具体技术方案如下:
在本申请实施例的第一方面,首先提供了一种数据迁移方法,应用于数据迁移服务系统,所述方法包括:
在第一集群中的源实例产生新的数据时,将所述新的数据作为所述源实例对应的待迁移数据;
对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中;
将各个所述队列中的数据输出到第二集群中的目标实例。
可选地,所述各个类型的数据包括正常数据和异常数据;对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中,包括:
对于所述待迁移数据中的正常数据,采用预设同步方式,通过同步管道将所述正常数据存储到第一队列中;
对于所述待迁移数据中的异常数据,采用预设同步方式,通过同步管道将所述异常数据存储到第二队列中。
可选地,在将各个所述队列中的数据输出到第二集群中的目标实例后,所述方法还包括:
在所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量,与所述目标实例的相应参数一致,且所述同步管道中输入文件的数量与输出文件的数量一致时,确定数据迁移成功。
可选地,所述方法还包括:
检测所述同步管道的运行状态是否正常;
通过同步管道将所述数据存储到与数据的类型匹配的队列中,包括:
在所述同步管道的运行状态正常时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
可选地,在通过同步管道将所述数据存储到与数据的类型匹配的队列的过程中,所述方法还包括:
根据所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量中的一者或多者,分别与所述目标实例的相应参数的对比结果,得到数据迁移进度;
输出所述数据迁移进度。
可选地,在通过同步管道将所述数据存储到与数据的类型匹配的队列的过程中,所述方法还包括:
获取所述第一集群中的源实例的Master节点状态,和所述第二集群中的目标实例的Master节点状态;
通过同步管道将所述数据存储到与数据的类型匹配的队列中,包括:
在所述源实例的Master节点状态和所述目标实例的Master节点状态均表示未重新选主时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
可选地,在通过同步管道将所述数据存储到与数据的类型匹配的队列之前,所述方法还包括:
对所述第一集群中的源实例、所述第二集群中的目标实例以及所述第一队列与所述第二队列所在的存储系统的存活状态进行检测;
通过同步管道将所述数据存储到与数据的类型匹配的队列中,包括:
在所述源实例、所述目标实例以及所述存储系统各自的存活状态均检测通过时,通过同步管道将所述数据存储到与数据的类型匹配的队列。
可选地,对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中,包括:
将全量同步、增量同步以及全量加增量同步中的任意一种方式确定为目标同步方式;
对于所述待迁移数据中各个类型的数据,采用所述目标同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
在本申请实施例的第二方面,还提供了一种数据迁移装置,应用于数据迁移服务系统,所述装置包括:
第一确定模块,用于在第一集群中的源实例产生新的数据时,将所述新的数据作为所述源实例对应的待迁移数据;
存储模块,用于对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中;
第一输出模块,用于将各个所述队列中的数据输出到第二集群中的目标实例。
可选地,所述各个类型的数据包括正常数据和异常数据;所述存储模块包括:
第一存储子模块,用于对于所述待迁移数据中的正常数据,采用预设同步方式,通过同步管道将所述正常数据存储到第一队列中;
第二存储子模块,用于对于所述待迁移数据中的异常数据,采用预设同步方式,通过同步管道将所述异常数据存储到第二队列中。
可选地,所述装置还包括:
第二确定模块,用于在所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量,与所述目标实例的相应参数一致,且所述同步管道中输入文件的数量与输出文件的数量一致时,确定数据迁移成功。
可选地,所述装置还包括:
第一检测模块,用于检测所述同步管道的运行状态是否正常;
所述存储模块包括:
第三存储子模块,用于在所述同步管道的运行状态正常时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
可选地,所述装置还包括:
第一获取模块,用于根据所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量中的一者或多者,分别与所述目标实例的相应参数的对比结果,得到数据迁移进度;
第二输出模块,用于输出所述数据迁移进度。
可选地,所述装置还包括:
第二获取模块,用于获取所述第一集群中的源实例的Master节点状态,和所述第二集群中的目标实例的Master节点状态:
第四存储子模块,用于在所述源实例的Master节点状态和所述目标实例的Master节点状态均表示未重新选主时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
可选地,所述装置还包括:
第二检测模块,用于对所述第一集群中的源实例、所述第二集群中的目标实例以及所述第一队列与所述第二队列所在的存储系统的存活状态进行检测;
所述存储模块包括:
第五存储子模块,用于在所述源实例、所述目标实例以及所述存储系统各自的存活状态均检测通过时,通过同步管道将所述数据存储到与数据的类型匹配的队列。
可选地,所述存储模块包括:
确定子模块,用于将全量同步、增量同步以及全量加增量同步中的任意一种方式确定为目标同步方式;
第六存储子模块,用于对于所述待迁移数据中各个类型的数据,采用所述目标同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
在本申请实施例的第三方面,还提供了一种终端设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现本申请实施例的第一方面所述的数据迁移方法中的步骤。
在本申请实施例的第四方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的数据迁移方法中的步骤。
采用本申请的数据迁移方法,在第一集群中的源实例产生新的数据时,将新的数据作为源实例对应的待迁移数据,接着,对于待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将数据存储到与数据的类型匹配的队列中。最后,将各个队列中的数据输出到第二集群中的目标实例。通过该方法,可以在第一集群中的源实例产生新的数据时,立即将新产生的数据同步迁移到第二集群中的目标实例中,实现了ElasticSearch集群之间的数据的实时迁移。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请提供了一种基于ElasticSearch集群的实时数据同步迁移方法。在同步迁移时,可采用ElasticSearch-Sync服务(ElasticSearch同步服务)。Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。ElasticSearch-Sync服务主要包含Logstash和Comparison两个组件。其中,Logstash是基于Persistent Queues、Dead LetterQueues进行数据同步和迁移的工具组件。Comparison是基于Logstash监控API对管道任务进行全量一致性校验的工具组件。
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到给定的地址。
图1是本申请一实施例示出的一种数据迁移架构图。图1中示出了两个ElasticSearch集群,分别为K8S(kubernetes,是一个开源的,用于管理云平台中多个主机上的容器化的应用)集群S1和K8S集群S2。K8S集群S1中包括源ElasticSearch集群A,源ElasticSearch集群A中有源ElasticSearch实例(本申请中,ElasticSearch实例是指一个正在运行着Elasticsearch程序的程序本身)。K8S集群S2中包括目标ElasticSearch集群B,目标ElasticSearch集群B中有目标ElasticSearch实例。ElasticSearch管理服务中包括ElasticSearch业务服务API(Application Programming Interface,应用程序接口)和ElasticSearch业务服务CoreServer。K8S集群S2中还部署有ElasticSearch-Job Operator和ElasticSearch-Sync。ElasticSearch-Job Operator包括OperatorWebHook及OperatorController等功能组件。ElasticSearch-Sync中包括Logstash和Comparison两个功能组件。Ceph集群是用于支撑底层的物理存储,在Logstash同步过程中,PersistentQueues、Dead Letter Queues存放在Ceph集群中,并通过StorageClass以静态PV/PVC(PV是指PersistentVolume,PV提供网络存储资源,PVC是指PersistentVolumeClaim,PVC请求存储资源)方式挂载Logstash的每个实例pod(Plain old data structure,是一类数据结构,POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处,指不同系统之间只能以底层数据的形式进行交互,系统的高层逻辑不能互相兼容。比如当对象的字段值是从外部数据中构建时,系统还没有办法对对象进行语义检查和解释,这时就适用POD来存储数据)中(Ceph集群采用RBD块存储模式)。
图1中示出了将源ElasticSearch集群A中的源ElasticSearch实例的数据同步到目标ElasticSearch集群B中的目标ElasticSearch实例的情形。该过程中可借助数据迁移服务系统实现,该数据迁移服务系统具体包括:ElasticSearch管理服务、ElasticSearch-Job Operator以及ElasticSearch-Sync。
本申请的数据迁移方法可以应用于图1中的数据迁移服务系统。图2是本申请一实施例示出的一种数据迁移方法的流程图。参照图2,本申请的数据迁移方法具体可以包括如下步骤:
步骤S21:在第一集群中的源实例产生新的数据时,将所述新的数据作为所述源实例对应的待迁移数据。
在本实施例中,第一集群是指需要进行数据迁移的ElasticSearch集群,例如图1中的源ElasticSearch集群A。源实例是指源ElasticSearch实例,或源ElasticSearch集群实例。
本申请中进行数据迁移的目的是保证第二集群中的ElasticSearch实例的数据始终与第一集群中的ElasticSearch实例的数据一致。因此,只要第一集群中的源实例产生新的数据,立即将新的数据作为源实例对应的待迁移数据,并执行步骤步骤S22-步骤S23,将待迁移数据迁移到第二集群中的ElasticSearch实例中,实现跨ElasticSearch集群的数据实时迁移,从而保证第一集群的源ElasticSearch实例中的数据始终与第二集群的目标ElasticSearch实例中的数据一致。
以图1为例,如果要保持源ElasticSearch实例和目标ElasticSearch实例中的数据始终一致,只要源ElasticSearch集群A的源ElasticSearch实例中产生了新的数据,那么立即将产生的新的数据同步迁移到目标ElasticSearch集群B的目标ElasticSearch实例中,使得源ElasticSearch实例和目标ElasticSearch实例中的数据完全相同。
步骤S22:对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
在本实施例中,各个类型的数据包括正常数据和异常数据。同步方式包括全量同步、增量同步以及全量同步+增量同步共三种方式,预设同步方式可以是三种同步方式中的任意一种同步方式。
在本实施例中,Logstash可以通过创建同步管道任务,将待迁移数据同步到与数据的类型匹配的队列中,队列存放在Ceph集群中,队列包括Persistent Queues和DeadLetter Queues。
步骤S23:将各个所述队列中的数据输出到第二集群中的目标实例。
在本实施例中,在将待迁移数据持久化存储到队列中后,接着将队列中的数据输出到第二集群中的目标实例。
以图1为例,只要源ElasticSearch集群A中的源ElasticSearch实例产生了新的数据,那么首先将产生的新的数据同步到Ceph集群中的队列中进行持久化存储,然后再将队列中的数据同步到目标ElasticSearch集群B中的目标ElasticSearch实例。
采用本申请的数据迁移方法,在第一集群中的源实例产生新的数据时,将新的数据作为源实例对应的待迁移数据,接着,对于待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将数据存储到与数据的类型匹配的队列中。最后,将各个队列中的数据输出到第二集群中的目标实例。通过该方法,可以在第一集群中的源实例产生新的数据时,立即将新产生的数据同步迁移到第二集群中的目标实例中,实现了ElasticSearch集群之间的数据的实时迁移。
结合以上实施例,在一种实施方式中,各个类型的数据包括正常数据和异常数据。在此基础上,对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中,可以包括:
对于所述待迁移数据中的正常数据,采用预设同步方式,通过同步管道将所述正常数据存储到第一队列中;
对于所述待迁移数据中的异常数据,采用预设同步方式,通过同步管道将所述异常数据存储到第二队列中。
在本实施例中,第一队列是指Persistent Queues,第二队列是指Dead LetterQueues,Persistent Queues和Dead Letter Queues均存放在Ceph集群中。
在本实施例中,为了防止数据迁移过程中出现异常情况而导致数据丢失,在数据迁移过程中,首先通过Logstash创建的同步管道,将第一集群中源ElasticSearch实例中的数据输入到Ceph集群的Persistent Queues以实现持久化存储,然后再通过同步管道将数据从Persistent Queues输出到第二集群中的目标ElasticSearch实例,从而实现数据的迁移。
在本实施例中,如果在数据实时迁移过程中遇到由于数据包含映射错误或其他无法重试事件(响应码为400/404)而导致的数据问题,为了使得异常数据也可以实现迁移,对于待迁移数据中的异常数据,首先通过Logstash创建的同步管道,将异常数据(例如挂起或要丢弃的数据)输出到Ceph集群的Dead Letter Queues以实现持久化存储,同时,再通过Logstash创建的另外一个异常管道,对Dead Letter Queues中的数据进行过滤处理,使得异常数据可以通过过滤处理而被继续迁移。处理完成后,再通过同步管道将Dead LetterQueues中的数据输出到第二集群中的目标ElasticSearch实例,从而实现数据的迁移。
在本实施例中,Logstash创建的管道(包括同步管道和异常管道)都可以对数据进行过滤处理。
在本实施例中,Logstash通过持久化Persistent Queues和Dead Letter Queues相结合的方式,启动第一集群向第二集群的全量、增量、全量+增量的实时迁移任务。如果第一集群中不断有新的数据输入,Logstash负责实时向第二集群同步新增的数据,直到第一集群中没有新的数据输入。
结合以上实施例,在一种实施方式中,在将各个所述队列中的数据输出到第二集群中的目标实例后,本申请的数据迁移方法还可以包括如下步骤:
在所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量,与所述目标实例的相应参数一致,且所述同步管道中输入文件的数量与输出文件的数量一致时,确定数据迁移成功。
在本实施例中,若实时迁移完成,ElasticSearch Job Controller调用Comparison进行全量数据一致性校验。具体地,如果满足下述条件1-4,那么源实例的数据和目标实例中的数据完全一致,表示数据迁移成功:
1、源ElasticSearch实例的索引文件的总数量和目标ElasticSearch实例的索引文件的总数量一致;
2、源ElasticSearch实例的所有文件的总数量和目标ElasticSearch实例的所有文件的总数量一致;
3、源ElasticSearch实例的每个索引文件中文件的数量和目标ElasticSearch实例的每个索引文件中文件的数量一致;
4、同步管道中输入文件的数量与输出文件的数量一致。
在本实施例中,还可以根据同步管道的异常加载次数来对数据迁移效果进行评判。异常加载次数越少,数据迁移效果越好,异常加载次数越多,数据迁移效果越差。
结合以上实施例,在一种实施方式中,本申请的数据迁移方法还可以包括如下步骤:
检测所述同步管道的运行状态是否正常。
在此基础上,通过同步管道将所述数据存储到与数据的类型匹配的队列中,可以包括:
在所述同步管道的运行状态正常时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
在本实施例中,Logstash提供有监控API接口,用于监控Logstash及管道的内部情况。正常情况下,如果数据迁移完成,检查点Checkpoint.head文件会停止增长,Page.x不存在(随着同步完成,队列页文件被目标ElasticSearch回放完成)。
在实时迁移的过程中,ElasticSearch-Job Controller会对Logstash的同步管道的运行状态进行API监控,以检测同步管道的运行状态是否正常。在同步管道的运行状态正常时,才会通过同步管道将数据存储到与数据的类型匹配的队列中。
结合以上实施例,在一种实施方式中,本申请还提供了一种获得实时迁移进度的方法。具体地,在通过同步管道将所述数据存储到与数据的类型匹配的队列的过程中,本申请的方法还可以包括:
根据所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量中的一者或多者,分别与所述目标实例的相应参数的对比结果,得到数据迁移进度;
输出所述数据迁移进度。
在本实施例中,可以根据目标实例的索引文件的总数量占源实例的索引文件的总数量的比值、目标实例的所有文件的总数量占源实例的所有文件的总数量的比值、目标实例的每个索引文件中文件的数量占源实例的每个索引文件中文件的数量的比值中的一者或多者,得到数据迁移进度。
在得到数据迁移进度后,可以输出数据迁移进度,便于用户实时了解整个数据迁移情况。
结合以上实施例,在一种实施方式中,在通过同步管道将所述数据存储到与数据的类型匹配的队列的过程中,本申请的数据迁移方法还可以包括:
获取所述第一集群中的源实例的Master节点状态,和所述第二集群中的目标实例的Master节点状态。
在此基础上,通过同步管道将所述数据存储到与数据的类型匹配的队列中,具体可以包括:
在所述源实例的Master节点状态和所述目标实例的Master节点状态均表示未重新选主时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
在本实施例中,Logstash在同步迁移前和同步迁移过程中,ElasticSearch-JobController会不断探测源实例的Master节点状态和目标ElasticSearch集群实例的Master节点状态,以防止Master节点重新选主(某些情况下master异常退出,导致其他的节点竞选成master,因为数据不存在master,会导致该竞选成功的节点数据要迁出该节点)。在源实例的Master节点状态和目标实例的Master节点状态均表示未重新选主时,才通过同步管道将数据存储到与数据的类型匹配的队列中。
结合以上实施例,在一种实施方式中,在通过同步管道将所述数据存储到与数据的类型匹配的队列之前,本申请的数据迁移方法还可以包括:
对所述第一集群中的源实例、所述第二集群中的目标实例以及所述第一队列与所述第二队列所在的存储系统的存活状态进行检测。
在此基础上,通过同步管道将所述数据存储到与数据的类型匹配的队列中,包括:
在所述源实例、所述目标实例以及所述存储系统各自的存活状态均检测通过时,通过同步管道将所述数据存储到与数据的类型匹配的队列。
在通过同步管道将数据存储到与数据的类型匹配的队列之前,ElasticSearch-Job Operator触发变更准入Mutating Webhook,Mutating Webhook通过Webhook回调的方式启动对源ElasticSearch实例、目标ElasticSearch实例以及Ceph存储等存活状态检查,如果检查通过,则通过同步管道将数据存储到与数据的类型匹配的队列,否则提示异常并通知用户进行检查。
本实施例中,在源实例、目标实例以及存储系统各自的存活状态均检测通过时,通过同步管道将数据存储到与数据的类型匹配的队列,可保证源实例中的数据顺利迁移到目标实例。
存活状态可以理解为运行健康状态,在实施时可以通过API获取到ElasticSearch集群的运行健康状态和Ceph集群的运行健康状态。只有当源实例、目标实例以及存储系统均处于健康的运行状态时,才能进一步实施数据迁移。
结合以上实施例,在一种实施方式中,对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中,具体可以包括:
将全量同步、增量同步以及全量加增量同步中的任意一种方式确定为目标同步方式;
对于所述待迁移数据中各个类型的数据,采用所述目标同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
在本实施例中,预设同步方式可以是全量同步、增量同步以及全量加增量同步中的任意一种方式。
在本实施例中,在将源实例中的数据同步到目标实例中时,可以采用先全量同步一次(保证同步效率)再进行增量同步(保证数据实时迁移)的方式,既能保证同步效率,也能保证目标实例中的数据的实时性,显著提升数据迁移效果。在进行全量同步时,可以采用集群自带的snapshot(快照技术,主要采用Copy on Write的算法)快照功能进行数据同步。在进行增量实时同步时,可采用前文所述的步骤S21-步骤S23进行同步。
图3是本申请一实施例示出的一种数据迁移方法的完整过程示意图。下面将结合图3,以一个完整实施例对本申请的数据迁移方法进行详细说明。该实施例旨在将图1中的源ElasticSearch集群A的源ElasticSearch实例中的数据同步到目标ElasticSearch集群B中的目标ElasticSearch实例,具体包括如下步骤1-步骤11。
步骤1:通过ElasticSearch业务服务API,向ElasticSearch业务服务CoreServer发起创建并启动实时迁移任务的请求。ElasticSearch业务服务CoreServer可以理解为针对ElasticSearch编写的前置API,用于操作各个ElasticSearch集群。
步骤2:ElasticSearch业务服务CoreServer创建实时迁移任务,将创建的实时迁移任务存入MySQL源数据库。接着,ElasticSearch业务服务CoreServer通过HTTPS向K8SAPI Server(K8S API Server是每个ElasticSearch集群内置的模块)发起请求,由K8S APIServer做内部认证授权(Elasticsearch-Job Operator运行在K8S之上,通过K8S APIServer访问它需要进行授权认证,该认证由程序自动处理)。
步骤3:ElasticSearch-Job Operator触发变更准入Mutating Webhook,MutatingWebhook通过Webhook回调的方式启动对源ElasticSearch实例、目标ElasticSearch实例和Ceph存储等存活状态检查。检查通过则进入步骤4,否则提示异常,并通知用户进行检查。
其中,存活状态可以理解为运行健康状态,在实施时可以通过API获取到ElasticSearch集群的运行健康状态和Ceph集群的运行健康状态。
其中,ElasticSearch通过ElasticSearch OpenAPI对外提供服务,Ceph集群通过S3 API对外提供服务。
步骤4:Validating Webhook做准入验证校验及缺省项默认规则初始化。完成校验和初始化后,由ElasticSearch-Job Controller启动、控制和加载Logstash配置和Pipeline管道配置。进行准入验证校验是为了确保迁移程序能够创建成功,初始化是指将运行operator迁移服务需要的资源和镜像进行初始化,确保参数正确且有足够的资源进行迁移。
步骤5:在Logstash进行数据的同步迁移前和同步迁移过程中,ElasticSearch-Job Controller不断探测源ElasticSearch实例的Master节点状态和目标ElasticSearch实例的Master节点状态,以防止Master节点重新选主。只有源ElasticSearch实例的Master节点状态和目标ElasticSearch实例的Master节点状态均表示未重新选主时,才继续进行数据迁移。Master节点重新选主是指某些情况下Master异常退出,导致其他的节点竞选成Master,因为数据不存在Master,所以会导致该竞选成功的节点数据要迁出该节点,进而导致数据同步出现异常。
步骤6:为了防止实时迁移过程中因为异常情况导致数据丢失,Logstash启动实时迁移任务后,通过Logstash创建的同步管道将源ElasticSearch实例中的数据持久化到Ceph集群中的Persistent Queues中,然后通过同步管道将数据从Persistent Queues输出到目标源ElasticSearch实例。
同步管道是Logstash创建的一个共享内存区域,在这个共享内存区域中,各个进程之间可以相互通讯。首先,Logstash从源ElasticSearch实例中获得待迁移数据,将待迁移数据存入同步管道。接着,同步管道将待迁移数据输入Ceph集群的Persistent Queues进行持久化存储。接着,同步管道再将Persistent Queues中的待迁移数据输入目标ElasticSearch实例。
步骤7:如果在数据实时迁移过程中遇到由于数据包含映射错误或其他无法重试事件(响应码为400/404)而导致的数据问题,为了使得异常数据也可以实现迁移,在实时迁移过程中,通过Logstash创建的同步管道将异常数据(挂起或要丢弃的数据)输入到Ceph集群的Dead Letter Queues。同时,通过Logstash创建的另外一个异常管道,对持久化存入Dead Letter Queues的数据进行异常数据过滤处理,使得异常数据可以通过过滤处理而被继续迁移。然后通过同步管道将处理后的数据从Dead Letter Queues输出到目标ElasticSearch实例。
步骤8:Logstash通过持久化Persistent Queues和Dead Letter Queues相结合的方式,启动源ElasticSearch集群向目标ElasticSearch集群的全量、增量、全量+增量的实时迁移任务。如果源ElasticSearch集群不断有新的数据存入,Logstash负责实时向目标ElasticSearch集群同步新增的数据,直到源ElasticSearch集群内没有新的数据存入。
步骤9:Logstash提供有监控API接口,通过该监控API接口,ElasticSearch-JobController可以对Logstash的同步管道的运行状态进行监控,以及时检测出数据同步是否出现异常。
正常情况下,如果实时迁移任务完成,检查点Checkpoint.head文件会停止增长,Page.x不存在(随着同步完成,队列页文件被目标ElasticSearch实例回放完成)。
步骤10:若实时迁移任务完成,ElasticSearch-Job Controller调用Comparison进行全量数据一致性校验,具体操作包括:将源ElasticSearch实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量,与目标ElasticSearch实例的相应参数进行对比,将同步管道中输入文件的数量与输出文件的数量进行对比,如果源ElasticSearch实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量,与目标ElasticSearch实例的相应参数一致,且同步管道中输入文件的数量与输出文件的数量一致,可以确定数据迁移成功。
步骤11:同步完成之后,ElasticSearch-Job Controller通知ElasticSearch业务服务CoreServer更新本次实时迁移任务的状态,并将本次实时迁移任务的状态存入MySQL源数据库中,ElasticSearch业务服务API通过刷新即可查看最新状态。
在执行上述步骤步骤1-步骤11时,如果需要停止实时迁移任务,通过ElasticSearch业务服务API,向ElasticSearch业务服务CoreServer发起停止实时迁移任务的请求。具体如图4所示。图4是本申请一实施例示出的一种停止数据迁移方法的完整过程示意图。
具体地,ElasticSearch业务服务CoreServer向Operator Controller发送停止实时迁移任务的指令,Operator Controller控制Logstash退出实时迁移任务。OperatorController将同步状态返回至ElasticSearch业务服务CoreServer,ElasticSearch业务服务CoreServer更新实时迁移任务的停止状态,并将实时迁移任务的状态存入MySQL源数据库中,ElasticSearch业务服务API通过刷新即可查看最新状态。
本申请提供了一种在多ElasticSearch集群业务数据连续增长的情况下,保持目标ElasticSearch实例与源ElasticSearch实例的数据的同步的方法。通过引入了Logstash进行中间管道实时同步机制,汇聚融合全量迁移和增量同步迁移各技术特点,可以实现跨集群下数据的实时迁移、跨集群下全量数据的迁移以及跨集群下全量加增量数据的同步追平(追平是指在一段时间内源ElasticSearch实例和目标ElasticSearch实例中的数据一致)。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
基于同一发明构思,本发明一实施例提供一种数据迁移装置500,应用于数据迁移服务系统。参考图5,图5是本发明一实施例示出的一种数据迁移装置的结构框图。如图5所示,该装置500包括:
第一确定模块501,用于在第一集群中的源实例产生新的数据时,将所述新的数据作为所述源实例对应的待迁移数据;
存储模块502,用于对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中;
第一输出模块503,用于将各个所述队列中的数据输出到第二集群中的目标实例。
可选地,所述各个类型的数据包括正常数据和异常数据;所述存储模块502包括:
第一存储子模块,用于对于所述待迁移数据中的正常数据,采用预设同步方式,通过同步管道将所述正常数据存储到第一队列中;
第二存储子模块,用于对于所述待迁移数据中的异常数据,采用预设同步方式,通过同步管道将所述异常数据存储到第二队列中。
可选地,所述装置500还包括:
第二确定模块,用于在所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量,与所述目标实例的相应参数一致,且所述同步管道中输入文件的数量与输出文件的数量一致时,确定数据迁移成功。
可选地,所述装置500还包括:
第一检测模块,用于检测所述同步管道的运行状态是否正常;
所述存储模块包括:
第三存储子模块,用于在所述同步管道的运行状态正常时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
可选地,所述装置500还包括:
第一获取模块,用于根据所述源实例的索引文件的总数量、所有文件的总数量以及每个索引文件中文件的数量中的一者或多者,分别与所述目标实例的相应参数的对比结果,得到数据迁移进度;
第二输出模块,用于输出所述数据迁移进度。
可选地,所述装置500还包括:
第二获取模块,用于获取所述第一集群中的源实例的Master节点状态,和所述第二集群中的目标实例的Master节点状态;
所述存储模块包括:
第四存储子模块,用于在所述源实例的Master节点状态和所述目标实例的Master节点状态均表示未重新选主时,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
可选地,所述装置500还包括:
第二检测模块,用于对所述第一集群中的源实例、所述第二集群中的目标实例以及所述第一队列与所述第二队列所在的存储系统的存活状态进行检测;
所述存储模块502包括:
第五存储子模块,用于在所述源实例、所述目标实例以及所述存储系统各自的存活状态均检测通过时,通过同步管道将所述数据存储到与数据的类型匹配的队列。
可选地,所述存储模块502包括:
确定子模块,用于将全量同步、增量同步以及全量加增量同步中的任意一种方式确定为目标同步方式;
第六存储子模块,用于对于所述待迁移数据中各个类型的数据,采用所述目标同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中。
本发明实施例还提供了一种终端设备,如图6所示。图6是本申请一实施例示出的一种终端设备的结构示意图。参照图6,终端设备包括处理器61、通信接口62、存储器63和通信总线64,其中,处理器61,通信接口62,存储器63通过通信总线64完成相互间的通信;
存储器63,用于存放计算机程序;
处理器61,用于执行存储器63上所存放的程序时,实现如下步骤:
在第一集群中的源实例产生新的数据时,将所述新的数据作为所述源实例对应的待迁移数据;
对于所述待迁移数据中各个类型的数据,采用预设同步方式,通过同步管道将所述数据存储到与数据的类型匹配的队列中;
将各个所述队列中的数据输出到第二集群中的目标实例。
或者处理器61在执行存储器63上所存放的程序时,实现上述其他方法实施例中的步骤。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据迁移方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据迁移方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。