Codis 运维应该做到的几点

我司目前使用 Codis,突然对如何 Codis 运维有点思考,记录一下。

 

1、 扩容和缩容对开发无感

这一点 Codis 可以做到。

 

2、 迁移对开发无感

如果使用 Codis,迁移分为三个部分:

1). 迁移 Codis Server,和上一点相同,Codis 可以做到;

2). 迁移 Codis Proxy,先新建 Proxy,然后启动新建的 Proxy,启动之后会向 zk 注册,然后停止旧的 Proxy,zk 中就只有新的 Proxy 了,程序会自动获取新的 Proxy 并连接;

3). 迁移 zk。由于 Codis Proxy 和 程序都依赖 zk,迁移 zk 看起来麻烦点。

迁移 zk 机器,可以对 zk 封装一个代理,比如 LVS,通过 LVS 转发到多个 zk,这样 zk 机器的迁移可以实现无感;

用了 LVS 就会涉及到 LVS 的迁移,我们的做法是把 LVS 的 IP 封装成域名,Codis Proxy 和程序中都写这个域名,当需要迁移 LVS 时,可以在新的 LVS 上建立新 IP 转发到 zk 机器,然后修改域名的 DNS 指向新 LVS IP。注:这里可能涉及到 DNS 缓存的问题。

 

3、申请和部署尽量简单

申请和部署和用不用 Codis 都没有关系,我的思路是:

1). 对于申请,开发人员首先通过提交配置,包括 内存、是否需要 Slave 等,提交方式可以通过网页提交单子或者通过 git,然后运维审核配置,通过后调用「部署」的 API 「自动」创建。

2). 对于部署,Redis (Codis) 的集群资源需要一个管理工具来统一管理,需要有 API 来新建、删除和修改,也需要有很好的调度功能(什么样的申请在什么机器创建)。