Sentinel(哨兵),顾名思义就是站岗放哨的,是redis提供的高可用解决方案,它是对主从模式的优化升级,在主从模式下,如果主库发生宕机,需要人工介入将某个从节点提升为主库,同时需要修改应用配置的主节点地址,而在Sentinel模式下,每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、Master、Slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间内未得到回应,会对节点做下线标识,如果被标识的是主节点,它还会与其他Sentinel节点进行协商,当多数派都认为主节点不可达时,它们会选举出一个Sentinel节点来完成故障转移的工作,同时会通知应用方主节点已经发生转移。下面我们就来搭建一个Sentinel集群。

安装部署

环境准备

在这里我们使用的是Redis 4.0.10,在一台服务器上启动三个server来模拟一主两从的架构,redis的安装过程这里就不在演示了,可以参考文章【redis】部署及参数详解(吐血整理,建议收藏)。

部署过程

启动主节点

修改配置文件

/usr/local/redis/etc/redis_6377.conf,主要注意以下几个参数

port 6377

daemonize yes

logfile "/redis_data/log/redis_6377.log"

dir "/redis_data/data/6377"

dbfilename "dump_6377.rdb"

执行启动命令

redis-server /usr/local/redis/etc/redis_6377.conf

通过redis客户端连接测试

redis-cli -h 127.0.0.1 -p 6377

127.0.0.1:6377> ping

PONG

启动从节点

从节点配置文件和主节点配置文件的主要区别是将6377改成从节点对应的端口号,本次实验两个从节点的端口号分别为6378和6379。同时配置需要同步的主节点的IP和端口。

slaveof 127.0.0.1 6377

启动从节点

redis-server /usr/local/redis/etc/redis_6378.conf

redis-server /usr/local/redis/etc/redis_6379.conf

确认主从是否生效

[redis@localhost etc]$ redis-cli -h 127.0.0.1 -p 6377 info replication

Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6378,state=online,offset=308,lag=0

slave1:ip=127.0.0.1,port=6379,state=online,offset=308,lag=1

启动Sentinel节点

Sentinel节点至少3个且奇数,这样才能在协议中形成多数派。配置Sentinel节点配置文件/usr/local/redis/sentinel-26377.conf,主要注意以下参数

port 26377

dir "/redis_data/data/26377"

logfile "/redis_data/log/redis-26377.log"

#配置主节点的IP和端口,2代表主节点判断失败至少需要2个Sentinel节点同意,一般设置为Sentinel节点数的一半加1.

sentinel monitor mymaster 127.0.0.1 6377 2

#30秒ping不通主节点的信息,主观认为master宕机

sentinel down-after-milliseconds mymaster 30000

#故障转移时从节点同时向新主发起复制请求的数量,1代表从节点会轮询发起复制。

sentinel parallel-syncs mymaster 1

#故障转移开始,180秒内没有完成,则认为转移失败

sentinel failover-timeout mymaster 180000

启动Sentinel节点

redis-sentinel sentinel-26377.conf

redis-sentinel sentinel-26378.conf

redis-sentinel sentinel-26379.conf

通过Sentinel节点查看哨兵是否生效

[redis@localhost redis]$ redis-cli -h 127.0.0.1 -p 26377 info Sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=mymaster,status=ok,address=127.0.0.1:6377,slaves=2,sentinels=3

至此,Sentinel模式的redis集群搭建就完成了。

故障转移

模拟主库宕机,通过kill命令杀死主库,查看故障转移情况:

128.127.0.0.1:26377> info sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=mymaster,status=ok,address=127.0.0.1:6378,slaves=2,sentinels=3

可以看到master改为127.0.0.1:6378了。

故障转移的大体步骤如下:

每个Sentinel节点每隔1秒对主、从、其他Sentinel阶段发送ping探测,超过down-after-milliseconds未返回响应,则判断该节点主观下线。

Sentinel节点向其他Sentinel节点询问对于异常节点的判断,当达到 quorum个sentinel节点都认为被主观下线的节点异常时,则对该节点做客观下线。

在sentinel节点中通过Raft算法选举出一个leader来完成故障转移。

当出现故障的节点是主节点时,sentinel leader会根据优先级、复制偏移量、runid等在从节点中选出一个作为主节点,执行slaveof no one命令。

