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

More Related Content

What's hot

Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redisqianshi
 
Golang advance
Golang advanceGolang advance
Golang advancerfyiamcool
 
反向代理工作原理及Squid简介
反向代理工作原理及Squid简介反向代理工作原理及Squid简介
反向代理工作原理及Squid简介diruser
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践Wensong Zhang
 
Redis介绍
Redis介绍 Redis介绍
Redis介绍 yubao fu
 
美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise 美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise 美团点评技术团队
 
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Hang Geng
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011Yiwei Ma
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解Yong Luo
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪Shaoning Pan
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStackRongze Zhu
 
SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redisideawu
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术团队
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 

What's hot (20)

Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redis
 
Golang advance
Golang advanceGolang advance
Golang advance
 
反向代理工作原理及Squid简介
反向代理工作原理及Squid简介反向代理工作原理及Squid简介
反向代理工作原理及Squid简介
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
Redis介绍
Redis介绍 Redis介绍
Redis介绍
 
美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise 美团技术沙龙04 - Kv Tair best practise
美团技术沙龙04 - Kv Tair best practise
 
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
 
微服務自己動手做
微服務自己動手做微服務自己動手做
微服務自己動手做
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStack
 
SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redis
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 

Similar to Redis cluster那些事儿

twMVC#26 | Redis資料型別與場景的連結
twMVC#26 | Redis資料型別與場景的連結twMVC#26 | Redis資料型別與場景的連結
twMVC#26 | Redis資料型別與場景的連結twMVC
 
Another Introduce to Redis
Another Introduce to RedisAnother Introduce to Redis
Another Introduce to Redisjiaqing zheng
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Redis 存储分片之代理服务twemproxy 测试
Redis 存储分片之代理服务twemproxy 测试Redis 存储分片之代理服务twemproxy 测试
Redis 存储分片之代理服务twemproxy 测试kaerseng
 
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽Kito Cheng
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發Fred Chien
 
Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲csdnmobile
 
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure National Cheng Kung University
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺宗凡 楊
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
云网锦绣 SDN实战研讨会
云网锦绣 SDN实战研讨会云网锦绣 SDN实战研讨会
云网锦绣 SDN实战研讨会Hardway Hou
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析CC
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战Huang Toby
 
雲端分散架構的駭客事件與安全問題
雲端分散架構的駭客事件與安全問題雲端分散架構的駭客事件與安全問題
雲端分散架構的駭客事件與安全問題Alan Lee
 

Similar to Redis cluster那些事儿 (20)

twMVC#26 | Redis資料型別與場景的連結
twMVC#26 | Redis資料型別與場景的連結twMVC#26 | Redis資料型別與場景的連結
twMVC#26 | Redis資料型別與場景的連結
 
Another Introduce to Redis
Another Introduce to RedisAnother Introduce to Redis
Another Introduce to Redis
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Redis 存储分片之代理服务twemproxy 测试
Redis 存储分片之代理服务twemproxy 测试Redis 存储分片之代理服务twemproxy 测试
Redis 存储分片之代理服务twemproxy 测试
 
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發
 
Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲
 
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
 
Rootkit 101
Rootkit 101Rootkit 101
Rootkit 101
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
云网锦绣 SDN实战研讨会
云网锦绣 SDN实战研讨会云网锦绣 SDN实战研讨会
云网锦绣 SDN实战研讨会
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战
 
雲端分散架構的駭客事件與安全問題
雲端分散架構的駭客事件與安全問題雲端分散架構的駭客事件與安全問題
雲端分散架構的駭客事件與安全問題
 

More from rfyiamcool

python高级内存管理
python高级内存管理python高级内存管理
python高级内存管理rfyiamcool
 
分析mysql acid 设计实现
分析mysql acid 设计实现分析mysql acid 设计实现
分析mysql acid 设计实现rfyiamcool
 
大话redis设计实现
大话redis设计实现大话redis设计实现
大话redis设计实现rfyiamcool
 
async io frame
async io frameasync io frame
async io framerfyiamcool
 
异步io框架的实现
异步io框架的实现异步io框架的实现
异步io框架的实现rfyiamcool
 
美妙的多进程管理
美妙的多进程管理美妙的多进程管理
美妙的多进程管理rfyiamcool
 

More from rfyiamcool (8)

python高级内存管理
python高级内存管理python高级内存管理
python高级内存管理
 
分析mysql acid 设计实现
分析mysql acid 设计实现分析mysql acid 设计实现
分析mysql acid 设计实现
 
Raft
Raft Raft
Raft
 
大话redis设计实现
大话redis设计实现大话redis设计实现
大话redis设计实现
 
python gil
python gilpython gil
python gil
 
async io frame
async io frameasync io frame
async io frame
 
异步io框架的实现
异步io框架的实现异步io框架的实现
异步io框架的实现
 
美妙的多进程管理
美妙的多进程管理美妙的多进程管理
美妙的多进程管理
 

Redis cluster那些事儿