Oracle希望改进Linux的负载平衡和故障转移

Oracle认为Linux远程直接内存访问(RDMA)实现需要高可用性和负载平衡等功能,并希望通过在内核编程以实现这一目标。

正如Oracle Linux内核开发人员Sudhakar Dindukurti在本文中所解释的那样,问题在于性能和安全性考虑因素意味着RDMA适配器将硬件与“特定端口和路径”联系起来。

另一方面,标准网络接口卡可以选择使用哪个netdev(网络设备)来发送分组。故障转移和负载平衡是本机的。

Dindukurti的工作旨在将此功能引入InfiniBand和RoCE(RDMA over Converged Ethernet)NIC,并将其从Oracle的Unbreakable Enterprise Kernel(UEK)上游移至Linux源代码。

其弹性RDMA over IP(RDMAIP)创建高可用性连接,使用主动 - 主动绑定在适配器端口之间创建绑定组。如果端口丢失,则流量将移至组中的其他端口。这是使用Oracle的可靠数据报套接字(RDS)完成的,该套件自2009年以来一直在Linux内核中使用。

RDMA的通道绑定,看起来很容易。

将其扩展为Resilient RDMAIP涉及一个新进程,它允许系统发送数据包以删除节点,如Oracle的帖子详细说明:

  • “1)客户端应用程序使用RDMA适配器注册内存,RDMA适配器将已注册内存区域的R_Key返回给客户端。请注意,注册信息保存在RDMA适配器上;
  • “2)客户端将此”R_key“发送到远程服务器;
  • “3)服务器在向客户端请求RDMA_READ / RDMA_WRITE时包含此R_key”; 和
  • “4)客户端的RDMA适配器使用”R_key“查找内存区域并继续进行事务处理。由于“R_key”绑定到特定的RDMA适配器,因此不能使用相同的R_KEY通过另一个RDMA适配器发送数据。此外,由于RDMA应用程序可以直接与硬件通信,绕过内核,传统绑定(位于内核中) )不能提供HA。“

在负载平衡方案中,所有绑定组的接口都有自己的IP地址,而“使用者”(即应用程序或操作系统进程)决定了如何最好地选择要使用的接口。

故障转移更容易,因为RDMAIP发现接口断开。模块将故障接口的IP地址移动到组中的另一个IP地址,RDMA Communication Manager(RDMA CM)事件通知相关内核进程更改其使用的地址。

故障恢复的处理方式相同:RDMAIP模块将流量移回已恢复的地址,并发送另一个RDMA CM消息。

为了让这个Linux内核就绪,Dindukurti写道,Resilient RDMAIP模块需要与网络堆栈实现更紧密地耦合。这将允许RDMA内核使用者创建活动绑定组,并提供API以公开绑定组及其接口。

  • 发表于:
  • 原文链接:http://www.theregister.co.uk/2018/07/11/oracle_rdma_load_balancing_failover

扫码关注云+社区

领取腾讯云代金券