CN111400285A - mySQL数据分片处理方法、装置、计算机设备和可读存储介质 - Google Patents
mySQL数据分片处理方法、装置、计算机设备和可读存储介质 Download PDFInfo
- Publication number
- CN111400285A CN111400285A CN202010216069.3A CN202010216069A CN111400285A CN 111400285 A CN111400285 A CN 111400285A CN 202010216069 A CN202010216069 A CN 202010216069A CN 111400285 A CN111400285 A CN 111400285A
- Authority
- CN
- China
- Prior art keywords
- mysq
- read
- library
- data
- middleware
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1479—Generic software techniques for error detection or fault masking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种mySQL数据分片处理方法、装置、计算机设备和计算机可读存储介质,该方法通过分库分表中间件结合数据库***实现了数据的灵活存、负载均衡和自动上下线,通过读写分离中间件解决了不支持读写分离以及不支持平滑扩容迁移的问题,通过主库高可用中间件解决不支持mySQL高可用的问题,实现了mySQL数据能够读写分离和mysql高可用、支持负载均衡和自动上下线、支持无缝扩容迁的移分片处理。
Description
技术领域
本申请涉及数据库领域,特别是涉及mySQL数据分片处理方法、装置、计算机设备和计算机可读存储介质。
背景技术
MySQL作为一种主流的关系型数据库,在互联网行业广泛应用,随着业务需求越来越复杂,数据量越来越大,对于mySQL存储以及数据访问的要求越来越高,一种比较可行的方案就是对mySQL大表进行分片处理。
然而,相关技术中,通过客户端模式实现分库分表,不具有读写分离和高可用功能,也不具有负载均衡和自动上下线功能;而通过服务端模式实现分库分表,也需要通过中间件代理或者需要支持mySQL协议的一套软件***来实现分库分表,由于架构复杂,性能较低,维护难度大,应用场景受限,只适合少部分离线业务。
目前针对相关技术中mySQL数据分片处理无法兼顾读写分离、mySQL高可用、负载均衡和自动上下线,以及平滑扩容迁移的问题,尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种mySQL数据分片处理方法、装置、计算机设备和计算机可读存储介质,以至少解决相关技术中mySQL数据分片处理读写分离、mySQL高可用、负载均衡和自动上下线,以及平滑扩容迁移的兼顾问题。
根据本发明的一个方面,提供了一种mySQL数据分片处理方法,该方法包括:
在进行读写操作时,根据分库分表策略获取分片连接,并通过分片连接将数据通过读写分离中间件写入mySQL主库,或者通过读写分离中间件从mySQL从库中读取数据,其中,分库分表策略配置于分库分表中间件中,分片连接由数据库***提供,分片连接指示用于数据的读写分离中间件;
数据库***根据读写操作的数据量改变数据库***中的可用连接数,其中,可用连接数量是同一时间所提供的分片连接的数量;
在从库扩容指令被触发的情况系下,通过读写分离中间件进行mySQL从库扩容,在从库迁移指令被触发的情况下,通过读写分离中间件进行mySQL从库迁移;
在读写操作过程中,在检测到mySQL主库发生故障的情况下,触发选举以及迁移新mySQL主库。
在其中一些实施例中,数据库***根据读操作以及写操作的数据量改变数据库***中的可用连接数包括:
在可用连接数小于预设的最大连接数,并且数据库***中的第一连接数大于可用连接数的情况下,增加可用连接数至预设的第一阈值,其中,第一连接数为数据库***中的待处理数据所需的连接数量;
在第二连接数小于可用连接数,并且,第二连接数大于预设的最小连接数的情况下,减少可用连接数至预设的第二阈值,其中,第二连接数为处理中数据所需的连接数量。
在其中一些实施例中,在分库分表中间件为sharding-jdbc的情况下,sharding-jdbc接收数据处理指令,根据数据处理指令中预设的关键词以及分库分表策略,从数据库***中获取分片连接,完成读写操作。
在其中一些实施例中,在读写分离中间件为proxysql的情况下,在数据库***中挂载多个proxysql服务,根据数据库***的启动连接指令上线proxysql服务,或者根据数据库***的断开连接指令下线proxysql服务;
在从库扩容指令被触发的情况系下,在新服务器上启动新proxysql服务,并将新proxysql服务加载至数据库***,在从库迁移指令被触发的情况下,在新服务器上启动新proxysql服务,并将新proxysql服务加载至数据库***,并从数据库***下线旧proxysql服务,在针对旧proxysql服务的数据交互请求结束后,下线旧proxysql服务。
在其中一些实施例中,在读写操作过程中,在检测到mySQL主库发生故障的情况下,触发选举以及迁移新mySQL主库包括:
在mySQL主库和mySQL从库上部署MHAnode,启动MHA监控服务,MHA监控服务用于监控mySQL主库可用性,在检测到mySQL主库发生故障的情况下,触发选举以及迁移新mySQL主库。
根据本发明的另一个方面,提供了一种mySQL数据分片处理装置,装置包括:分库分表模块、负载均衡模块、读写模块以及高可用模块;
分库分表模块用于在进行读写操作时,根据分库分表策略获取分片连接,其中,分片连接由数据库***提供,分片连接指示用于数据的读写分离中间件;
负载均衡模块用于数据库***根据读写操作的数据量改变数据库***中的可用连接数,其中,连接数量是同一时间所提供的分片连接的数量;
读写模块用于通过分片连接将数据通过读写分离中间件写入mySQL主库,或者通过读写分离中间件从mySQL从库中读取数据;在从库扩容指令被触发的情况系下,通过读写分离中间件进行mySQL从库扩容,在从库迁移指令被触发的情况下,通过读写分离中间件进行mySQL从库迁移;
高可用模块用于在读写操作过程中,在检测到mySQL主库发生故障的情况下,触发选举以及迁移新mySQL主库。
在其中一些实施例中,负载均衡模块还用于在在可用连接数小于预设的最大连接数,并且数据库***中的第一连接数大于可用连接数的情况下,增加可用连接数至预设的第一阈值,其中,第一连接数为数据库***中的待处理数据所需的连接数量;在第二连接数小于可用连接数,并且,第二连接数大于预设的最小连接数的情况下,减少可用连接数至预设的第二阈值,其中,第二连接数为处理中数据所需的连接数量。
在一些实施例中,分库分表模块中的分库分表中间件为sharding-jdbc,读写模块中的读写分离中间件为proxysql,高可用模块包括Master High Availability MHA
根据本发明的另一个方面,还提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述mySQL数据分片处理方法。
根据本发明的另一个方面,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述mySQL数据分片处理方法。
相比于相关技术,本申请提供的mySQL数据分片处理方法、装置、计算机设备和计算机可读存储介质,通过分库分表中间件结合数据库***实现了数据的灵活存、负载均衡和自动上下线,通过读写分离中间件解决了不支持读写分离以及不支持平滑扩容迁移的问题,通过主库高可用中间件解决不支持mySQL高可用的问题,实现了mySQL数据能够读写分离和mySQL高可用、支持负载均衡和自动上下线、支持无缝扩容迁的移分片处理。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本发明一个实施例中的mySQL数据分片处理方法的流程图;
图2是根据本发明一个实施例中MHA架构的示意图;
图3是根据本申请一个具体实施例中的mySQL数据分片处理方法的架构图;
图4是根据本发明一个实施例的mySQL数据分片处理装置的结构框图;
图5是根据本发明一个实施例中计算机设备的示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关的本领域的普通技术人员而言,在本申请揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属技术领域内具有一般技能的人士所理解的通常意义。本申请所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本申请所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本申请所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本申请所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本申请所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
本申请中描述的各种技术可用于mySQL数据库中数据存储和读写的过程中。mySQL是一个关系型数据库管理***,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。本发明所提供的mySQL数据分片处理方法可以用于mySQL客户端与mySQL存储引擎通之间,对数据读写过程进行管理控制,提高数据读写效率。
根据本发明的一个方面,提供了一种mySQL数据分片处理方法。图1是根据本发明一个实施例中的mySQL数据分片处理方法的流程图,如图1所示,该流程包括如下步骤:
步骤S110,在进行读写操作时,根据分库分表策略获取分片连接,并通过分片连接将数据通过读写分离中间件写入mySQL主库,或者通过读写分离中间件从mySQL从库中读取数据,其中,分库分表策略配置于分库分表中间件中,分片连接由数据库***提供,分片连接指示用于数据的读写分离中间件;在步骤S110中,应用服务根据用户指令进行读写操作,该读写操作是由分库分表中间件、数据库***以及读写分离中间件协作完成:应用服务根据分库分表中间件中的分库分表策略获取到与待操作数据对应的分片连接,该分片连接是由数据库***提供的可用连接中的一个。该分片连接提供的是应用服务与读写中间件之间的连接,而读写中间件将自动根据请求类型实现mySQL读写分离:进行写操作时,数据将被写入mySQL的主库,而进行读操作时,则从mySQL的从库中读取数据。上述分库分表中间件可以为MyCat、Tsharding和Sharding-jdbc等,读写分离中间件可以为Atlas、MyCAT和proxysql等。
步骤S120,数据库***根据读写操作的数据量改变数据库***中的可用连接数,其中,连接数量是同一时间所提供的分片连接的数量;在步骤S120中,数据库***根据待处理以及正在处理的读写数据量来调节可用的连接数,例如,在数据库***中待处理的数据量较大的情况下,启用空闲连接,将该空闲连接调整为可用连接,从而使数据库***起到了负载均衡的作用,对可用的分片连接的个数进行调控。
步骤S130,在从库扩容指令被触发的情况系下,通过读写分离中间件进行mySQL从库扩容,在从库迁移指令被触发的情况下,通过读写分离中间件进行mySQL从库迁移;在步骤S130中,上述读写分离中间件还起到了从库平滑扩容和迁移的作用。在从库扩容指令被触发的情况下,可以通过在读写分离中间件添加新的从库地址实现从库扩容,在从库迁移指令被触发的情况下,则可以通过在读写分离中间件中添加新的从库地址,在检测到老从库上没有查询请求的情况下,停止并将老从库下线。
步骤S140,在读写操作过程中,在检测到mySQL主库发生故障的情况下,主库高可用中间件触发选举以及迁移新mySQL主库。在步骤S140中,通过主库高可用中间件实现mySQL主库的高可用,从而在数据库发生了宕机或者意外中断等故障的情况下,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断;同时,用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致;此外,当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。在数据库数量较多的情况下,优选各类数据库的主库高可用中间件来保证数据库的可维护性,例如MMM(Master-Master replication manager forMySQL)、MHA或者各个版本的代理等等。
上述步骤S110至S140,利用分库分表中间件、数据库***、读写分离中间件以及主库高可用中间件的联合设置,通过分库分表中间件结合数据库***实现了数据的灵活存、负载均衡和自动上下线,通过读写分离中间件解决了不支持读写分离以及不支持平滑扩容迁移的问题,通过主库高可用中间件解决不支持mySQL高可用的问题,实现了mySQL数据能够读写分离和mysql高可用、支持负载均衡和自动上下线、支持无缝扩容迁的移分片处理。
在其中一些实施例中,数据库***(Database System,DBS)根据读操作以及写操作的数据量改变数据库***中的可用连接数包括:
在可用连接数小于预设的最大连接数,并且数据库***中的第一连接数大于可用连接数的情况下,增加可用连接数至预设的第一阈值,其中,第一连接数为数据库***中的待处理数据所需的连接数量;
在第二连接数小于可用连接数,并且,第二连接数大于预设的最小连接数的情况下,减少可用连接数至预设的第二阈值,其中,第二连接数为处理中数据所需的连接数量。
优选地,数据库***启动的时候根据预设的最大连接数M创建M个数据库(database,DB)连接对象加入库存连接池,根据预设的最小连接数N从库存连接池取N个DB连接对象,上述N个DB连接对象连接成功后加入活动DB连接池,该活动DB池中的连接对象数即为可用连接数。当DB队列中有数据的时候从活动DB连接池中取一个空闲DB连接对象,把数据传给该空闲DB连接对象处理。此外,计算第一数量,第一数量为队列中待处理的数据量除以每条连接预设的处理数量,当前连接数小于最大连接数M并且第一数量大于当前连接数量,就从库存连接池取出一个连接对象,连接成功后加入活动DB连接池,实现可用连接数的增加,可选地,每次增加的连接数量可以通过设置进行更改,上述根据队列中待处理的数据量判断是否增加可用连接数的判定过程的频率也可以通过设置进行更改,例如,每十秒进行一次判定或者每30秒进行一次判定。另一方面,计算第二连接数为平均每秒钟队列里的数据除以配置的每条连接处理数量,当第二连接数小于当前连接数量,并且大于配置的最小连接数N,从活动DB连接池中取一个空闲DB连接对象,断开连接,停止线程,将该DBG连接对象加入库存连接池。连接池功能可以控制应用程序访问mysql的连接数,可以提升mySQL请求性能。例如,在读写分离中间件为proxysql的情况下,按照现有proxysql配置,在新服务器上启动新proxysql服务,然后加载到DBS即可实现proxysql服务的扩容;。按照扩容proxysql服务方法新增一个proxysql服务,然后从DBS下线老proxysql,等到该proxysql请求结束后,停止该proxysql服务,即可实现proxysql服务迁移。
在本实施例中,通过设置数据库***作为应用服务和读写分离中间件之间的连接的管理工具,提供负载均衡、自动上下线,连接池功能,此外,DBS集群维护成本比较低,成熟稳定,支持大规模后端服务。
在其中一些实施例中,在分库分表中间件为sharding-jdbc的情况下,sharding-jdbc接收数据处理指令,根据数据处理指令中预设的关键词以及分库分表策略,从数据库***中获取分片连接,完成读写操作。在本实施例中,选取sharding-jdbc作为分库分表中间件,应用服务需要引入sharding-jdbc jar包,同时按照mysql分库分表策略设置sharding-jdbc配置文件,在接收到数据处理指令的情况下,根据该数据的预设的关键词,例如user ID或者该数据的关键字段。Sharding-jdbc支持跨服务器、跨实例和跨库表,适合大规模数据存储,可以实现轻量级mysql分库分表,使用简单稳定且维护成本低。
在其中一些实施例中,读写分离中间件为proxysql:
一方面,在数据库***中挂载多个proxysql服务,根据数据库***的启动连接指令上线proxysql服务,或者根据数据库***的断开连接指令下线proxysql服务;
另一方面,Proxysql作为中间件,主要功能是支持mysql读写分离,支持一主一从和一主多从。在proxysql配置文件中,主库地址为mySQL主库地址,从库地址填写所有mySQL从库和主库地址,可以通过权重设置分流查询请求,保证查询请求不受影响。而且,proxysql支持在线扩容从库和迁移从库,不影响应用服务读写请求。为了避免proxysql单点问题,至少需要部署两个proxysql服务,分别部署在不同的服务器上,同时把proxysqlIP地址和端口加入到DBS配置中,用于负载均衡,多个proxysql平均分担流量。
在从库扩容指令被触发的情况下,在新服务器上,按照业务要求部署新从库,然后登陆proxysqsl管理端口,添加mysql_servers记录,然后执行如下命令:
load mysql servers to runtime
save mysql servers to disk
在从库迁移指令被触发的情况下,首先在新服务器上启动新proxysql服务,并将新proxysql服务加载至数据库***,再删除mysql_servers表中老从库的记录,执行:
load mysql servers to runtime
save mysql servers to disk
从数据库***下线旧proxysql服务,在针对旧proxysql服务的数据交互请求结束后,下线旧proxysql服务。
在本实施例中,采用proxysql作为读写分离中间件,几乎所有的配置均可在线更改而无需重启,且proxysql支持连接池功能,能够更加高效地通过在DBS后端挂载多个proxysql服务,利用连接池功能实现负载均衡,分担流量请求,而且可以自动下线故障proxysql以及上线从故障中恢复的proxysql,也可以基于DBS进行proxysql迁移,不影响读写请求,更好地实现实现高性能访问mysql;同时,proxysql的自动重连和重新执行机制还能更好地实现平滑的扩容和迁移。
在其中一些实施例中,在读写操作过程中,在检测到mySQL主库发生故障的情况下,主库高可用中间件触发选举以及迁移新mySQL主库包括:在mySQL主库和mySQL从库上部署MHA node,启动MHA监控服务,MHA监控服务用于监控mySQL主库可用性,在检测到mySQL主库发生故障的情况下,触发选举以及迁移新mySQL主库。在本实施例中,采用MHA实现mySQL的高可用,可选地,Mysql版本使用mysql 8.0,MHA版本使用0.58。在mysql主库和所有从库服务器上部署MHAnode软件包,图2是根据本发明一个实施例中MHA架构的示意图,如图2所示,在MHA监控服务所在服务器上部署MHA manager软件包。安装MHA manager软件包会生成管理工具,用于MHA切换mysql主库。在MHA配置文件中,需要配置mysql主库和所有从库的信息,包括IP地址和端口,以及mysql文件路径信息等,同时切换脚本(master_ip_failover和master_ip_online_change)配置VIP和mysql文件路径等信息。执行masterha_check_repl--conf=app1.cnf可以生效VIP,然后启动MHA监控服务,用于监控mysql主库是否可用,如果mysql主库发生故障,MHA自动触发切换,选举新主库,恢复其他从库。
MHA支持一主一从和一主多从,可以满足多种需求。使用该方案,可以轻松实现mysql主库迁移。一方面,mysql主库故障自动切换,配置mysql主库和所有从库的IP地址、端口、部署路径、VIP和网卡标识,然后启动MHA监控服务。当MHA监控服务检测到mysql主库不可用,触发故障切换,调用master_ip_failover脚本,选择新主库,并恢复mysql主从复制,切换时间可以自行控制,一般在分钟级别,从而实现mysql主库高可用。另一方面,可以通过MHA实现在线迁移mysql主库:停止MHA监控服务,配置mysql主库和所有从库信息,执行再显切换命令,可以在秒级完成,不会引起数据丢失。
此外,在联合启用MHA和proxysql的情况下,在proxysql配置文件中,主库地址采用MHA VIP地址,这样可以保障mysql主库高可用;从库地址填写所有从库和MHA VIP地址,可以通过权重设置分流查询请求,保证查询请求不受影响。
在本实施例中,通过MHA可以实现mysql一主多从或者一主一从高可用,支持mysql主库故障自动切换,同时也支持在线切换主库和故障手动切换。
下面通过优选实施例对本申请实施例进行描述和说明。
图3是根据本申请一个具体实施例中的mySQL数据分片处理方法的架构图,如图3所示,mySQL数据分片处理方法的架构包括sharding-jdbc配置的应用程序32、DBS集群34、proxysql集群36以及mysql MHA主从复制集群38:
应用程序根据mysql分库分表策略,进行sharding-jdbc配置,需要配置分表策略,以及访问地址,上述访问地址包括DBS IP地址和端口。
DBS集群提供稳定的“代理”服务,支持后端proxysql服务的负载均衡、自动上下线,以及连接池功能,从而实现高性能高可用服务。DBS后端配置多个proxysqsl服务的IP地址和端口
每个proxysql服务需要配置mysql的主库和从库信息,包括主库VIP、从库IP地址以及端口,以及mysql连接设置、读写分离规则。说明:为了提升读写请求可用性,读规则配置所有从库IP地址和端口,以及主库VIP和端口,从库的权重设置大一些,主库VIP权重设置小一些;写请求规则中,配置主库VIP和端口,这样,主库发生切换或者所有从库不可用时候,不影响读写请求。
最底层是mysql MHA主从复制集群,可以是一套mysql主从集群,也可以是多个mysql主从集群,每个mysql主从集群,都有对应的主库VIP。
通过上述方案,采用成熟稳定的技术,提供高可用,读写分离和分库分表,负载均衡,自动上下线功能,比较适合应用在大规模生产环境。
应该理解的是,虽然上述的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本实施例还提供了一种mySQL数据分片处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本发明一个实施例的mySQL数据分片处理装置的结构框图,如图4所示,该装置包括:分库分表模块42、负载均衡模块44、读写模块46以及高可用模块48;
分库分表模块42用于在进行读写操作时,根据分库分表策略获取分片连接,其中,分片连接由数据库***提供,分片连接指示用于数据的读写分离中间件;
负载均衡模块44用于数据库***根据读写操作的数据量改变数据库***中的可用连接数,其中,连接数量是同一时间所提供的分片连接的数量;
读写模块46用于通过分片连接将数据通过读写分离中间件写入mySQL主库,或者通过读写分离中间件从mySQL从库中读取数据;在从库扩容指令被触发的情况系下,通过读写分离中间件进行mySQL从库扩容,在从库迁移指令被触发的情况下,通过读写分离中间件进行mySQL从库迁移;
高可用模块48用于在读写操作过程中,在检测到mySQL主库发生故障的情况下,主库高可用中间件触发选举以及迁移新mySQL主库。
在其中一些实施例中,负载均衡模块44还用于在在可用连接数小于预设的最大连接数,并且数据库***中的第一连接数大于可用连接数的情况下,增加可用连接数至预设的第一阈值,其中,第一连接数为数据库***中的待处理数据所需的连接数量;
在第二连接数小于可用连接数,并且,第二连接数大于预设的最小连接数的情况下,减少可用连接数至预设的第二阈值,其中,第二连接数为处理中数据所需的连接数量。
在其中一些实施例中,分库分表模块42中的分库分表中间件为sharding-jdbc,读写模块中46的读写分离中间件为proxysql,主库高可用中间件48为Master HighAvailability MHA。
需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。
本申请提供的mySQL数据分片处理装置,通过分库分表中间件结合数据库***实现了数据的灵活存、负载均衡和自动上下线,通过读写分离中间件解决了不支持读写分离以及不支持平滑扩容迁移的问题,通过主库高可用中间件解决不支持mySQL高可用的问题,实现了mySQL数据能够读写分离和mySQL高可用、支持负载均衡和自动上下线、支持无缝扩容迁的移分片处理。
在一个实施例中,图5是根据本发明一个实施例中计算机设备的示意图,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储mySQL数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种mySQL数据分片处理方法。
本申请提供的mySQL数据分片处理的计算机设备,通过分库分表中间件结合数据库***实现了数据的灵活存、负载均衡和自动上下线,通过读写分离中间件解决了不支持读写分离以及不支持平滑扩容迁移的问题,通过主库高可用中间件解决不支持mySQL高可用的问题,实现了mySQL数据能够读写分离和mySQL高可用、支持负载均衡和自动上下线、支持无缝扩容迁的移分片处理。
另外,结合上述实施例中的mySQL数据分片处理方法,本申请实施例可提供一种计算机可读存储介质来实现。该计算机可读存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种mySQL数据分片处理方法。
本申请提供的mySQL数据分片处理的计算机设备,通过分库分表中间件结合数据库***实现了数据的灵活存、负载均衡和自动上下线,通过读写分离中间件解决了不支持读写分离以及不支持平滑扩容迁移的问题,通过主库高可用中间件解决不支持mySQL高可用的问题,实现了mySQL数据能够读写分离和mysql高可用、支持负载均衡和自动上下线、支持无缝扩容迁的移分片处理。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种mySQL数据分片处理方法,其特征在于,所述方法包括:
在进行读写操作时,根据分库分表策略获取分片连接,并通过所述分片连接将数据通过读写分离中间件写入mySQL主库,或者通过读写分离中间件从mySQL从库中读取数据,其中,所述分库分表策略配置于分库分表中间件中,所述分片连接由数据库***提供,所述分片连接指示用于所述数据的读写分离中间件;
所述数据库***根据所述读写操作的数据量改变所述数据库***中的可用连接数,其中,所述可用连接数量是同一时间所提供的所述分片连接的数量;
在从库扩容指令被触发的情况系下,通过所述读写分离中间件进行mySQL从库扩容,在从库迁移指令被触发的情况下,通过所述读写分离中间件进行mySQL从库迁移;
在所述读写操作过程中,在检测到所述mySQL主库发生故障的情况下,主库高可用中间件触发选举以及迁移新mySQL主库。
2.根据权利要求1所述的mySQL数据分片处理方法,其特征在于,所述数据库***根据所述读操作以及所述写操作的数据量改变所述数据库***中的可用连接数包括:
在所述可用连接数小于预设的最大连接数,并且所述数据库***中的第一连接数大于所述可用连接数的情况下,增加所述可用连接数至预设的第一阈值,其中,所述第一连接数为所述数据库***中的待处理数据所需的连接数量;
在第二连接数小于所述可用连接数,并且,所述第二连接数大于预设的最小连接数的情况下,减少所述可用连接数至预设的第二阈值,其中,所述第二连接数为处理中数据所需的连接数量。
3.根据权利要求1所述的mySQL数据分片处理方法,其特征在于,在所述分库分表中间件为sharding-jdbc的情况下,所述sharding-jdbc接收数据处理指令,根据所述数据处理指令中预设的关键词以及所述分库分表策略,从所述数据库***中获取分片连接,完成所述读写操作。
4.根据权利要求1所述mySQL数据分片处理方法,其特征在于,在所述读写分离中间件为proxysql的情况下,
在所述数据库***中挂载多个proxysql服务,根据所述数据库***的启动连接指令上线proxysql服务,或者根据所述数据库***的断开连接指令下线proxysql服务;
在所述从库扩容指令被触发的情况下,在新服务器上启动新proxysql服务,并将所述新proxysql服务加载至所述数据库***,在所述从库迁移指令被触发的情况下,在新服务器上启动新proxysql服务,并将所述新proxysql服务加载至所述数据库***,并从所述数据库***下线旧proxysql服务,在针对所述旧proxysql服务的数据交互请求结束后,下线所述旧proxysql服务。
5.根据权利要求1所述的mySQL数据分片处理方法,其特征在于,所述在所述读写操作过程中,在检测到所述mySQL主库发生故障的情况下,主库高可用中间件触发选举以及迁移新mySQL主库包括:
在所述mySQL主库和所述mySQL从库上部署MHA node,启动MHA监控服务,所述MHA监控服务用于监控所述mySQL主库可用性,在检测到所述mySQL主库发生故障的情况下,触发选举以及迁移新mySQL主库。
6.一种mySQL数据分片处理装置,其特征在于,所述装置包括:分库分表模块、负载均衡模块、读写模块以及高可用模块;
所述分库分表模块用于在进行读写操作时,根据分库分表策略获取分片连接,其中,所述分片连接由数据库***提供,所述分片连接指示用于所述数据的读写分离中间件;
所述负载均衡模块用于所述数据库***根据所述读写操作的数据量改变所述数据库***中的可用连接数,其中,所述连接数量是同一时间所提供的所述分片连接的数量;
所述读写模块用于通过所述分片连接将数据通过读写分离中间件写入mySQL主库,或者通过读写分离中间件从mySQL从库中读取数据;在从库扩容指令被触发的情况系下,通过所述读写分离中间件进行mySQL从库扩容,在从库迁移指令被触发的情况下,通过所述读写分离中间件进行mySQL从库迁移;
所述高可用模块用于在所述读写操作过程中,在检测到所述mySQL主库发生故障的情况下,主库高可用中间件触发选举以及迁移新mySQL主库。
7.根据权利要求6所述的mySQL数据分片处理装置,其特征在于,所述负载均衡模块还用于在在所述可用连接数小于预设的最大连接数,并且所述数据库***中的第一连接数大于所述可用连接数的情况下,增加所述可用连接数至预设的第一阈值,其中,所述第一连接数为所述数据库***中的待处理数据所需的连接数量;
在所述第二连接数小于所述可用连接数,并且,所述第二连接数大于预设的最小连接数的情况下,减少所述可用连接数至预设的第二阈值,其中,所述第二连接数为处理中数据所需的连接数量。
8.根据权利要求6所述的mySQL数据分片处理装置,其特征在于,所述分库分表模块中的分库分表中间件为sharding-jdbc,所述读写模块中的读写分离中间件为proxysql,所述主库高可用中间件为Master High Availability MHA。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的mySQL数据分片处理方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5中任一项所述的mySQL数据分片处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216069.3A CN111400285B (zh) | 2020-03-25 | 2020-03-25 | mySQL数据分片处理方法、装置、计算机设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216069.3A CN111400285B (zh) | 2020-03-25 | 2020-03-25 | mySQL数据分片处理方法、装置、计算机设备和可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400285A true CN111400285A (zh) | 2020-07-10 |
CN111400285B CN111400285B (zh) | 2023-06-20 |
Family
ID=71434548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010216069.3A Active CN111400285B (zh) | 2020-03-25 | 2020-03-25 | mySQL数据分片处理方法、装置、计算机设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400285B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112364104A (zh) * | 2021-01-13 | 2021-02-12 | 上海爱可生信息技术股份有限公司 | 分布式数据库扩容方法、分布式数据库***及计算机可读存储介质 |
CN112486718A (zh) * | 2020-11-30 | 2021-03-12 | 深圳市移卡科技有限公司 | 数据库故障自动切换方法、装置和计算机存储介质 |
CN113535430A (zh) * | 2021-07-16 | 2021-10-22 | 深圳华锐金融技术股份有限公司 | 应用数据读写分离方法、装置、计算机设备和存储介质 |
CN117453648A (zh) * | 2023-10-08 | 2024-01-26 | 广州新赫信息科技有限公司 | 基于可信链高性能关系型数据库构建方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20130101349A (ko) * | 2012-03-05 | 2013-09-13 | 네이버비즈니스플랫폼 주식회사 | 데이터베이스 미들웨어를 이용한 데이터 관리 시스템 및 방법 |
CN108984569A (zh) * | 2017-06-05 | 2018-12-11 | 中兴通讯股份有限公司 | 数据库切换方法、***和计算机可读存储介质 |
CN109344157A (zh) * | 2018-09-20 | 2019-02-15 | 深圳市牛鼎丰科技有限公司 | 读写分离方法、装置、计算机设备及存储介质 |
CN110019444A (zh) * | 2017-09-08 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 一种操作请求处理方法、装置、设备及*** |
CN110837506A (zh) * | 2019-11-07 | 2020-02-25 | 中电福富信息科技有限公司 | 一种基于Mycat的数据分片及读写分离方法及*** |
-
2020
- 2020-03-25 CN CN202010216069.3A patent/CN111400285B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20130101349A (ko) * | 2012-03-05 | 2013-09-13 | 네이버비즈니스플랫폼 주식회사 | 데이터베이스 미들웨어를 이용한 데이터 관리 시스템 및 방법 |
CN108984569A (zh) * | 2017-06-05 | 2018-12-11 | 中兴通讯股份有限公司 | 数据库切换方法、***和计算机可读存储介质 |
CN110019444A (zh) * | 2017-09-08 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 一种操作请求处理方法、装置、设备及*** |
CN109344157A (zh) * | 2018-09-20 | 2019-02-15 | 深圳市牛鼎丰科技有限公司 | 读写分离方法、装置、计算机设备及存储介质 |
CN110837506A (zh) * | 2019-11-07 | 2020-02-25 | 中电福富信息科技有限公司 | 一种基于Mycat的数据分片及读写分离方法及*** |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112486718A (zh) * | 2020-11-30 | 2021-03-12 | 深圳市移卡科技有限公司 | 数据库故障自动切换方法、装置和计算机存储介质 |
CN112364104A (zh) * | 2021-01-13 | 2021-02-12 | 上海爱可生信息技术股份有限公司 | 分布式数据库扩容方法、分布式数据库***及计算机可读存储介质 |
CN113535430A (zh) * | 2021-07-16 | 2021-10-22 | 深圳华锐金融技术股份有限公司 | 应用数据读写分离方法、装置、计算机设备和存储介质 |
CN117453648A (zh) * | 2023-10-08 | 2024-01-26 | 广州新赫信息科技有限公司 | 基于可信链高性能关系型数据库构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111400285B (zh) | 2023-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109729129B (zh) | 存储集群***的配置修改方法、存储集群及计算机*** | |
CN110224871B (zh) | 一种Redis集群的高可用方法及装置 | |
US7058731B2 (en) | Failover and data migration using data replication | |
US8688773B2 (en) | System and method for dynamically enabling an application for business continuity | |
JP2019219954A (ja) | クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム | |
US11106556B2 (en) | Data service failover in shared storage clusters | |
US7424547B2 (en) | File sharing device and inter-file sharing device data migration method | |
US8875134B1 (en) | Active/active storage and virtual machine mobility over asynchronous distances | |
US20230308507A1 (en) | Commissioning and decommissioning metadata nodes in a running distributed data storage system | |
CN103618627B (zh) | 一种管理虚拟机的方法、装置及*** | |
CN109842651B (zh) | 一种业务不间断的负载均衡方法和*** | |
US9454417B1 (en) | Increased distance of virtual machine mobility over asynchronous distances | |
CN111400285A (zh) | mySQL数据分片处理方法、装置、计算机设备和可读存储介质 | |
US20040243650A1 (en) | Shared nothing virtual cluster | |
US8726083B1 (en) | Synchronized taking of snapshot memory images of virtual machines and storage snapshots | |
CN113010496B (zh) | 一种数据迁移方法、装置、设备和存储介质 | |
CN109446169B (zh) | 一种双控磁盘阵列共享文件*** | |
CN113268472B (zh) | 一种分布式数据存储***及方法 | |
CN105740049B (zh) | 一种控制方法及装置 | |
WO2018171728A1 (zh) | 服务器、存储***及相关方法 | |
US20040210888A1 (en) | Upgrading software on blade servers | |
US20200387575A1 (en) | Migrating virtual machines using asynchronous transfer and synchronous acceleration | |
CN105323271B (zh) | 一种云计算***以及云计算***的处理方法和装置 | |
US9805049B1 (en) | Migrating applications over asynchronous distances using semi-synchronous acceleration | |
US10884881B2 (en) | Scale-out storage system and configuration information control method for implementing high-availability, high-speed failover |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |