加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Redis集群方案-Codis

发布时间:2021-01-11 07:41:40 所属栏目:站长百科 来源:网络整理
导读:《Redis集群方案-Codis》要点: 本文介绍了Redis集群方案-Codis,希望对您有用。如果有疑问,可以联系我们。 作者介绍 郝朝阳 ,DevOps视角社区发起人,高级运维工程师,专注于运维自动化的实现.现就职于宜搜科技,负责前端运维工作.致力于形成自己的运维细想

《Redis集群方案-Codis》要点:
本文介绍了Redis集群方案-Codis,希望对您有用。如果有疑问,可以联系我们。

作者介绍

郝朝阳,DevOps视角社区发起人,高级运维工程师,专注于运维自动化的实现.现就职于宜搜科技,负责前端运维工作.致力于形成自己的运维细想体系.

codis介绍

codis是豌豆荚基础架构团队开发并开源的分布式redis服务,可以看作是一个无限内存的redis服务,有动态扩容/缩容的能力.
codis使redis获得动态扩容/缩容的能力,增减redis实例对client完全透明,并不需要重启服务,不需要业务方面担心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.
slot是虚拟概念.每一个slot都会有一个且必须有一个特定的server group id来表示这个slot的数据由哪个server group来提供.数据的迁移也是以slot为最小单位的.

codis数据迁移

codis支持通过codis-server进行数据迁移,迁移数据时是一个个key来进行的.每次以一个key为最小单位进行迁移,不会把主线程block住.redis的操作是内存的,批量的一次性写入和分多次set几乎没有区别,再者这个模型还避免了迁移过程中的数据更新同步的问题,因为迁移一个key的操作是原子性的,对于这个redis-server来说,在完成这次迁移指令前,是不会响应其它请求的,所以保证了数据的安全.

redis迁移到codis

redis-port工具

codis提供了redis-port的命令行工具,能够实现从数据上T的redis集群迁移到codis分布式redis集群.redis-port具有如下功能:?

  • 静态分析RDB文件,包括解析以及恢复RDB数据到redis
  • 从redis上dump RDB文件以及在redis和codis之间动态同步数据

实现步骤

实现redis集群迁移到codis集群,需要进行如下操作?

  • 搭建好codis集群,并且codis-proxy能正确运行起来
  • 对每一个redis实例运行一个redis-port来向你codis导入数据.如: nohup redis-port sync –ncpu=4–from=redis-server:6379 –target=codis-proxy:19000 >${port}.log 2>&1 &
     每个redis-port负责将对应的redis数据导入到codis
     多个redis-port之间互不干扰,除非多个redis上的key出现冲突
     单个redis-port可以将负责的数据并行迁移一提高速度,通过—nohup指定并行数
     导入速度受带宽以及codis-proxy处理速度限制
  • 完成数据迁移,在适当的时候将服务指向codis集群,并将redis集群下线
     ?原redis集群下线时,会导致redis-port连接断开,于是自动退出

高可用

codis-proxy高可用

因为codis-proxy是无状态的,所以比较容易实现高可用性并横向扩容.
对于JAVA用户来说,可以使用设计者修改过的jedis(https://github.com/CodisLabs/jodis),来实现codis-proxy的高可用.它会通过监控zk上的注册信息来实时获得当前可用的proxy列表,既可以保证高可用性,也可以通过轮流请求所有的proxy实现负载均衡.如果需要异步请求,可以使用基于Netty开发的Nedis.

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.
codis通过开放的api实现自动切换主从的工具-codis-ha,会检测到master故障后,会自动将其下线,并将期中一个salve提升为master,但是不会自动刷新其它slave的状态.

文章来自微信公众号:DevOps视角

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读