Redis架构之哨兵机制与集群

哨兵机制

1、介绍:

Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。(简单来说就是哨兵机制会监视所有的服务器,当主服务器宕机时,会自动将主服务器下的某个从服务器变成新的主服务器,当原来的主服务器恢复后会变成从服务器。就像你部门的主管跑了,然后临时提拔你当主管,而且你干的不错,成为了新主管,原来的主管回来了,当了你的下属。)

2、哨兵架构原理

即使当主服务器宕机的时候会有从服务器来代替主服务器工作,但是还是不能解决单节点并发压力问题以及单节点内存和磁盘物理上限。因为工作的只有一台主服务器,如果数据量大的时候,比如一亿条,那么主服务器的压力就很大。那么我们就会想,既然一台不够,那就多搞几台,这样就会涉及到多台主服务器下数据来了传给谁的问题。由此引出集群架构,设置多台主服务器。

Redis集群

1、集群

Redis在3.0后开始支持Cluster(模式)模式,目前redis的集群支持节点的自动发现,支持slave-master选举和容错,支持在线分片(sharding shard )等特性。

PING PONG协议(心跳机制):节点与节点之间通过心跳机制来维护和连接。也叫ping pong机制,就是我发给你一个ping,你需要给我一个pong来说明我们是连接的,如果没有回复我不能一直等吧,所以会设置一个超时过期时间,假设某个主服务器在这段时间内一直没有回应,视为出现了问题,将由哨兵机制来升级一个从服务器为主服务器。我们之前的ping www.baidu.com也是这种机制,不过内部更为复杂。

2、集群架构图

- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
- 节点的fail是通过集群中超过半数的节点检测失效时才生效.(半数机制,后面hadoop也会说到 )
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
- redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

在前面我们说道,面对传输过来的数据该由哪个节点接收呢。在redis中提供了一个叫槽(Slot)的东西,这个槽覆盖了所有的master节点,每个redis集群中最多有16384个槽,并且将这些槽大致均分给每个主节点。当我们用户端发送一个请求set name bfy 是交给哪一个服务器呢。这时候就会用到CRC16算法,会对key做这个算法,并且返回一个值,这个值的范围就是槽的范围,这个值在哪个节点中就由哪个节点接收。

3、集群搭建

判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点

