Redis学习笔记(六、哨兵)
目录:
- 基本概念
- 环境部署
- 哨兵原理
- 哨兵命令
基本概念:
1、什么是哨兵
我们先从字面意思来了解哨兵,哨兵是对执行警戒任务的士兵的统称;在redis中哨兵也是一样,他监控着redis服务器的状态。
2、为什么要有哨兵
当redis主服务器发生故障时我们需要进行故障转移,也就是将从节点晋升为主节点;但这个过程有些繁琐,且容易出错,而且运维人员也不可能一天24小时守着;针对于这一些问题,我们redis的开发人员便创造了哨兵,已解决这类问题。
)哨兵故障转移的过程:发现故障 -> 选出新节点 -> 复制新节点
a、主节点发生故障时,客户端连接主节点失败,其它的从节点与主节点的复制中断
b、当超过一定数量的从节点发现主节点宕机后,会从这些从节点中选举出一个节点,并对其执行slaveof no one命令使其成为一个新的主节点
c、当从节点晋升主节点时会更新应用方主节点信息,并重启应用方
d、其它的从节点会取去复制这个新的主节点,slaveof host port
e、待原来的主节点恢复后,便会复制新的主节点
)自动化故障转移需要解决的问题
a、判断节点不可达的机制是否健全和标准
b、如果有多个从节点,怎样保证只有一个晋升为主节点
c、通知客户端有新的主节点的机制是否健全
3、哨兵架构

环境部署:
方案:一主两从三哨兵

