Redis-cluster:去中心化,中间件,集群中任意节点平等,任一节点可获得全局的数据

Redis-cluster 拓扑图:

架构演变及 cap 理论:

单机 Redis 属于 cp 模型。

Redis-cluster 属于 ap 模型

Redis-cluster 核心参数:

cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 50000(毫秒)
cluster-migration-barrier 1
cluster-require-full-coverage no
cluster-slave-validity-factor
(node-timeout * slave-validity-factor) + repl-ping-slave-period

Redis-cluster 数据分布:预分槽(slot)

预分配 16384(slot), 根据 crc16(key) mod 16384的值,决定key 存放在哪个 slot里。

预分槽的方案介于“硬Hash”和“一致性Hash”之间,牺牲了一定的灵活性,但相比“一致性Hash“,数据的管理成本大大降低

Redis-cluster M-S
Redis-cluster 采用 一主多从 
集群完整写的步骤:
1. client 写数据到 master
2. master 告知 client “ok”
3. master 同步数据到 slave
存在风险:
第二步骤成功后, mater crash,照常主从数据不一致

Redis-cluster 解决了 我们什么问题?
以前:
1.  redis cpu 使用率>80%, 拆分redis实例,修改代码,指向新的redis实例。
2   redis 内存使用超过标准,继续拆分实例!
3   redis 流量增长,拆!
4.  单实例的高可用问题。
现在:
只需要 分配一组新的redis实例 加入 cluster, 迁移 slot  即可解决 资源 使用率问题。

Redis-cluster缺点:
1.  无法查看 几号 slot 里 存有什么类型的keys,只能查看实例里存有多少slot 号。
2.  当 redis-cluster  中 一组节点全部挂掉,  将 丢失 指向 已经挂掉节点的 keys。 (根据 crc16算法)

Redis-cluster 无法处理的问题:
A.   在遇到 被爬虫,强刷部分模块, 容易出现 redis 线程上涨,堵塞 响应请求, 其根因是  存储的redis key不合 理. 
B.  部分hash key 存的过大,单个key里 存储数据 超过1W。降低 redis 响应时间。
C.   程序逻辑问题, 导致 redis 实列 频繁刷新 部分业务key.
D.   程序设计漏洞。

cluster经典架构

节点:

节点(Node)

一个集群由一个或多个节点组成,其中主节点(master)负责储存键值对数据,而从节点(slave)则负责复制主节点。

注意:从节点不提供任何读写操作

分片:

分片(Sharding)

集群将整个数据库分为16384(2 的 14 次方)个槽(slot)

每个主节点可以负责处理0 个至 16384 个槽

注意:集群只有在所有槽位均有主节点处理时,才能进入上线状态并处理数据命令

槽位计算方式

命令执行:

槽位正确与槽位不正确

槽位正确:命令处理的键所在的槽,正好由接收命令的节点负责

槽位不正确:接收命令的节点并不包含键所在的槽位

槽位正确:

槽位不正确:

键 date 所在的槽 2022 并非由节点 7001 负责,7001向客户端返回Redirection。

客户端根据Redirection的指引,转向至节点 7000,并重新发送命令。

Redirection的实现

Gossip协议内部通信

Redirection的实现之槽表(Slot table)

节点在接收到命令请求时,会通过槽表检查键所在的槽是否由本节点处理:

如果是的话,那么节点直接执行命令;

如果不是的话,那么节点就从槽表里面提取出正确节点的地址信息,然后返回客户端转向错误。

Failover

集群中三个负责处理命令的主节点标记7000出现SDOWN

Redis多机常用架构-cluster的更多相关文章

  1. Redis多机常用架构-主从

    本文内容摘录自同事Perry Zhang的讲解,如需转载须本人同意. 1.主从 命令:slaveof <IP><PORT> redis主从配置:redis支持master-sl ...

  2. Redis多机常用架构-sentinel

    哨兵经典架构 sentinel结构 哨兵工作原理 Sentinel 通过配置文件发现Master,如下: Sentinel 通过向Master发送 INFO 命令来自动获得所有Slave的地址 跟Ma ...

  3. Kubernetes 在生产环境中常用架构

    Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kuber ...

  4. redis集群主流架构方案分析

    Redis在互联网大数据平台有着广泛的应用,主要被用来缓存热点数据,避免海量请求压垮数据库,同时可以提升服务节点的响应速度和并发量.随着数据量的增多,由于redis是占用单台物理机或虚机的内存,内存资 ...

  5. Redis|Sentinel 高可用架构

    一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...

  6. Redis Sentinel高可用架构

    Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...

  7. Redis多机功能介绍

    Redis多机功能目的:以单台Redis服务器过渡到多台Redis服务器 Redis单机在生产环境中存在的问题 1.内存容量不足 Redis使用内存来存书数据库中的数据,但是对于一台机器来说,硬件的内 ...

  8. redis 介绍和常用命令

    redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...

  9. 数据库之redis篇(2)—— redis配置文件,常用命令,性能测试工具

    redis配置 如果你是找网上的其他教程来完成以上操作的话,相信你见过有的启动命令是这样的: 启动命令带了这个参数:redis.windows.conf,由于我测试环境是windows平台,所以是这个 ...

随机推荐

  1. [转载]Js小技巧||给input type=“password”的输入框赋默认值

    http://www.cnblogs.com/Raywang80s/archive/2012/12/06/2804459.html [转载]Js小技巧||给input type="passw ...

  2. 干货|宏巍软件之Java线程监控之旅

    宏巍软件 许向 大家好,我是上海宏巍信息技术有限公司(简称:宏巍软件)的许向,宏巍软件成立于2005年,是一家以电商ERP软件开发为主的高新技术科技型软件公司,致力于为大型网商和电子商务企业提供专业. ...

  3. Html+Ajax+Springmvc+Mybatis,不用JSP

    有一个原因如下很合本人观点: http://bbs.csdn.net/topics/390939813 前端使用HTML+Ajax,后端使用Java Servlet,这样完全可以做到前后端分离,前端那 ...

  4. linux配置java环境变量(详细)

    linux配置java环境变量(详细) 本文完全引用自: http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html 一. 解压安装jdk ...

  5. Git学习(三)——暂存区、远程仓库、增删改管理

    一.工作区和暂存区 工作区(Working Directory) 就是在你的电脑里能看到的目录 版本库(Repository) 工作区中的一个隐藏目录.git,这个不算工作区,而是Git版本库.Git ...

  6. Html登录表单阻止自动填充

    设置属性 autocomplete="off" 阻止浏览器从cache获取数据填充登录表单. <input type="text" name=" ...

  7. 3个div 宽度移入移出时变化

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. 项目里面Swift和OC 交叉使用

    在OC的项目中使用Swift 语言开发 创建swift文件,同时创建桥接文件.(桥接文件里面不用导入头文件) 在swift文件中完成代码的编写. 在某OC类的.m文件中,使用swift文件.方法;#i ...

  9. 添加了有道生词本的 chrome google翻译扩展和有道翻译扩展

    在chrome发布项目,需要先花美金认证,还得要美国ID,无奈. 直接上源码,需手动导入. 原始项目源码并未开源,个人是从chrome本地文件里拿出来的,拓展来的,侵删(本来想着自已写一个,业余时间, ...

  10. Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信

    众所周知,iOS9已经开始在联网方面默认强制使用Https替换原来的Http请求了,虽然Http和Https各有各的优势,但是总得来说,到了现在这个安全的信息时代,开发者已经离不开Https了. 网上 ...