一种基于远程直接内存访问的数据库高可用的方法、系统与流程

文档序号:27970075发布日期:2021-12-13 00:13阅读:170来源:国知局
一种基于远程直接内存访问的数据库高可用的方法、系统与流程

1.本发明涉及数据库访问技术领域,具体涉及一种基于远程直接内存访问的数据库高可用的方法、系统。


背景技术:

2.为了保证业务系统或元数据库的软件的连续稳定运行和健壮性,在基于流复制的高可用框架中往往需要将元数据库系统设计为高可用方案。
3.例如,postgresql是一个功能强大的开源对象关系型数据库系统,它使用和扩展了sql语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。它是目前功能最强大、特性最丰富和结构最复杂的开源数据库,其中有些特性甚至连商业数据库都不具备。基于此,postgresql可以被用来安全地存储数据,在处理请求时检索数据,并且它还是跨平台的,可以在日常的大部分操作系统运行,支撑企业中大型业务系统。同时由于其开源特性和对众多高级开发语言提供原生的编程接口,在很多开源及商业软件中,都将其作为元数据库的一个重要选型。
4.postgrepsql在数据目录的子目录pg_xlog中维护了一个wal日志文件,可以把wal日志备份到另外一台备份服务器,通过重做wal日志的方式在备服务器上恢复数据。而目前wal日志传送到备份服务器主要通过其自身提供的流复制方式。对于大型的业务系统而言,产生和需要处理的数据量可能会很庞大,相应的,产生的wal日志也会迅速增长,这给数据库高可用带来了很大挑战。为实现postgresql高可用,主库也需要经过缓存,将事务的变更记录到wal日志文件中,这些文件会占据主库的大量存储空间;而在与备库进行数据复制的时候,需要将wal日志文件再度从磁盘读入缓存进行传输,这样在流程上通过了两次缓存,额外增加了内存开销。
5.传统的tcp/ip通信方式,主库节点主机需要将wal日志文件通过用户空间、内核空间,藉由网卡发送到备库节点主机,然后由备库节点主机以相反的方式将其存入用户空间,并最终持久化到磁盘。这个过程数据在不同空间中要经过多次复制。通过系统内核发送消息,存在很高的数据移动和数据复制的开销,会导致很低的性能和灵活性,降低流复制进程效率,占用大量的内存带宽和cpu开销,导致数据库响应变慢,甚至使得业务系统受到影响。


技术实现要素:

