Redis集群方案-Codis
《Redis集群方案-Codis》要点: 作者介绍 郝朝阳,DevOps视角社区发起人,高级运维工程师,专注于运维自动化的实现.现就职于宜搜科技,负责前端运维工作.致力于形成自己的运维细想体系. codis介绍codis是豌豆荚基础架构团队开发并开源的分布式redis服务,可以看作是一个无限内存的redis服务,有动态扩容/缩容的能力. codis架构单codis-proxy架构
多codis-proxy架构在codis的设计中,codis-proxy被设计成无状态的,客户端连接任何一个codis-proxy都是一样的,所以可以比较容易单间多个codis-proxy来实现高可用并横向扩容.建议使用多codis-proxy的高可用架构. codis的特点codis分片codis采用pre-sharding的技术来实现数据的分片,默认分成1024个slot(0-1023).对于每个key来说,通过哈希算法crc32(key)%1024来 确定slot id. codis数据迁移codis支持通过codis-server进行数据迁移,迁移数据时是一个个key来进行的.每次以一个key为最小单位进行迁移,不会把主线程block住.redis的操作是内存的,批量的一次性写入和分多次set几乎没有区别,再者这个模型还避免了迁移过程中的数据更新同步的问题,因为迁移一个key的操作是原子性的,对于这个redis-server来说,在完成这次迁移指令前,是不会响应其它请求的,所以保证了数据的安全. redis迁移到codisredis-port工具codis提供了redis-port的命令行工具,能够实现从数据上T的redis集群迁移到codis分布式redis集群.redis-port具有如下功能:?
实现步骤实现redis集群迁移到codis集群,需要进行如下操作?
高可用codis-proxy高可用因为codis-proxy是无状态的,所以比较容易实现高可用性并横向扩容. redis实例高可用对于codis-group的redis实例来说,当一个group的master故障后,应该让管理员清楚的知道,并手动将slave升级为master,因为这涉及到数据一致性等问题.当group中的master故障,其中一个slave升级为master后,该组内的其它slave实例是不会自动改变状态的,这些slave仍试图从旧的master上同步数据,因而导致组内新的master和slave之间数据不一致.因为redis的slaveof命令切换master时会丢弃slave上的全部数据,从新master完整同步,会消耗新master资源,因此建议在知情的情况下手动操作,是用codis-configserver add?slave. 文章来自微信公众号:DevOps视角 (编辑:ASP站长网) |