从Redis到Codis移植实践

栏目: 数据库 · 发布时间: 5年前

内容简介:随着业务的发展,线上Redis的数据越来越多,所以必须考虑扩容的事情了。对于redis的扩容,目前可选的方案有三种:1、client自己做sharding,一般是按key的hash值取模,对应到指定的redis server;2、采用redis3以上版本自带的cluster;3、Twitter开源的Twemproxy;4、国人开发的Codis。经过一番评估,我们决定采用Codis,原因不多说了,网上有很多。总结一句话:codis比较适合那种数据库比较大,但并发量不是特别高的系统。Codis的原理和使用方法

一、    背景

随着业务的发展,线上 Redis 的数据越来越多,所以必须考虑扩容的事情了。对于redis的扩容,目前可选的方案有三种:1、client自己做sharding,一般是按key的hash值取模,对应到指定的redis server;2、采用redis3以上版本自带的cluster;3、Twitter开源的Twemproxy;4、国人开发的Codis。经过一番评估,我们决定采用Codis,原因不多说了,网上有很多。总结一句话:codis比较适合那种数据库比较大,但并发量不是特别高的系统。

二、    codis架构方案

Codis的原理和使用方法这里就不介绍了,网上有很多资料可以搜。这里说一下codis的proxy负载,有两种方案,如下:

方案一:通过HAProxy 或F5 来做负载均衡

从Redis到Codis移植实践

方案优点:

1、  仍然可以使用Jedis作为客户端,原有系统的代码基本不用改

2、  方便扩容,扩容时代码基本无感知

方案缺点:

1、运维工作量增加,需要配置HA负载策略,并且每次扩容需要重新调整HA策略

方案二:通过Jodis 客户端来做负载均衡

从Redis到Codis移植实践

方案优点:

1、  简化运维

2、  少一个流程节点,降低了故障的概率

方案缺点:

1、  原有系统的代码全部需要修改,动作还是挺大的

2、  客户端依赖Jodis和zookeeper,相对比较重

备注:

如果使用Jodis客户端,jedis需要使用2.9.0及以上版本,同时spring-data-redis需要升级到1.5.0及以上版本。

我们最终选择的是第一个方案。主要是不用改已有的代码,否则研发人员会疯了。

三、    从Redis到Codis的上线步骤

2.1、上线步骤

1)       搭建生产环境下的codis集群,建议至少包括2个proxy、3个codis-server

2)       上线前:迁移redis数据到codis集群。数据迁移 工具 我们采用的是redis-port。Redis-port的使用和性能测试后续我再写文章介绍。需要注意的是:redis-port的sync操作,同步完成以后可以持续同步新写入的数据,切记不要关闭redis-port的sync进程,以保证codis集群的数据能够包括所有redis服务器的数据

3)       上线时,修改各个系统的redis连接信息,指向新codis集群,并重启服务

4)       观察各个系统是否运行正常

5)       观察原redis服务是否已经无请求接入

四、codis-HA

Codis-HA是codis提供的一个主从切换的工具,在codis3.1及以下版本中使用,codis3.2已经不推荐使用了,而是推荐使用sentinel。Codis-ha有几个问题:

1)       发生主从切换时,如果原来有多个slave,则没有提升为master的slave指向的master不会自动切换到新的master上

2)       被摘掉的master不会自动恢复,必须进行人工干预

综合来看,目前还是建议使用Sentinel + VIP的方式来实现主从切换。

五、报表监控

实时数据监控:

通过codis自带的控制台即可查看集群的实时数据,包括key数量、占用内存大小、实时请求数等

历史访问数据:

可以通过运维监控来实现,包括内存、CPU、IO、Load、请求数等的历史曲线,并可以设置监控报警

实时数据查询:

可以通过codis提供的restful api来实现,并嵌入到codis控制台中,  包括:     给定key,获得slot、group信息、以及最终数据,或者给定多个key,获得slot、group和最终数据

六、Codis后续扩容步骤

Codis可以实现在线不停服务进行扩容,具体的步骤如下:

1)       安装配置codis-server主从

2)       打开codis管理界面,新建server group、并添加刚刚安装的redis实例(注意:codis默认第一个添加的是master)

3)       规划slot分布,把部分slot迁移到新的server group中

说明:

3.1  slot迁移的过程中,Codis服务可以正常访问,codis的迁移机制可以保证数据的一致性

3.2  迁移时,key都是单个进行迁移,并且不能同时运行多个迁移任务,所以codis的迁移时间会比较长。一定要在扩容前留有足够的时间和空间。

七、参考资料

1、redis-port官网: https://github.com/CodisLabs/redis-port

下载地址: https://github.com/CodisLabs/redis-port/releases/download/v1.2.1/redis-port-v1.2.1-go1.7.5-linux.tar.gz

2、codis-proxy不支持及部分支持的命令集

参见: https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解TensorFlow:架构设计与实现原理

深入理解TensorFlow:架构设计与实现原理

彭靖田、林健、白小龙 / 人民邮电出版社 / 2018-5-1 / 79.00元

本书以TensorFlow 1.2为基础,从基本概念、内部实现和实践等方面深入剖析了TensorFlow。书中首先介绍了TensorFlow设计目标、基本架构、环境准备和基础概念,接着重点介绍了以数据流图为核心的机器学习编程框架的设计原则与核心实现,紧接着还将TensorFlow与深度学习相结合,从理论基础和程序实现这两个方面系统介绍了CNN、GAN和RNN等经典模型,然后深入剖析了TensorF......一起来看看 《深入理解TensorFlow:架构设计与实现原理》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码