步骤

  1. 准备环境安装ruby以及redis集群依赖

    yum install -y ruby rubygems
    # https://rubygems.org/gems/redis/versions
    - gem install redis-xxx.gem

  2. 在一台机器创建七个目录

  3. 每个目录复制一份配置文件

    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7000/
    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7001/
    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7002/
    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7003/
    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7004/
    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7005/
    [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7006/
  4. 修改不同目录配置文件

    - port 	7000 .....                		 //修改端口
    - # bind 127.0.0.1 -::1 //开启远程连接
    - protected-mode no
    - daemonize yes //开启守护进程
    - dbfilename dump-7000.rdb //每台机器的文件不能一样
    - cluster-enabled  yes //开启集群模式
    - cluster-config-file  nodes-7000.conf //集群节点配置文件
    - cluster-node-timeout  5000 //集群节点超时时间
    - appendonly  yes //开启AOF持久化
    - appendfilename "appendonly-7000.aof" //修改aof文件名
    - appenddirname "appendonlydir-7000"
  5. 指定不同目录配置文件启动七个节点

    [root@master redis-cluster]# redis-server 7000/redis.conf
    [root@master redis-cluster]# redis-server 7001/redis.conf
    [root@master redis-cluster]# redis-server 7002/redis.conf
    [root@master redis-cluster]# redis-server 7003/redis.conf
    [root@master redis-cluster]# redis-server 7004/redis.conf
    [root@master redis-cluster]# redis-server 7005/redis.conf
    [root@master redis-cluster]# redis-server 7006/redis.conf
  6. 查看进程

    ps aux|grep redis

  7. 创建集群

    redis7.0.0之后的命令:
    redis-cli --cluster create 192.168.137.150:7000 192.168.137.150:7001 192.168.137.150:7002 192.168.137.150:7003 192.168.137.150:7004 192.168.137.150:7005 --cluster-replicas 1

  8. 查看集群状态

    # 1.查看集群状态 check [原始集群中任意节点] [无]
    redis-cli --cluster check 192.168.40.110:7000 # 2.集群节点状态说明
    - 主节点
    主节点存在hash slots,且主节点的hash slots 没有交叉
    主节点不能删除
    一个主节点可以有多个从节点
    主节点宕机时多个副本之间自动选举主节点 - 从节点
    从节点没有hash slots
    从节点可以删除
    从节点不负责数据的写,只负责数据的同步

    使用集群(演示其中一个主节点宕机的状态,然后从节点接管)

    此时7000的从节点7003变成了主节点

  9. 添加一个新节点

    redis-cli --cluster add-node 192.168.137.150:7006 192.168.137.150:7001 --cluster-slave

Redis架构之哨兵机制与集群的更多相关文章

  1. Redis——(主从复制、哨兵模式、集群)的部署及搭建

    Redis--(主从复制.哨兵模式.集群)的部署及搭建 重点: 主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 哨兵和集群都是 ...

  2. Linux07 /redis的配置、五大数据类型、发布订阅、持久化、主从复制、哨兵配置、集群搭建

    Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 目录 Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 ...

  3. 【集群】Redis的哨兵模式和集群模式

    哨兵模式 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障 ...

  4. 实现Redis Cluster并实现Python链接集群

    目录 一.Redis Cluster简单介绍 二.背景 三.环境准备 3.1 主机环境 3.2 主机规划 四.部署Redis 4.1 安装Redis软件 4.2 编辑Redis配置文件 4.3 启动R ...

  5. Redis安装(单机及各类集群,阿里云)

    Redis安装(单机及各类集群,阿里云) 前言 上周,我朋友突然悄悄咪咪地指着手机上的一篇博客说,这是你的博客吧.我看了一眼,是之前发布的<Rabbit安装(单机及集群,阿里云>.我朋友很 ...

  6. Linux下redis 的部署、主从与集群

    老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...

  7. 【架构师之路】集群/分布式环境下5种session处理策略

    [架构师之路]集群/分布式环境下5种session处理策略   转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...

  8. redis之(十八)redis的支持水平扩容的集群特性,以及插槽的相关操作

    [一]主从集群的缺点,客户端分片的缺点 (1)主从+哨兵的redis集群,只是做主从备份,数据冗余的一种处理.但在存储空间的扩展上还是有限制.因为集群中的节点都是存储同样的数据.单一节点的容量,就可以 ...

  9. redis主从复制和哨兵机制

    redis主从复制和哨兵机制 技术标签: redis 1.redis主从复制(master/slave模式) 主数据库可以进行读写操作,当写操作导致数据发生变化时会自动将数据同步给从数据库.而一般情况 ...

随机推荐

  1. [补漏]shift&算法

    题意:regular number 给你一个字符串,要你输出所有(每位都符合要求的)子串,输入时告诉你每位只能填的数集. 思路: bitsetc[x]存每个数字可以存在的字符串位的二进制集合.(如3可 ...

  2. Scalable Multi-Party Private Set-Intersection-解读

    本文记录阅读该paper的笔记. 摘要 本文给出两种MPSI协议,采用的是星型拓扑结构,即有一个leader,需要和其他参与者交互.优点是并非所有各方都必须同时在线: (1)能抗半诚实攻击 通信复杂度 ...

  3. Tomcat启动失败:java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager

    项目开发中发现服务器上Tomcat启动失败 开始定位 第一步:打开tomcat日志catalina.log: 2017-07-25 17:02:43,799 [Catalina-startStop-1 ...

  4. (C++)读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔)

    1 /* 2 程序功能:读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔). 3 例如:当输入985这个数字时,显示如下信息: 4 985是一个3位数字! ...

  5. 【Redis】简单动态字符串SDS

    C语言字符串 char *str = "redis"; // 可以不显式的添加\0,由编译器添加 char *str = "redis\0"; // 也可以添加 ...

  6. 搭建ceph分布式文件系统

      1. 准备4台虚拟机 ceph 192.168.66.93 管理osd,mon节点 ceph-node1 192.168.66.94 osd节点 ceph-node2 192.168.66.95 ...

  7. skywalking链路监控

    1. 下载安装包官网地址:http://skywalking.apache.org/downloads/ 2. tar xzf apache-skywalking-apm-6.5.0.tar.gz - ...

  8. halcon数组的一些使用

    没啥好讲的,这里对于不是数组部分的东西就不进行讲解了. area_center(RegionOpening,Area, Row, Column).使用area_center来求区域的中心和面积时,返回 ...

  9. Android 12(S) 图像显示系统 - drm_hwcomposer 简析(下)

    必读: Android 12(S) 图像显示系统 - 开篇 合成方式 合成类型的定义:/hardware/interfaces/graphics/composer/2.1/IComposerClien ...

  10. spring boot 打包为war包方法

    刚刚接触spring boot,其快速开发的特性吸引我去研究一下.于是我写了个demo,用spring boot内置的tomcat运行的很好,但是我需要把它部署到外部的tomcat中,于是从网上查找资 ...