6.针对数据在不同空间中要经过多次复制,通过系统内核发送消息,存在很高的数据移动和数据复制的开销,会导致很低的性能和灵活性,降低流复制进程效率,占用大量的内存带宽和cpu开销,导致数据库响应变慢,甚至使得业务系统受到影响的问题,本发明提供一种基于远程直接内存访问的数据库高可用的方法、系统,以解决上述技术问题。
7.本发明的技术方案是:
8.一方面,本发明技术方案提供一种基于远程直接内存访问的数据库高可用的方法,数据库包括一个主库和若干个备库,所述方法包括如下步骤:
9.在数据库的发送模块、接收模块设置基于rdma协议的rdma接口;
10.接收到用户提交的操作时,将产生的预写日志数据插入到主库缓存,并对主库缓存采用缓存淘汰算法进行管理;
11.接收到用户提交的操作之后,调用主库发送模块的rdma接口,将主库缓存中新插入的预写日志数据通过roce网卡发送到与主库通信的备库;
12.备库的接收模块接收预写日志数据存入本数据库缓存,将预写日志数据进行数据持久化,同时调用本数据库发送模块的rdma接口,将本数据库缓存中的预写日志数据通过roce网卡发送到连接的备库进行级联复制;
13.当主库发生故障时,选择一个备库设置为新的主库,将发生故障的主库的业务系统切换到新的主库;
14.其中,roce网卡为支持roce协议的网卡。
15.主库中取消原有的预写日志数据持久化,转而将主库缓存中的数据直接发送到备库缓存,在数据库的主库和备库都替换或增加支持roce的网卡,创建支持rdma的网络传输通道,向备库缓存发送和接收数据,数据传送绕过系统内核区,访问远程交换机或服务器的内存,无需消耗远程服务器上的cpu周期,从而可以充分利用可用带宽和更高的可伸缩性。由于roce改善了延迟和吞吐量,网络性能得到了很大提高。
16.优选地,调用发送模块的rdma接口,将缓存中的预写日志数据通过roce网卡发送到备库的步骤包括:
17.调用发送模块的rdma接口获取本数据库缓存中的数据,通过本数据库节点主机的roce网卡与连接的备库节点主机的roce网卡通信,将数据传输到备库的接收模块;
18.调用接收模块的rdma接口将接收到的预写日志数据存入本数据库缓存中。
19.能够消除主库节点上,外部存储器复制和上下文切换的开销,因而能解放内存带宽和cpu周期用于改进应用系统性能,从而最终保障主库业务系统的持续高效运转。
20.优选地,主库接收用户提交的操作的步骤包括:
21.主库接收用户提交的操作时,将产生的变更内容,即预写日志数据插入到主库的预写日志缓存;
22.接收用户提交的操作后,将操作变更后的数据存入主库的数据缓存。
23.优选地,将产生的预写日志数据插入到主库缓存,并对主库缓存采用缓存淘汰算法进行管理的步骤包括:
24.将新产生未访问过的预写日志数据插入到主库缓存的fifo队列;
25.判断在设定的第一时间范围内预写日志数据在fifo队列中是否被访问;
26.若否,则在fifo队列总量达到设定总容量的第一百分比时,将插入时间最早的第二百分比的预写日志数据进行淘汰;
27.若是,则将预写日志数据移到lru队列头部;
28.设定时间间隔后,判断预写日志数据在lru队列是否被访问;若是,则将该预写日志数据移到lru队列头部;
29.在lru队列中,判断缓存容量是否超出缓存总容量的第一百分比;若是,则将lru队列尾部最少访问的第二百分比的预写日志数据进行淘汰。保持缓存不间断运作。提高缓存数据的可靠性与安全性。
30.优选地,该方法还包括:
31.当发生故障的数据库故障修复后,将修复后的数据库作为备库接入系统。维持数据库高可用。
32.优选地,备库数量为两个,分别第一备库和第二备库;
33.数据流复制过程包括:
34.接收到用户提交的操作时,将数据变更的预写日志记录存入主库预写日志缓存;
35.用户操作完成后,将变更后的数据存入主库的数据缓存,同时调用主库发送模块的rdma接口获取主库预写日志缓存中的数据,通过主库节点主机的roce网卡与第一备库节点主机的roce网卡通信,将获取的数据传输到第一备库的接收模块;
36.调用第一备库接收模块的rdma接口将接收到的数据存入第一备库预写日志缓存中;
37.将第一备库预写日志缓存中的数据写入第一备库节点主机的磁盘进行数据持久化,同时调用第一备库发送模块的rdma接口获取第一备库预写日志缓存中的数据,通过第一备库节点主机的roce网卡与第二备库节点主机的roce网卡通信,将获取的数据传输到第二备库的接收模块;
38.调用第二备库接收模块的rdma接口将接收到的数据存入第二备库预写日志缓存中;
39.将第二备库预写日志缓存中的数据写入第二备库节点主机的磁盘进行数据持久化;
40.周期性将主库数据缓存中的数据刷新到主库节点主机的磁盘。
41.另一方面,本发明技术方案还提供一种基于远程直接内存访问的数据库高可用的系统,包括若干节点,每个节点设置一个数据库;
42.每个节点主机安装有roce网卡和磁盘;
43.节点依次通过roce网卡串联通信连接;
44.串联链路上第一个节点数据库设置有发送模块,串联链路上最后一个节点数据库设置有接收模块,串联链路上剩余其他节点数据库均设置有发送模块和接收模块;
45.发送模块和接收模块均设置有基于rdma协议的rdma接口;
46.每个数据库均设置有缓存;
47.该系统还包括调用模块、缓存管理模块、持久化模块;
48.调用模块,用于调用数据库接收模块的rdma接口将预写日志数据存入接收模块所在数据库的预写日志缓存;还用于调用数据库发送模块的rdma接口,将发送模块所在数据库的缓存中的预写日志数据通过roce网卡发送到下一个数据库的缓存中;
49.缓存管理模块,用于对数据库缓存进行数据淘汰管理;
50.持久化模块,用于将除第一个节点外的其他节点数据库缓存中的数据写入数据库所在节点主机的磁盘进行数据持久化。
51.优选地,串联链路上除第一个节点和最后一个节点外,其他节点的主机安装两个roce网卡;其中,一个roce网卡与串联链路上前一个节点的主机的roce网卡构成输出传输通道,另一个roce网卡与串联链路上后一个节点的主机的roce网卡构成数据传输通道。
52.缓存管理模块,具体用于将新产生未访问过的数据插入到数据库缓存的fifo队
列;判断在设定的第一时间范围内数据在fifo队列中是否被访问;若否,则在队列总量达到设定总容量的第一百分比时,将插入时间最早的第二百分比的数据进行淘汰;若是,则将数据移到lru队列头部;设定时间间隔后,判断数据在lru队列是否被访问;若是,则将该数据移到lru队列头部;在lru队列中,判断缓存数据容量是否超出缓存总容量的第一百分比;若是,则将lru队列尾部最少访问的第二百分比的数据进行淘汰。
53.数据在缓存中通过下述方法进行处理:
54.将新产生未访问过的数据插入到数据库缓存的fifo队列;判断在设定的第一时间范围内数据在fifo队列中是否被访问;若否,则在队列总量达到设定总容量的第一百分比时,将插入时间最早的第二百分比的数据进行淘汰;若是,则将数据移到lru队列头部;设定时间间隔后,判断数据在lru队列是否被访问;若是,则将该数据移到lru队列头部;在lru队列中,判断缓存数据容量是否超出缓存总容量的第一百分比;若是,则将lru队列尾部最少访问的第二百分比的数据进行淘汰。保持缓存不间断运作。提高缓存数据的可靠性与安全性。
55.从以上技术方案可以看出,本发明具有以下优点:使用远程直接访问(rmda)技术实现数据库系统流复制方式高可用,减少数据移动和复制的开销,避免数据通过内核进行复制,释放cpu去执行其应做的工作,提高带宽并降低延迟、抖动和cpu消耗,加快主备库之间wal日志文件复制速度,在确保主库稳定提供业务的同时,提升数据库高可用的可靠性。
56.此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
57.由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
58.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
59.图1是本发明一个实施例的方法的示意性流程图。
60.图2是本发明一个实施例的系统的架构图。
具体实施方式
61.为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
62.postgresql:一种特性非常齐全的自由软件的对象