leader向其他从节点发送指令,让他们成为新主的从节点,并将原来的主节点更新为从节点,当旧主恢复后去复制新主的数据。

复制完成后,发布主节点的切换消息。

mysql哨兵模式_redis 哨兵模式集群搭建相关推荐

  1. RocketMq02_复制刷盘、Broker常用模式、磁盘阵列、集群搭建

    文章目录 ①. 单机版本安装与启动 ②. 控制台的安装与启动 ③. 复制刷盘.Broker集群模式 ④. 磁盘阵列 - RAID ⑤.JBOD.RAID0 ⑥. RAID1.RAID10.01 ⑦. ...

  2. MySQL NDB Cluste-分布式数据库集群搭建

    1 概述 1.1 分布式数据库集群 Mysql cluster是适用于分布式计算环境的高可用.高冗余版本的mysql,其技术在分布式系统中为mysql数据提供了冗余特性,增强了安全性,使得单个mysq ...

  3. Spark3 Standalone模式分布式集群搭建

    Spark3 Standalone模式分布式集群搭建 一.安装Spark3 二.配置Spark3环境变量 三.修改Spark3基本配置文件 四.从节点配置 五.配置Spark3系统环境变量 六.重命名 ...

  4. zookeeper专题:zookeeper集群搭建和客户端连接

    文章目录 1. Zookeeper 集群模式介绍 2. zookeeper 集群搭建 3. 使用curate客户端连接zookeeper集群 1. Zookeeper 集群模式介绍 Zookeeper ...

  5. redis入门及其集群搭建、哨兵模式

    一.Nosql概述 1.为什么要用Nosql 1.1 单机 MySQL 的美好时代 来源博客(https://www.cnblogs.com/lukelook/p/11135209.html) 在90 ...

  6. Redis 主从集群搭建及哨兵模式配置

    Redis 主从集群搭建及哨兵模式配置 最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 ...

  7. Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式

    redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...

  8. MySQL集群搭建--多主模式

    MySQL集群搭建--多主模式 本文使用的是Galera搭建的MYSQL集群,实现的是每个MYSQL都是主服务器,不存在主从之分. 环境: 三台mysql5.7服务器. 安装mysql集群: 安装前准 ...

  9. springboot配置Redis哨兵主从服务 以及 Redis 集群

    redis哨兵集群配置 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从 ...

  10. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)

    摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...

最新文章

  1. python 选择排序算法
  2. 帆软正则表达式定义规则
  3. c语言中如何取消最后一个空格,新人提问:如何将输出时每行最后一个空格删除...
  4. python循环for...in_python循环while和forin实例
  5. 三种banner基础形态
  6. intellij Find Usage 查找符号使用快捷键alt + f7在ubuntu下无法使用的解决方法
  7. SQL数据查询之——嵌套查询
  8. 支持向量机(SVM)非线性数据切割
  9. 【开源】在线教育系统.net源码-PC端-手机端
  10. Oracle 数据库增删改查
  11. 大众点评字体解密(最新)2020/4/17
  12. POS收银系统报EFI Shell version 2.00错误
  13. IOS开发-ERROR ITMS-90096: Your binary is not optimized for iPhone 5
  14. 矩阵论(一):广义逆矩阵(上)
  15. 阿里云---云开发平台的创建与部署
  16. 关于生僻字乱码的问题
  17. multisim电流探棒怎么改变方向?MULTISIM电流探
  18. 游戏开发物语安卓!Android彻底组件化方案实践方法!快来收藏!
  19. png转svg格式并上传至iconfont
  20. 2021上半年程序员新书大盘点

热门文章

  1. linux中文显示为乱码
  2. 矩阵求导公式的推导和计算(公式推导法)
  3. 互联网加速职场变革 大数据催生业界十大热门职业
  4. shecodject生成免杀木马,一步过360、火绒
  5. 前端应届生面试技巧,没有项目经验怎么应对?
  6. PS像素,分辨率的概念
  7. cursor游标讲解
  8. STM32配合火焰传感器的火灾报警
  9. 甘特图是什么意思?甘特图制作步骤教程
  10. vue项目中金额小写转换为汉字大写的功能封装