设为首页 收藏本站
查看: 843|回复: 0

[经验分享] 分布式redis服务:codis

[复制链接]

尚未签到

发表于 2018-11-5 10:28:29 | 显示全部楼层 |阅读模式
  codis介绍
  codis是豌豆荚基础架构团队开发并开源的分布式redis服务,可以看作是一个无限内存的redis服务,有动态扩容/缩容的能力。
  codis使redis获得动态扩容/缩容的能力,增减redis实例对client完全透明,并不需要重启服务,不需要业务方面担心redis内存爆掉的问题。
  codis架构
  单codis-proxy架构
DSC0000.jpg

  多codis-proxy架构
DSC0001.png

  在codis的设计中,codis-proxy被设计成无状态的,客户端连接任何一个codis-proxy都是一样的,所以可以比较容易单间多个codis-proxy来实现高可用并横向扩容。建议使用多codis-proxy的高可用架构。
  codis的特点
  codis分片

  codis采用pre-sharding的技术来实现数据的分片,默认分成1024个slot(0-1023)。对于每个key来说,通过哈希算法crc32(key)%1024来 确定slot>
  slot是虚拟概念。每一个slot都会有一个且必须有一个特定的server group>  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具有如下功能:
  1、静态分析RDB文件,包括解析以及恢复RDB数据到redis
  2、从redis上dump RDB文件以及在redis和codis之间动态同步数据
  实现步骤
  实现redis集群迁移到codis集群,需要进行如下操作
  1、搭建好codis集群,并且codis-proxy能正确运行起来
  2、对每一个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处理速度限制
  3、完成数据迁移,在适当的时候将服务指向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的状态。
  codis-ha用法
  go getgithub.com/ngaut/codis-ha
  cd codis-ha
  codis-ha--codis-config=localhost:18087 --productName=test
  参考文档:
  codis使用指南:https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md
  codis设计与实现2:http://0xffff.me/blog/2014/11/11/codis-de-she-ji-yu-shi-xian-part-2/


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630997-1-1.html 上篇帖子: 王高利:Redis运维之常用命令操作 下篇帖子: 王高利:CentOS6.5下redis安装部署配置指南、常用命令、主从同步集群、redis-php学习资料整合详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表