技术分享之Redis Cluster那些事儿

前言:
    没什么好说的,先前看到兄弟部门的同事们对redis cluster很感兴趣,也在实施redis cluster集群。正好我也有redis cluster的一些管理经验。本着知识要传播要分享的精神,在公司内部做了这么一个技术分享。

    分享的主题是redis cluster集群那些事儿,聊了redis常见的集群方案,cluster的优缺点,怎么创建,扩缩容,cluster的原理及运维中遇到的常见问题。

    说句题外话,Redis的发展太快速了,Redis5.0版本也出来了,新版本里又多了很多的功能,比如我特别需要的zPopMin, stream功能。

    
    该文章后续仍在不断的更新修改中, 请移步到原文地址 http://xiaorui.cc/?p=5208

    ppt在github中的地址,https://github.com/rfyiamcool/share_ppt  , 记得给我star和follow啊.

    slideshare的分享地址,https://www.slideshare.net/rfyiamcool/redis-cluster-99683711

    ppt的下载地址, http://xiaorui.cc/static/redis_cluster.pdf

ppt内容摘要

# xiaorui.cc

1. Redis Cluster那些事⼉儿 峰云就她了 xiaorui.cc github.com/rfyiamcool
2. 主流的集群⽅方案 vip多线程版 twemproxy codis smart_proxy + redis cluster redis cluster 集群 集群 集群
3. codis vs redis cluster cluster codis hash_tag y y design 中⼼化 去中⼼化 pipeline client move order ⽀持 slot y y 多db n y 性能 high this < cluster code 相当复杂 简单 范围 ⼴ 也有不少⼤⼚
4. codis-proxy codis-proxy zookeeper 主机组 codis sentinel redis-m redis-s redis-m redis-s
5. codis dashboard
6. codis 我个⼈人很喜欢Codis,研究过其源码实现. but 这次主题是Redis Cluster !!! So, …
7. redis cluster 去中⼼心化 Gossip协议
8. 架构 Master1 slave2 Master2 slave3 Master3 slave1 node1 node2 node3 cluser
9. gossip 5801 5802 集群 5803 1. ping 2. pong 1. meet 2. pong
10. slot mapping keys crc(key)&16383 = slot 1 key1 节点1 key2 key3 key4 slot1 slot2 集群 slot1 —> redis1
11. redis cluster优点 ⾼高性能, 避免proxy代理理的消耗 ⾼高可⽤用, ⾃自动故障转义 ⾃自带迁移功能 丰富的集群管理理命令
12. redis cluster缺点 client实现复杂, 需要缓存slot mapping 迁移异常不不能⾃自修复 节点太多时, 节点检测占⽤用带宽 不不⽀支持不不同slot的批量量命令 more…
13. cluster cmd
14. redis-tribcreate:创建集群 check:检查集群 info:查看集群信息 fix:修复集群 add-node:将新节点加⼊入集群 del-node:从集群中删除节点 reshard:在线迁移slot rebalance:平衡集群节点slot数量量 set-timeout:设置集群节点间⼼心跳连接的超时时间 call:在集群全部节点上执⾏行行命令 import:将外部redis数据导⼊入集群 官⽅方集群管理理⼯工具
15. quick start multi redis
16. create redis cluster ./redis-trib.rb create --replicas 1 127.0.0.1:8501 127.0.0.1:8502 127.0.0.1:8503 127.0.0.1:8504 127.0.0.1:8505 127.0.0.1:8506 > meet & cluster add-node &cluster setslot 第⼀一种 第⼆二种
17. add redis cluster 第⼀一种 127.0.0.1:8507 > cluster meet 127.0.0.1 8501 第⼆二种 > redis-trib.rb add-node 127.0.0.1:8507 127.0.0.1:8501
18. extend cluster 准备新节点 加⼊入集群 迁移槽位和数据 通告 第⼀一种 > redis-trib.rb reshard 127.0.0.1:8501 第⼆二种 1. ⽬目标 cluster setslot 6818 importing 2. 源 cluster setslot 6818 migrating 3. cluster getkeysinslot 6818 5 4. migrate 127.0.0.1 6818 “” 0 1000 keys k1 k2 k3
19. reduce cluster 迁移槽 删除主机 > redis-trib.rb reshard 127.0.0.1:8501 > redis-trib.rb del-node 127.0.0.1:8501
20. cluster status
21. cli
22. migrate key1 key2 master1 key1 key2 master2 migrating migrating importing 1. dump 3. del 2. restore
23. ask in migrate client source target 1 发送命令 2 回复ask转向 3 asking 5 响应结果 4 发送命令 ask临时转向 ask只⽤用在迁移中 对端需要asking,不不然对端会拒绝
24. moved client source target 1 发送命令 2 回复moved 4 响应结果 3 发送命令 永久转向 更更新client slot关系
25. ⾼可⽤性 Master slave cluser Master slave Master slave Master slave cluser Master slave Master kill -9
26. ⾼可⽤性 ? Master slave cluser Master slave Master slave Master slave cluser Master slavekill -9 kill -9 cluster: faild cluster-require-full-coverage ?
27. cluster fail原因 ⾄至少有⼀一个hash slot不不可⽤用 集群中⼤大部份Master都进⼊入了了PFAIL状态(可 能失已失效)
28. Fail探测 节点Fail探测超过timeout会标记为PFAIL PFAIL标记会随着gossip传播 每次收到⼼心跳包会检测其中对其他节点的PFAIL标记,当做对 该节点FAIL的投票维护在本机对 某个节点的PFAIL标记达到⼤大多数时,将其变为FAIL标记并⼴广 播FAIL消息
29. 故障恢复 slave发现⾃自⼰己的master变为FAIL 将⾃自⼰己记录的集群currentEpoch加1,并⼴广播Failover Request信息 其他节点收到该信息,只有各个master响应,判断请求者的合法性,并 发送FAILOVER_AUTH_ACK,对每⼀一个epoch只发送⼀一次ack 尝试failover的slave收集FAILOVER_AUTH_ACK 超过半数后变成新Master ⼴广播Pong通知其他集群节点
30. 读写分离 ? Master slave node2 cluser client 默认不能读slave ! 就是想读? 基于连接的readonly !!!
31. 批量 ? Master Master cluser client 官⽅方不不推荐 pipeline, mset ? Master k1; k2; k3;k4;k5;k6 … client k1; k4; k5 k2;k3 k6;… send (k1; k2; k3;k4;k5;k6 …)
32. find bigkey in cluster Master Master cluser Master client 对的,轮询所有maste节点 !
33. link https://redis.io/topics/cluster-tutorial https://redis.io/topics/cluster-spec
34. “ 别说话 ! ” –峰云就她了了

ppt截图

贴一些ppt的截图,  另外不少人总问我你这些图怎么画的? 答案是 keynote .  你的模板是哪里来的? keynote官方自带的模板。

END。


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc