X-Pipe - Redis 多数据中心复制管理系统


Apache
跨平台
Java

软件简介

X-Pipe 是由携程框架部门研发的 Redis 多数据中心复制管理系统。。基于 Redis 的 Master-Slave 复制协议,实现低延时、高可用的
Redis 多数据中心复制,并且提供一键机房切换,复制监控、异常报警等功能。

XPipe 解决什么问题

Redis 在携程内部得到了广泛的使用,根据客户端数据统计,整个携程全部 Redis 的读写请求在每秒 200W,其中写请求约 10W,很多业务甚至会将
Redis 当成内存数据库使用。这样,就对 Redis 多数据中心提出了很大的需求,一是为了提升可用性,解决数据中心 DR(Disaster
Recovery) 问题,二是提升访问性能,每个数据中心可以读取当前数据中心的数据,无需跨机房读数据,在这样的需求下,XPipe 应运而生 。

为了方便描述,后面用 DC 代表数据中心 (Data Center)。

整体架构

  • Console 用来管理多机房的元信息数据,同时提供用户界面,供用户进行配置和 DR 切换等操作。

  • Keeper 负责缓存 Redis 操作日志,并对跨机房传输进行压缩、加密等处理。

  • Meta Server 管理单机房内的所有 keeper 状态,并对异常状态进行纠正。

Redis 数据复制问题

多数据中心首先要解决的是数据复制问题,即数据如何从一个 DC 传输到另外一个 DC。我们决定采用伪 slave 的方案,即实现 Redis 协议,伪装成为
Redis slave,让 Redis master 推送数据至伪 slave。这个伪 slave,我们把它称为 keeper,如下图所示:

有了 keeper 之后,多数据中心之间的数据传输,可以通过 keeper 进行。keeper 将 Redis
日志数据缓存到磁盘,这样,可以缓存大量的日志数据(Redis 将数据缓存到内存 ring
buffer,容量有限),当数据中心之间的网络出现较长时间异常时仍然可以续传日志数据。

Redis 协议不可更改,而 keeper
之间的数据传输协议却可以自定义。这样就可以进行压缩,以提升系统性能,节约传输成本;多个机房之间的数据传输往往需要通过公网进行,这样数据的安全性变得极为重要,keeper
之间的数据传输也可以加密,提升安全性。