一、概述

什么是哨兵机制

  • Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

    • 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
    • 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
    • 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
  • 哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master.
  • 每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机Subjective Down,简称sdown).
  • 若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置.
  • 虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel).
  • 哨兵(sentinel) 的一些设计思路和zookeeper非常类似


155609

二、环境配置

2.1 虚拟机

  • 哨兵机制的作用:管理集群redis、监控选举策略、心跳检测,(独立的一个应用程序)
  • 环境配置 实现三台不同服务器的redis实现集群(克隆)
  • 直接先安装一台,后面两台全部克隆
192.168.212.145 主redis服务器
192.168.212.147 从redis
192.168.212.148 从redis

2.2 安装Redis

##下载Redis安装包
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
##解压Redis安装包
tar -zxvf redis-3.2.9.tar.gz
##安装
cd redis-3.2.9
make
cd src
make install PREFIX=/usr/local/redis
##移动配置文件到安装目录下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc ## 修改配置文件
vi /usr/local/redis/etc/redis.conf
## 1. 修改为后台启动
daemonize yes
## 2. 修改密码
requirepass 123456
## 3. 开启外网访问 ,注释掉下面的
## bind 127.0.0.1 ## 开始测试
## 1. 开启redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf ## 2. 连接Redis客户端
./redis-cli -h 127.0.0.1 -p 6379 -a "123456"
PING #结果表示成功 ## 3. 测试完成 ,停止Redis服务
./redis-cli -h 127.0.0.1 -p 6379 -a "123456" shutdown ## ☆☆☆☆注意事项☆☆☆
## 在做主动复制时要关闭Linux防火墙
##1. 临时关闭
systemctl stop firewalld
##2. 禁止开机启动防火墙
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

2.3 配置主从复制

配置主从复制:将从服务器的slaveof 指向主服务器,并设置访问密码
连接客户端之后可以,输入info命令可以查看当前redis的信息,可以看出145为主服务器,148服务器为从服务器:

  • 注意的地方:关闭所有防火墙
  • 如果在集群的时候,之前的主redis同步密码一定要指向。集群的所有服务器都要开启密码

2.4 配置哨兵

我们在从服务器上配置哨兵:

##实现步骤:
##1.将redis根目录下的sentinel.conf 拷贝到etc目录
cp sentinel.conf /usr/local/redis/etc
##2.修改sentinel.conf配置文件,如下配置要修改:
##2.1 sentinel monitor <master-name> <ip> <port> <quorum>
## 主节点名称 IP 端口号 选举次数
## 关于<quorum> 如果设置为1 ,
## 代表至少要有 1 个哨兵认为主节点故障了,
## 才算这个主节点是 客观下线 (odown) 了
sentinel monitor mymaster 192.168.110.133 6379 1
##2.2 sentinel auth-pass <master-name> <password>
## 如果主节点设置了密码,则需要这个配置,否则哨兵无法对主节点进行监控。
sentinel auth-pass mymaster 123456 ##2.3 sentinel down-after-milliseconds <master-name> <times>
## 每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否是可达的
## 如果超过了配置的<times>时间没有收到pong回复
## 就主观判断节点是不可达的,<times>的单位为毫秒
sentinel down-after-milliseconds mymaster 30
##2.4 sentinel parallel-syncs <master-name> <nums>
## 当哨兵节点都认为主节点故障时,哨兵投票选出的leader会进行故障转移,
## 选出新的主节点,原来的从节点们会向新的主节点发起复制,
## 这个配置就是控制在故障转移之后,每次可以向新的主节点发起复制的节点的个数,
## 最多为<nums>个,
sentinel parallel-syncs mymaster 2 # 做多少合格节点
##2.5 sentinel failover-timeout <master-name> <times>
## 这个代表哨兵进行故障转移时如果超过了配置的<times>时间就表示故障转移超时失败。
sentinel failover-timeout mymaster 5000

2.5 测试

  1. 启动哨兵
  2. 启动redis,先启动主redis,后启动从redis(不然哨兵就意味主redis挂掉了)
##1. 进入到bin目录中,启动哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
  • 这个时候启动了三个redis服务器,如果145主服务器挂掉了,主服务器会转移到从服务器上,如果之前的主服务器恢复了,它会变为从服务器。(如果在集群的时候,之前的主redis同步密码一定要指向。集群的所有服务器都要开启密码)

