Redis Cluster 背景 并发量 <10万dps
数据量 单机内存<256G
带宽 网卡限制
解决方式 提高机器配置
分布式
数据分布 | 分布方式 | 特点 | 典型产品 |
| ——– | —————– | ——– |
| 哈希分布 | 数据分散度高数据分布业务无关无法顺序访问支持批量操作 | 一致性哈希MemcacheRedis Cluster缓存产品 |
| 顺序分布 | 数据分散度易倾斜键值业务相关可顺序访问支持批量操作 | BigTableHBase |
哈希 …
集群伸缩 伸缩原理 伸:增加节点 缩:节点下线
集群伸缩:槽和数据在节点之间的移动
扩容集群 准备新节点 打开集群模式
配置和其他节点统一
启动后是孤立的节点
加入集群meet 在集群节点中配置:cluster meet 127.1 <newnodeport>
使用redis-trib.rb:
redis-trib.rb ad-node new_host:new_port existing_host:existing_port --slave --master_id <arg>{扩展参数是配置为从节点}
为它迁移槽和数据可以实现扩容
可以作为从节点负责故障转移
迁移槽和数据 1). 对目标节点发 …
RedisCluster 客户端使用 moved重定向 对任意节点发送键命令
节点会计算槽和对应节点确定这个键是否指向自身
如果指向自身,就执行命令,返回key所在的槽
否则就回复moved异常,客户端拿到这个moved后,重定向节点,重新发送命令
ASK重定向 解决槽迁移时客户端的查询问题
对源节点发送键命令
节点发现正在进行槽迁移,回复客户端ask转向
客户端对目标节点Asking,发送命令
目标节点返回响应结果
两者的区别 两者都是客户端重定向
moved:槽已经确定迁移
ask:槽还在迁移中
smart客户端 目标:追求性能(不能使用代理模式)
从集群中选取一个可运行节点,使用cluster slots 初始化槽和节点映射
…
Redis Sentinel 主从复制的问题 手动故障转移
写能力和存储能力受限
Redis Sentinel架构 有多个Sentinel节点
不用来存储数据
多个节点判断master节点的故障,进行故障转移
保证高可用,即便一个Sentinel节点挂点也没事
客户端只会记录sentinel的地址(因为sentinel会进行故障转移,master节点地址不固定)
一套sentinel可以监控多套master-slave,利用master-name作为标识
Sentinel的故障转移 多个sentinel发现并确认master有问题
选举出一个sentinel作为领导
选出一个slave作为新的master
通知其余slave成为新 …
Redis基础学习 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 …