RDMA日志传输

PolarDB MySQL版通过RDMA技术对日志传输模块进行了优化,推出了RDMA日志传输(RDMA-based log shipment技术方案。该方案通过RDMA来替代传统的基于共享存储或TCP的传输方式, 可以把日志传输吞吐量提升100%,并在此基础之上,把复制延迟降低50%以上本文主要介绍RDMA-based log shipment技术方案的原理、开启方式以及标准场景下的性能测试结果。

RDMA-based log shipment技术原理

PolarDB默认基于共享存储或TCP的传输方式进行日志同步。为了追求更快的日志同步速度,降低日志同步开销,PolarDB引入了RDMA-based log shipment技术。RDMA-based log shipment的技术原理如下:

  • 将RO节点的Redo log buffer当作是RW节点的Redo log buffer的远端镜像;

  • RW节点在log buffer写盘之前,将Redo log远端异步写到RO节点的log buffer,最后再将位点同步给RO节点;

  • RO节点通过读取本地的log buffer来替代读取共享存储中的Redo log file,加快复制同步效率。

相比于two-sided操作,RDMA-based log shipment技术使用的one-sided操作基于Read/Write Verbs,无需接收端CPU的参与。通过远程地址+密钥的方式,将日志直接写入到远端RO节点的内存中。

使用限制

  • 集群版本需为PolarDB MySQL版8.0.1版本且内核小版本需为8.0.1.1.33及以上。

  • 全球数据库网络GDN中的从集群不支持开启RDMA日志传输功能

使用方法

您可以通过loose_innodb_polar_log_rdma_transfer参数开启RDMA日志传输功能。

参数

级别

说明

loose_innodb_polar_log_rdma_transfer

Global

RDMA日志传输功能开关,取值范围:

  • ON:开启RDMA日志传输功能。

  • OFF(默认):关闭RDMA日志传输功能。

性能提升

降低复制延迟

在多种写入场景下,基于RDMA的日志传输功能都可以极大的降低RO节点的复制延迟。

32核128 GBPolarDB MySQL版8.0集群为例,测试数据量为20张表,单表200W数据,进行RO节点的复制延迟测试。分别对比开启和关闭RDMA日志传输功能,在不同Redo速率下,RO节点的复制延迟变化情况。

image..png

从上图可以看出,开启RDMA日志传输功能后,随着Redo写入速率的增加,RO节点的复制延迟将大大的降低。

提升PolarDB全局一致性读性能

PolarDB MySQL版开启全局一致性(高性能模式)后,RO节点的复制延迟对性能影响较大。通过RDMA-based log shipment技术可以有效的提升全局一致性读性能。

8核32 GBPolarDB MySQL版8.0集群为例,测试数据量为20张表,单表20W数据,进行RO节点的全局一致性读性能测试。分别对比开启和关闭RDMA日志传输功能,在不同的线程数下,RO节点的全局一致性读性能变化情况。

image..png

从上图可以看出,开启RDMA日志传输功能后,RO节点的全局一致性读性能提升了20%左右。