Redis集群概述

集群的核心意义只有一个:保证一个节点出现了问题之后,其他的节点可以继续提供服务使用。

Redis基础部分讲解过主从配置:对于主从配置可以有两类:一主二从,层级关系。开发者一主二从是常用的手段。

Redis的主从配置是所有Redis集群的一个基础。但是只是依靠主从依然无法实现高可用的配置。

Redis集群有以下两种方案

1)keepalived+twemproxy+HAProxy+sentinel

对redis集群而言,首先在主从的基础上发展出了一个叫哨兵的处理机制,所谓的哨兵的处理机制指的是,当我三台主机的master节点出现了问题之后,会自动的在两个slave节点下重新退选举出一个新的master节点,这样就可以保证原master出现问题之后,redis数据依然存在有主从的配置。

但是哨兵机制也只是针对于一种单主机的配置形式。因为不可能只使用一台主机来实现我们redis的配置。而推特网站发布了一个代理机制。可以有效的实现数据的分片存储。即:根据不同算法 实现不同主机的分片存储。

以保证负载均衡,同时可以结合keepalivedh和HAProxy组件实现twemproxy的高可用。

2)Redis Cluster

Redis在后来的版本发展之中也退出了一个自己的redis Cluster集群配置,利用这样的配置可以不用自己来通过配置文件实现主从关系的实现,而直接通过命令完成。

keepalived+twemproxy+HAProxy+sentinel

哨兵机制简介

只要是进行高可用的架构部署,那么就必须保证多节点,在Redis里面使用了主从模式可以多节点配置,但是传统的主从模式设计 一旦master主机出现问题之后,两台Slave主机无法提供正常的工作支持,列如:Slave主机为只读主机,而且如果要想继续提供支持,那么至少应该通过剩余的几台Slave里面去推选出一个新的Master,并且最为重要的是:这个新的Master能够被用户的程序找到。

如果要想进行哨兵机制的实现,一定需要具备有如下的几个特点:

sentinel的功能

1)监控Monitoring

sentinel时刻监控着redis master-slave是否正常运行;

2)通知Notification

sentinel可以通过api来通知管理员,被监控的redis master-slave出现了问题。

3)自动故障转移Automatic failover

当redis master出现故障不可用状态,sentinel会开始一次故障转移,将其中一个salve提升为一个新的master,将其他salve重新配置使用新的master同步,并使用Redis的服务器应用程序连接时收到使用新的地址连接。

4)配置提供者Configuration provider

sentinel作为在集群中的权威来源,客户端连接到sentinel来获取某个服务的当前Redis主服务器的地址和其他信息。当故障发生转移时,Sentinel会报告新地址(更改哨兵文件对应的配置内容)。

通常一台主机运行三个哨兵,并且该哨兵运行的端口不同,但是这三个哨兵都要去监控同一个master的地址。(找到了master就等于找到了所有的slave)

twemproxy分片处理

不管你电脑性能多好,只要你运行了Redis,那么就有可能造成一种非常可怕的局面:你电脑的内存将立刻被占满,而且一台Redis数据库的性能终归是有限制的。

TwemProxy是一个专门为了这种nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。所为的分片指的是根据一定的算法将要保存的数据保存到不同的节点之中。

twemProxy整合sentinel

Twemproxy如果要与Redis集成使用的是Redis的Master节点,因为只有Master节点才具有写功能。

一旦某一个Master被干掉了,则一定要重新选举出一个新的Master节点,但是这个时候会出现有一个问题:twemproxy所使用的配置文件时单独存在的。哨兵选举完成后,需要更新配置文件

如果要想保证所有的Redis集群高可用设计,需要单独准备一个shell脚本与所有的哨兵机制一起使用。 两步操作:1.、更改redis_master.conf文件(twemproxy的配置文件) 2、重新启动twemproxy进程

HAProxy与twemproxy集成

Twemproxy主要功能在于数据的分片处理,而且会发现在整个Redis集群里面必须通过twemProxy,于是这个时候就有可能造成一种问题你后面Redis集群一定会速度爆快,因为一堆的redis数据库。但是所有的性能都卡在了代理上

解决办法:用HAProxy做twemproxy的代理。

HAProxy是一个开源的,高性能的,基于TCP第四层和http第七应用层的千万级高并发负载均衡软件;

为了保证HAProxy的高可用设计,所以应该设计有两套的HAProxy的代理主机,但是现在就出现了一个问题,如果现在提供了两套的HAProxy主机,用户应该怎么访问?需要记住两个地址吗。

用户访问Keepalived虚拟IP,Keepalived访问主(备)HAProxy

Keepalived是一个基于VRRP协议来实现的服务高可用方案,可用利用其来避免IP单点故障,类似的工具还有heartbeat,pacemaker。但是它一般不会单独出现,而是与其他负载均衡技术(如lvs,nginx,haproxy)一起工作来达到集群高可用。

VRRP协议全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

以下是keepalived+twemproxy+HAProxy+sentinel的整个架构图(小人是指哨兵)

Redis Cluster

以上Redis集群作为项目的部署环境,需要追加twemproxy代理做分片,而后使用HAProxy做twemproxy的负载均衡,而后使用Keepalived作为HAProxy的vip技术,但是这样的设计成本太高。

redis-cluster,直接使用redis就可以实现所谓的分片,高可用。

