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. SAM[详细~bushi]

    基础性质概念 后缀自动机:S的SAM是个DAG,每个节点叫状态,每条带字符ch边表示+ch转移,从开始节点往下,任何一条路径都会对应一个S的子串. 不过为什么要叫"后缀"自动机呢? ...

  2. 硬件开发笔记(四):硬件开发基本流程,制作一个USB转RS232的模块(三):设计原理图

    前者   前面建立好的基础的元器件,下面开始设计原理图.   需求 USB转RS232,输出RS232 可以选择性输出5V的TTL 可以选择性输出3.3V的TTL   设计原理图 步骤一:CH340G ...

  3. java基础题(5)

    6.常用API 6.1string类 1.动态字符串 描述 将一个由英文字母组成的字符串转换成从末尾开始每三个字母用逗号分隔的形式. 输入描述: 一个字符串 输出描述: 修改后的字符串 示例1 输入: ...

  4. vivo大规模 Kubernetes 集群自动化运维实践

    作者:vivo 互联网服务器团队-Zhang Rong 一.背景 随着vivo业务迁移到K8s的增长,我们需要将K8s部署到多个数据中心.如何高效.可靠的在数据中心管理多个大规模的K8s集群是我们面临 ...

  5. WindowsServer评估版转为正式版并激活

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月16日. 一般从官网下载的Windows Server版本都是评估试用版本.这时候想转为正式版本,就需要使用转换激活代码.请参照不 ...

  6. WAVE音频格式及及转换代码

    音频信号的读写.播放及录音 python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudio(http://people.csail.mit.edu/hubert/pyaudio).最 ...

  7. java web 三层架构设计

    界面层(表示层):用户看得到的,可以通过此与服务器交互 业务逻辑层:处理业务逻辑. 数据访问层:操作数据存储文件

  8. python素描照片

    #!/usr/bin/python # -*- coding: utf-8 -*- from PIL import Image import numpy as np a = np.asarray(Im ...

  9. UiPath从入门到精通视频教程

    匠厂出品,必属精品   Uipath中文社区qq交流群:465630324 微信小程序搜索RPA之家小店可以购买相关RPA的课程,现在联系有优惠 官网:https://rpazj.com uipath ...

  10. Mybatis中@select注解联合查询

    前言 在项目中经常会使用到一些简单的联合查询获取对应的数据信息,我们常规都是会根据对应的mapper接口写对应的mapper.xml的来通过对应的业务方法来调用获取,针对这一点本人感觉有点繁琐,就对@ ...