1、文件配置
)配置主节点;启动命令:redis-server redis-6379.conf
# 已守护进程方式运行
daemonize yes
# 配置日志文件
logfile 6379.log
# 配置RDB文件
dbfilename dump-6379.rdb
)配置从节点;启动命令:redis-server redis-6380.conf,redis-server redis-6381.conf
# 已守护进程方式运行
daemonize yes
# 配置日志文件
logfile 6380.log
# 配置RDB文件
dbfilename dump-6380.rdb
# 设置主节点
slaveof 127.0.0.1 6379
6381与6380同理
)配置sentinel节点;启动命令:redis-server sentinel-26379.conf --sentinel
port 26379
daemonize yes
logfile "26379.log"
# 监控127.0.0.1:6379这个主节点,别名sentinel-master,至少2个Sentinel节点认为失败时做故障转移;sentinel monitor <master-name> <ip> <port> <quorum>;;
sentinel monitor yunxi-master 127.0.0.1 6379 2
# 超过指定秒没有收到节点回复,判为故障下线;sentinel down-after-milliseconds <master-name> <times>
sentinel down-after-milliseconds yunxi-master 30000
# 故障转移时的从节点向主节点发起并发复制请求的数量;sentinel parallel-syncs <master-name> <nums>
sentinel parallel-syncs yunxi-master 1
# 故障转移超时时间;sentinel failover-timeout <master-name> <times>
sentinel failover-timeout yunxi-master 180000
2、部署技巧
)为了实现真正的高可用,不要将sentinel节点部署在同一台物理机上,因为如果这台物理机故障的话便会影响所以的sentinel节点
)最少部署3个以上的奇数节点,这样能提高sentinel判断故障的准确性,以及更好的满足票数过半的选举策略
)每个业务场景部署一套sentinel
哨兵原理:
1、哨兵通过三个job组成
)每隔10秒,每个sentinel会向主节点发送info命令,以获取redis节点的当前状态(为什么不需要显示的监控从节点呢,因为主节点的replication中包含了从节点的信息)
)每隔2秒,每个sentinel节点回向redis发送__sentinel__:hello频道上发送自己对主节点的判断及自己节点的信息;同时每个sentinel节点也会订阅改频道,来了解其他sentinel节点对主节点的判断
)每个1秒,sentinel节点回向主节点及其它从节点和sentinel节点发送ping命令做心跳检测
2、主观下线和客观下线
)主观下线:仅自己认为主节点宕机的下线模式
当前sentinel节点发送ping做心跳,若超过down-after-milliseconds还未响应则做主观下线
)客观下线:主节点实际下线
该sentinel会向其他sentinel发送sentinel ismaster-down-by-addr命令,以得知其他sentinel节点对主节点的判断,若超过quorum数量的sentinel都认为主节点已宕机,则sentinel节点会对主节点做客观下线处理
哨兵命令:
Redis学习笔记(六、哨兵)的更多相关文章
- Redis学习笔记六:持久化实验(AOF,RDB)
作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...
- Redis学习笔记六:独立功能之 Lua 脚本
Redis 2.6 开始支持 Lua 脚本,通过在服务器环境嵌入 Lua 环境,Redis 客户端中可以原子地执行多个 Redis 命令. 使用 eval 命令可以直接对输入的脚本求值: 127.0. ...
- redis 学习笔记3(哨兵模式下分布式锁的实现以及全局唯一id的生成)
redis实现分布式锁和全局唯一id应该是较为常见的应用. 实现基于redis的setNX,以及incr命令.还是比较简单的! 搭建环境以及配置好sping整合,做了下测试,有兴趣的载下来看看,自己做 ...
- redis学习笔记(3)
redis学习笔记第三部分 --redis持久化介绍,事务,主从复制 三,redis的持久化 RDB(Redis DataBase)AOF(Append Only File) RDB:在指定的时间间隔 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
- Redis学习笔记(2)——Redis的下载安装部署
一.下载Redis Redis的官网下载页上有各种各样的版本,如图 但是官网下载的Redis项目不正式支持Windows.如果需要再windows系统上部署,要去GitHub上下载.我下载的是Redi ...
- redis 学习笔记-cluster集群搭建
一.下载最新版redis 编译 目前最新版是3.0.7,下载地址:http://www.redis.io/download 编译很简单,一个make命令即可,不清楚的同学,可参考我之前的笔记: red ...
- Redis学习笔记(二) Redis 数据类型
Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
随机推荐
- ubuntu 安装精简桌面; VNC; vncserver 配置
安装最简单的环境: apt-get install gnome-shell apt-get install gnome-panel apt-get install gnome-menus ...
- [Go] Golang中的面向对象
struct interface 就可以实现面向对象中的继承,封装,多态 继承的演示:Tsh类型继承People类型,并且使用People类型的方法 多态的演示Tsh类型实现了接口Student,实现 ...
- 配置环境变量后不生效,显示缓存的旧jdk版本,解决方案
本人一直用jdk1.8版本; 今天安装了jdk11版本, 并配置好了jdk11的环境变量JAVA_HOME : jdk安装路径bin目录的上级目录PATH : %JAVA_HOME% ...
- Vue动态加载图片图片不显示
图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...
- PHP 自带的验证函数 FILTER_VAR()
常见的用法 检查邮箱的格式是否合法 if (filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)) { } 更多相关的 过滤参数: ID 名称 描述 ...
- Day4- Python基础4 深浅拷贝、三目运算、列表生成式,迭代器&生成器、装饰器
本节内容: 1.深浅拷贝 2.三目运算 3.迭代器和生成器 4.装饰器 1.深浅拷贝 拷贝意味着对数据重新复制一份,深浅拷贝的含义就是:对于修改复制的数据是否会影响到源数据,拷贝操作对于基本数据结构需 ...
- AutoCAD配置的Heidi驱动程序未加载
电脑安装的软件越来越多,有的软件也就偶尔使用一下下,于是就找了一个绿化版的AutoCAD,挺好的,可启动时弹出"配置的Heidi驱动程序未加载.切换到默认软件驱动程序". 对于上述 ...
- Codeforces Round #594 (Div. 1)
Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...
- Python程序中的进程操作-进程间数据共享(multiprocess.Manager)
目录 一.进程之间的数据共享 1.1 Manager模块介绍 1.2 Manager例子 一.进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大 ...
- 基于bert的命名实体识别,pytorch实现,支持中文/英文【源学计划】
声明:为了帮助初学者快速入门和上手,开始源学计划,即通过源代码进行学习.该计划收取少量费用,提供有质量保证的源码,以及详细的使用说明. 第一个项目是基于bert的命名实体识别(name entity ...