关系型数据库管理系统。
63.rdma:remote direct memory access技术全称远程直接数据存取,就是为了解决网络传输中服务器端数据处理的延迟而产生的。
64.roce:rdma over converged ethernet是一种允许通过以太网使用远程直接内存访问(rdma)的网络协议。
65.fifo:first input first output的缩写,先入先出队列。
66.lru:least recently used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。
67.2q:two queues。2q算法有两个缓存队列,一个是fifo队列,一个是lru队列。当数据第一次访问时,2q算法将数据缓存在fifo队列里面,当数据第二次被访问时,则将数据从fifo队列移到lru队列里面,两个队列各自按照自己的方法淘汰数据。
68.wal即write

ahead logging,预写日志(wal)是保证数据完整性的一种标准方法。
69.如图1所示,本发明实施例提供一种基于远程直接内存访问的数据库高可用的方法,数据库的数量为若干个;所述方法包括如下步骤:
70.步骤1:在数据库的发送模块、接收模块设置基于rdma协议的rdma接口;
71.步骤2:接收到用户提交的操作时,将产生的预写日志数据插入到主库缓存,并对主库缓存采用缓存淘汰算法进行管理;
72.步骤3:备库的接收模块接收预写日志数据存入本数据库缓存,将预写日志数据进行数据持久化,同时调用本数据库发送模块的rdma接口,将本数据库缓存中的预写日志数据通过roce网卡发送到连接的备库进行级联复制;
73.步骤4:当主库发生故障时,选择一个备库设置为新的主库,将发生故障的主库的业务系统切换到新的主库;
74.其中,roce网卡为支持roce协议的网卡。
75.需要说明的是,主库中取消原有的预写日志数据持久化,转而将主库缓存中的数据直接发送到备库缓存,在数据库的主库和备库都替换或增加支持roce的网卡,创建支持rdma的网络传输通道,向备库缓存发送和接收数据,数据传送绕过系统内核区,访问远程交换机或服务器的内存,无需消耗远程服务器上的cpu周期,从而可以充分利用可用带宽和更高的可伸缩性。由于roce改善了延迟和吞吐量,网络性能得到了很大提高。
76.在有些实施例中,调用发送模块的rdma接口,将缓存中的预写日志数据通过roce网卡发送到备库的步骤包括:
77.调用发送模块的rdma接口获取本数据库缓存中的数据,通过本数据库节点主机的roce网卡与连接的备库节点主机的roce网卡通信,将数据传输到备库的接收模块;
78.调用接收模块的rdma接口将接收到的预写日志数据存入本数据库缓存中。
79.能够消除主库节点上,外部存储器复制和上下文切换的开销,因而能解放内存带宽和cpu周期用于改进应用系统性能,从而最终保障主库业务系统的持续高效运转。
80.需要说明的是,主库接收用户提交的操作的步骤包括:
81.主库接收用户提交的操作时,将产生的变更内容,即预写日志数据插入到主库的预写日志缓存;
82.接收用户提交的操作后,将操作变更后的数据存入主库的数据缓存。
83.另外,进一步需要说明的是,将产生的预写日志数据插入到主库缓存,并对主库缓存采用缓存淘汰算法进行管理的步骤包括:
84.将新产生未访问过的预写日志数据插入到主库缓存的fifo队列;
85.判断在设定的第一时间范围内预写日志数据在fifo队列中是否被访问;
86.若否,则在fifo队列总量达到设定总容量的第一百分比时,将插入时间最早的第
二百分比的预写日志数据进行淘汰;
87.若是,则将预写日志数据移到lru队列头部;
88.设定时间间隔后,判断预写日志数据在lru队列是否被访问;若是,则将该预写日志数据移到lru队列头部;
89.在lru队列中,判断缓存容量是否超出缓存总容量的第一百分比;若是,则将lru队列尾部最少访问的第二百分比的预写日志数据进行淘汰。保持缓存不间断运作。提高缓存数据的可靠性与安全性。
90.在有些实施例中,该方法还包括:
91.周期性将主库数据缓存中的数据刷新到磁盘。
92.由于在主库取消了预写日志落盘的操作,能够减少主库所在主机的进程数量、内存占用和数据复制开销,并且通过将预写日志文件存储在备库,大幅度增加主库所能容纳的业务数据量。
93.备库数量为两个,分别第一备库和第二备库;
94.数据流复制过程包括:
95.步骤2