redis-cluster设计的时候考虑到了去中心化,中间件,因为中心点的存在导致了性能的瓶颈,解决一个问题 会解决第二个 第三个问题。。。

redis-cluster中每一个redis的服务它都可以具备分片,都可以具备集群的功能。

也就是说集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其它所有节点连接,而且这些连接保持活跃。

这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

redis-cluster选举(容错)

选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过设置时间(cluster-node-timeout),认为当前master节点挂掉。

当我发现某一台主机的master挂掉了,我们从新选举一个salve当做master(整个过程中把哨兵避免了,不需要修改哨兵的配置文件了)

这样可以去掉所有的代理层组件,由Redis自己来完成,这就是redis-cluster的设计方案。

Redis集群架构的更多相关文章

  1. 【原创】那些年用过的Redis集群架构(含面试解析)

    引言 今天是2019年2月12号,也就是大年初八,我接到了高中同学刘有码面试失利的消息. 他面试的时候,身份是某知名公司的小码农一枚,却因为不懂自己生产上Redis是如何部署的,导致面试失败! 人间惨 ...

  2. 那些年用过的Redis集群架构

    今天我们来谈谈Redis集群这个话题,需要说明的是本文 适合人群:不知道自己生产redis集群架构,以及对Redis集群不了解的人 不适合群: 对自己生产Redis集群架构非常了解的人 本文预计分两个 ...

  3. redis集群架构(含面试题解析)

    老规矩,我还是以循序渐进的方式来讲,我一共经历过三套集群架构的演进! Replication+Sentinel 这套架构使用的是社区版本推出的原生高可用解决方案,其架构图如下! 这里Sentinel的 ...

  4. 【转】那些年用过的Redis集群架构(含面试解析)

    引言 今天是2019年2月12号,也就是大年初八,我接到了高中同学刘有码面试失利的消息. 他面试的时候,身份是某知名公司的小码农一枚,却因为不懂自己生产上Redis是如何部署的,导致面试失败! 人间惨 ...

  5. Redis集群架构【转载】

    Redis 集群的 TCP 端口(Redis Cluster TCP ports) 每个 Redis 集群节点需要两个 TCP 连接打开.正常的 TCP 端口用来服务客户端,例如 6379,加 100 ...

  6. 161230、利用代理中间件实现大规模Redis集群

    前面在<大规模互联网应用Redis架构要点>和<Redis官方集群方案 Redis Cluster>两篇文章中分别介绍了多Redis服务器集群的两种方式,它们是基于客户端sha ...

  7. 基于vip和twemproxy代理实现redis集群的无感知弹性扩容

    目标是实现redis集群的无感知弹性扩容 关键点 1是无感知,即对redis集群的用户来说服务ip和port保持不变 2.弹性扩容,指的是在需要时刻可以按照业务扩大redis存储容量. 最原始的twe ...

  8. redis 集群搭建: redis-cluster

    前言 redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧. 那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢? 正 ...

  9. Redis集群方案<转>

    为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在 ...

随机推荐

  1. Prefer ThreadLocalRandom over Random

    Java 7 has introduced a new random number generator - ThreadLocalRandom Normally to generate Random ...

  2. Tomcat9使用免费的Https证书加密网站

    1.概述 Apache Tomcat是一款优秀的Java Web容器,对于各个站长来说,可以很方便的使用Tomcat将自己的网站博客放在公网的服务器上,分享自己的心得以及个人博客. 那么在公网中的访问 ...

  3. Java 开发, volatile 你必须了解一下

    上一篇文章说了 CAS 原理,其中说到了 Atomic* 类,他们实现原子操作的机制就依靠了 volatile 的内存可见性特性.如果还不了解 CAS 和 Atomic*,建议看一下我们说的 CAS ...

  4. Netty与网络编程

    Netty什么? Netty项目是一个提供异步事件驱动网络应用框架和快速开发可维护的高性能高扩展性服务端和客户端协议工具集的成果.换句话说,Netty是一个NIO客户端服务端框架,它使得快速而简单的开 ...

  5. 【bzoj 4407】于神之怒加强版

    Description 给下N,M,K.求     Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...

  6. 斜率优化入门学习+总结 Apio2011特别行动队&Apio2014序列分割&HZOI2008玩具装箱&ZJOI2007仓库建设&小P的牧场&防御准备&Sdoi2016征途

    斜率优化: 额...这是篇7个题的题解... 首先说说斜率优化是个啥,额... f[i]=min(f[j]+xxxx(i,j)) ;   1<=j<i (O(n^2)暴力)这样一个式子,首 ...

  7. python的知识统计笔记

    python的发展

  8. Mysql 上亿级数据导入Hive思路分享

    前提条件: 数据库容量上亿级别,索引只有id,没有创建时间索引 达到目标: 把阿里云RDS Mysql表数据同步到hive中,按照mysql表数据的创建时间日期格式分区,每天一个分区方便查询 每天运行 ...

  9. 浅谈URL跳转与Webview安全

    学习信息安全技术的过程中,用开阔的眼光看待安全问题会得到不同的结论. 在一次测试中我用Burpsuite搜索了关键词url找到了某处url,测试一下发现waf拦截了指向外域的请求,于是开始尝试绕过.第 ...

  10. PHP过滤数组中的空值

    php对数组的操作已经很完善了,提供给我们很多内置函数用以操作数组,其实可以用array_filter函数对PHP数组中的控制进行过滤 array_filter() 函数用回调函数过滤数组中的值.该函 ...