X-pipe
携程开发的一款 redis 数据同步的工具。可以在数据中心一挂掉后通过控制台快速切换到数据中心二。 https://github.com/ctripcorp/x-pipe
一,创建
/bin/bash -c "$(curl -sSL https://raw.githubusercontent.com/ctripcorp/x-pipe/master/redis/dockerPackage/start-xpipe-container.sh)"
// 官方建议在一个新建的文件夹执行这条命令
// 执行前需要先安装 docker-compose
// 执行完成后,文件夹下会多出一个 docker-compose.yml 和一个关于 redis 配置的文件夹,并且会启动整套 x-pipe 的资源和八个 redis
二,布局
等待上述命令执行完成后,当前的部署图如下:
// 左上角是数据中心一,有四个 redis 形成了两个分片(一个分片就是一个主节点及其所有从节点)。
// 右下角是数据中心二,同样的四个 redis 形成了两个分片,跟数据中心一相对应。
// 中间则是 x-pipe 的组件,完成数据的同步。
x-pipe 同步数据是按分片对应同步的,如果在 0.10 里写入数据则会同步到 0.12/0.13,在 0.14 里写入的数据会同步到 0.16/0.17 。此时数据中心一里的 redis 是有主从关系,但数据中心二里面的 redis 全是作为 0.8(keeper)的从节点而存在(0.7 也是数据中心一里面主节点的 slave),当进行主机房迁移后,数据中心二里面的 redis 会进行选主操作,代替数据中心一。
三,控制台
// 登陆控制台:localhost:8079/#/cluster_dc_shards/cluster1
四,结束
$ docker-compose down
五,总结
官方的样例中所有 redis 节点都只是普通的主从节点,没有开启集群模式(cluster_enabled=0)。也就是说,redis 的角色是由 x-pipe 来控制的,如果想要通过 x-pipe 来同步两个 redis 集群是不可行的,因为数据中心二里面的 keeper 无法再作为第二个 redis 集群里所有节点的主节点来完成同步。
// 官方解答:x-pipe 不支持 redis 集群模式,x-pipe 只是针对单纯的 redis 进行数据同步,节点之间不能组成集群,且主从角色由 keeper 来管理。