1:接收到用户提交的操作时,将数据变更的预写日志记录存入主库预写日志缓存;
96.步骤2

2:用户操作完成后,将变更后的数据存入主库的数据缓存,同时调用主库发送模块的rdma接口获取主库预写日志缓存中的数据,通过主库节点主机的roce网卡与第一备库节点主机的roce网卡通信,将获取的数据传输到第一备库的接收模块;
97.步骤2

3:调用第一备库接收模块的rdma接口将接收到的数据存入第一备库预写日志缓存中;
98.步骤2

4:将第一备库预写日志缓存中的数据写入第一备库节点主机的磁盘进行数据持久化,同时调用第一备库发送模块的rdma接口获取第一备库预写日志缓存中的数据,通过第一备库节点主机的roce网卡与第二备库节点主机的roce网卡通信,将获取的数据传输到第二备库的接收模块;
99.步骤2

5:调用第二备库接收模块的rdma接口将接收到的数据存入第二备库预写日志缓存中;
100.步骤2

6:将第二备库预写日志缓存中的数据写入第二备库节点主机的磁盘进行数据持久化;
101.步骤2

7:周期性将主库数据缓存中的数据刷新到主库节点主机的磁盘。
102.整个wal日志文件备份过程包含两个主要阶段:
103.1)wal日志生成
104.wal机制实际是在数据库中事务提交之后,刷新事务修改后的数据到磁盘的过程中加入了对应的写wal log的过程。
105.其中,在事务发生时:先将变更后日志记录存入wal buffer;再将更新后的数据存入data buffer。
106.在事务提交时:调用rdma接口将wal buffer传输到备库;
107.检查点发生时:将所有data buffer刷新到磁盘。
108.2)wal日志的传输
109.具体说明,在事务提交时:调用rdma接口将wal buffer传输到备库的过程:
110.采用一主两备的架构设计,其中主库不再保留wal日志文件,也取消为发送模块开辟额外的缓存,而是在用户提交操作之后,直接从wal buffer中获取修改之后的业务数据,由数据发送模块发送到备库wal buffer中。
111.事务数据产生修改之后,在wal buffer中生成缓存数据,不再将此数据持久化,因此缓存数据的可靠性与安全性需要得到保证,针对缓存中的数据设计改进的two queues(2q)缓存淘汰算法,创建两个缓存队列,一个是fifo队列,一个lru队列,实现细节如下:
112.(a)将新产生未访问过的wal日志数据插入到fifo队列;
113.(b)用户提交事务之后,将fifo队列中的新插入的数据传送备库,如果在接下来的一定时间范围内数据在fifo队列中一直没有再访问,则在队列总量达到设定总容量大小80%时,将插入时间最早的20%数据进行淘汰;
114.(c)如果数据在fifo队列中被再次访问,则将数据移到lru队列头部;
115.(d)一定时间后,如果历史数据在lru队列再次被访问,则将数据移到lru队列头部;
116.(e)在lru队列中,如果缓存数据容量超出缓存总容量80%,则将队列尾部最少访问的20%数据进行淘汰,空闲的20%缓存空间继续接纳自fifo队列中转移过来的数据,以保持缓存不间断运作。
117.主库日志发送进程调用rdma接口,开启流复制进程,将wal buffer中的数据,藉由roce网络传输通道,直接发送到备库wal buffer,此部分缓存采用与wal buffer同样的淘汰策略,然后经由walwriter进程持久化到wal文件中,并最终写入到数据文件,以供用户读取。
118.备库wal buffer在进行日志文件持久化的同时,开启流复制进程,将缓存中的日志数据以同样的rdma方式传送到第二个备库的wal buffer,以进行级联复制,进一步保证数据库高可用的可靠性。
119.如果主库发生故障停止运行,则将业务系统切换到其中的一个备库,可以是第一备库也可以是第二备库;若切换到第一备库的同时保持此备库对第二备库的流复制进程,维持数据库高可用。当第一备库成为主库之后,停止第一备库中将缓存数据持久化到磁盘的进程,即停止walreceiver、walwriter、startup等进程,在内存中开辟数据缓存data buffer写入更改的业务数据并最终持久化到磁盘,并将事务更改日志数据与预写日志缓存wal buffer对接,最终完成备库的全面切换。
120.原主库修复之后,作为第二备库接入,保持一主二备的架构。
121.本发明实施例还提供一种基于远程直接内存访问的数据库高可用的系统,包括若干节点,每个节点设置一个数据库;
122.每个节点主机安装有roce网卡和磁盘;
123.节点依次通过roce网卡串联通信连接;
124.串联链路上第一个节点数据库设置有发送模块,串联链路上最后一个节点数据库设置有接收模块,串联链路上剩余其他节点数据库均设置有发送模块和接收模块;
125.发送模块和接收模块均设置有基于rdma协议的rdma接口;
126.每个数据库均设置有缓存;
buffer中使用调整过的2q缓存淘汰算法,在数据库的主库和备库都替换或增加支持roce的网卡,创建支持rdma的网络传输通道。
139.尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1