Codis 升级迁移方案

迁移 codis 节点,要保证数据不丢失。

思考

要将整个集群迁移就要连接,集群里有哪些数据?proxy 是怎么找到数据在哪个后端节点的?有必要迁移 zookeeper 数据吗?

集群数据

集群里面的数据是存储到 codis-server,这个是 redis-server 修改的,支持主从同步,因此,可以使用主从同步的方式迁移数据。

proxy 是怎么找到后端数据

codis-proxy 是根据 crc32 算法算出 key 的名称对应的 slot,slot 分组信息是存储到 zookeeper 里面,zookeper 里面可以找到对应的 slot 分组。

zookeeper 数据迁移

zookeeper 数据,其实必须要迁移,只要保持,slot 对应的分组与旧集群对应的 slot 分组一致即可。 例如:

旧集群 分组 1 的 slot 范围是:1-40,
那么
新集群 分组 1 的slot 范围必须是:1-40
且
新集群 分组 1 的后端节点(codis-server)需要同步 旧集群 的分组 1 的后端节点(codis-server)数据

切换

将新集群的分组的主节点添加到旧集群的 slave 里面,这时候新的集群会提示只读,无法写入。

等数据完全同步以后,在旧集群里面将新集群的 slave 节点,提升为主节点;这时候新旧集群皆可用。

这时候就可以开始修改对应的客户端请求地址,进行无缝迁移。

注意:跨版本升级,需要进行测试,不一定支持,codis-proxy 与 codis-server 版本不一致,进行转发,需要进行测试。