2.6 疑惑(待解决)

  现在我并不知道,配置哨兵的时候是随便配置在那一台服务器上都可以,还是配置在从服务器上,而且如果有哨兵配置的服务器挂掉了,那又会发生什么呢?

【Redis】哨兵机制的更多相关文章

  1. redis 哨兵机制环境搭建

    Redis哨兵机制,一主二从 注:Redis哨兵切换,建议一主多从 一.一主二从 教程步骤:https://www.cnblogs.com/zwcry/p/9046207.html 二.哨兵配置(se ...

  2. 关于Redis哨兵机制,7张图详解!

    写在前面 之前有位朋友去面试被问到Redis哨兵机制,这道题其实很多小伙伴都应该有被问到过!本文将跟大家一起来探讨如何回答这个问题!同时用XMind画了一张导图记录Redis的学习笔记和一些面试解析( ...

  3. Redis哨兵机制的实现及与SpringBoot的整合

    1. 概述 前面我们聊过Redis的读写分离机制,这个机制有个致命的弱点,就是主节点(Master)是个单点,如果主节点宕掉,整个Redis的写操作就无法进行服务了. 为了解决这个问题,就需要依靠&q ...

  4. redis哨兵机制讲解

    原文链接:https://blog.csdn.net/yswKnight/article/details/78158540 一.什么是哨兵机制? 答:Redis的哨兵(sentinel) 系统用于管理 ...

  5. Redis哨兵机制原理

    1.概述 Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案.可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip p ...

  6. redis哨兵机制--配置文件sentinel.conf详解

    转载自 https://blog.csdn.net/u012441222/article/details/80751390 Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis ...

  7. Redis 哨兵机制

    概述 由一个或多个 Sentinel(哨兵)实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的 ...

  8. Redis哨兵机制(sentinel)

    1.简介: 1.是什么: Redis-Sentinel是Redis官方推荐的高可用(HA)方案,当用Reids 做master-slave高可用方案时,假如master宕机了,redis本身(包括它的 ...

  9. 07.初步学习redis哨兵机制

    [ ] 一.哨兵(sentinal)的介绍 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个re ...

  10. redis哨兵机制二(转)

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

随机推荐

  1. vue之手把手教你写日历组件

    ---恢复内容开始--- 1.日历组件 1.分析功能:日历基本功能,点击事件改变日期,样式的改变 1.结构分析:html 1.分为上下两个部分 2.上面分为左按钮,中间内容展示,右按钮 下面分为周几展 ...

  2. PHP 的一些开发规范

    均需要遵守 PSR规范 变量命名 不用拼音 驼峰或下划线风格要一致 单词要有意义 不用关键字 常量全大写用下划线连接 代码注释 尽量让代码可读性提高,减少代码上的注释 函数头部可以描述参数和返回值及功 ...

  3. 以kaldi中的yesno为例谈谈transition

    在基于GMM-HMM的传统语音识别里,比音素(phone)更小的单位是状态(state).一般每个音素由三个状态组成,特殊的是静音(SIL)由五个状态组成.这里所说的状态就是指HMM里的隐藏的状态,而 ...

  4. IDEA+maven搭建scala开发环境(spark)(半转载)

    以下内容部分来自于https://zhuanlan.zhihu.com/p/23141509,我尝试了一遍,然后添加了一些图片.. 其实我觉得在IDEA中使用scala插件然后创建project的时候 ...

  5. Flink 源码解析 —— JobManager 处理 SubmitJob 的过程

    JobManager 处理 SubmitJob https://t.zsxq.com/3JQJMzZ 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1 ...

  6. 做梦也没有想到:Windows 上的 .NET Core 表现更糟糕

    昨天晚上 18:15 左右我们发布了跑在 Windows 上 .NET Core 博客系统,本想与 .NET Framework 版进行同“窗”的较量,结果刚发布上线就发现 CPU 占用异常高,发布不 ...

  7. 熔断器Hystrix

    什么是服务雪崩? 单个服务发生故障,占用过多的系统资源,从而导致级联故障的情况称为服务雪崩. 什么是Hystrix? 在分布式环境中,许多服务依赖项中的一些必然会失败.(服务挂了) Hystrix是一 ...

  8. 多线程与高并发(五) Lock

    之前学习了如何使用synchronized关键字来实现同步访问,Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功 ...

  9. MyBatis的parameterType传入参数类型

    在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的 ...

  10. TensorFlow Object Detection API 迁移学习

    https://blog.csdn.net/ctwy291314/article/details/80999645 https://www.cnblogs.com/gmhappy/p/9472361. ...