Redis 哨兵

目录

​编辑

一、哨兵原理

1、集群结构和作用

2、集群监控原理

3、集群故障恢复原理

二、搭建哨兵集群

1、集群结构

 2、准备实例和配置

3、启动

三、RedisTemplate 的哨兵模式


一、哨兵原理

1、集群结构和作用

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:

监控:Sentinel 会不断检查您的master和slave是否按预期工作 

自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主

通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端


2、集群监控原理

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。

客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。


3、集群故障恢复原理

一旦发现 master 故障,sentinel 需要在 slave 中选择一个作为新的 master,那么如何判断选择哪一个 slave 作为新的 master 呢?

首先会判断 slave 节点与 master 节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)

则会排除该 slave 节点 然后判断 slave 节点的 slave-priority 值,越小优先级越高,如果是0则永不参与选举

如果 slave-prority 一样,则判断 slave 节点的 offset 值,越大说明数据越新,优先级越高

最后是判断slave节点的运行 id 大小,越小优先级越高。

当选中了其中一个 slave 作为新的 master 之后,故障转移的步骤是这个样子的:

假设此时 7002 被选中作为新的 master

1、sentinel 给备选的 7002 节点发送 slaveof no one 命令,让该节点成为 master

2、sentinel 给所有其它 slave 发送 slaveof 192.168.150.101 7002 命令,让这些 slave 成为新 master的从节点,开始从新的 master上同步数据。

3、最后,sentinel 将故障节点标记为 slave,当故障节点恢复后会自动成为新的 master 的 slave 节点


二、搭建哨兵集群

1、集群结构

 三个 sentinel 的实例信息如下:

 2、准备实例和配置

先在 tmp 目录下创建好三个文件夹,分别叫 s1 s2 s3

然后我们在 s1 目录中新建一个 sentinel.conf 文件,添加下面内容:

port 27001
sentinel announce-ip 111.229.153.16
sentinel monitor mymaster 111.229.153.16 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"

配置文件的理解:

port 27001 :当前 sentinel 的端口
sentinel monitor mymaster 111.229.153.16 7001 2 :指定主节点信息
mymaster:主节点名称
111.229.153.16 7001 :主节点的 ip 和端口
2 : 选举 master 时的 quorum 值

然后将 s1/sentinel.conf 文件拷贝到 s2、s3 两个目录中

cp s1/sentinel.conf s2
cp s1/sentinel.conf s3

修改 s2、s3 两个文件夹内的配置文件,将端口分别修改为 27002、27003

sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf
sed -i -e 's/27001/27003/g' -e 's/s1/s3/g' s3/sentinel.conf

3、启动

启动 redis 实例:

./redis-sentinel /usr/tmp/s1/sentinel.conf
./redis-sentinel /usr/tmp/s2/sentinel.conf
./redis-sentinel /usr/tmp/s3/sentinel.conf


三、RedisTemplate 的哨兵模式

在 Sentinel 集群监管下的 Redis 主从集群,其节点会因为自动故障转移而发生变化,Redis 的客户端必须感知这种变化,及时更新连接信息。

Spring 的 RedisTemplate 底层利用 lettuce 实现了节点的感知和自动切换。

1、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、在配置文件 application.yml 中指定 sentinel 相关信息

spring:redis:sentinel:master: mymasternodes:- 111.229.153.16:27001- 111.229.153.16:27002- 111.229.153.16:27003

3、配置读写分离

在项目的启动类中,添加一个新的bean:

@Bean
public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}

 这里的 ReadFrom 是配置 Redis 的读取策略,是一个枚举,包括下面选择:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/155624.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为NAT配置实例(含dhcp、ospf配置)

一、网络拓朴如下&#xff1a; 二、要求&#xff1a;PC1 能访问到Server1 三、思路&#xff1a; R2配置DHCP&#xff0c;R2和R1配OSPF&#xff0c;R1出NAT 四、主要配置&#xff1a; R2的DHCP和OSPF&#xff1a; ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…

RabbitMQ消费者的可靠性

目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID 3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制&#xff08;Consumer Acknowledgement&#xff09;。即&#xff1a;当消费者处理消息结束后&#x…

Python构造代理IP池提高访问量

目录 前言 一、代理IP是什么 二、代理IP池是什么 三、如何构建代理 IP 池 1. 从网上获取代理 IP 地址 2. 对 IP 地址进行筛选 3. 使用筛选出来的 IP 地址进行数据的爬取 四、总结 前言 爬虫程序是批量获取互联网上的信息的重要工具&#xff0c;在访问目标网站时需要频…

linux系统的环境变量-搞清环境变量到底是什么

环境变量 引例环境变量常见的环境变量echoexportenvunsetset 通过代码获取环境变量使用第三个参数获取使用全局变量enviorn获取环境变量通过系统调用获取环境变量 环境变量具有全局属性main函数前两个参数的作用 引例 在linux系统中&#xff0c;我们使用ls命令&#xff0c;直接…

python 打印与去除不可见字符 \x00

# 此处不是真实的\x00 被 空格替换了 text "boot_1__normal/ " print(text.strip()"boot_1__normal/") # 打印不可见字符 print(repr(text))>>> False boot_1__normal/\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0…

Prometheus+Grafana

一、Prometheus 获取配置文件 docker run -d -p 9090:9090 --name prometheus prom/prometheusmkdir -p /app/prometheusdocker cp prometheus:/etc/prometheus/prometheus.yml /app/prometheus/prometheus.yml停止并删除旧的容器&#xff0c;重新启动 docker run -d --name…

一带一路10周年:爱创科技加速中国药企国际化征程

“源自中国&#xff0c;属于世界”。 共建“一带一路”倡议提出10周年来&#xff0c;中国与沿线国家经济深度融合&#xff0c;在共商共建共享的基本原则下&#xff0c;“一带一路”形成了国际合作的平台和机制&#xff0c;跨国经济合作已基本形成。 随着“一带一路”合作日益加…

阿里云Apsara云栖大会2023

文章目录 2023/10/312023/11/012023/11/02彩蛋1&#xff1a;神州十六号彩蛋2&#xff1a;emm… 计算&#xff0c;为了无法计算的价值。 2023/10/31 合规性评审 2023/11/01 暂未开始 2023/11/02 暂未开始 彩蛋1&#xff1a;神州十六号 彩蛋2&#xff1a;emm…

Mybatis—基础操作

mybatis入门后&#xff0c;继续学习mybatis基础操作。 目录 Mybatis基础操作准备工作删除操作日志输入预编译SQLSQL注入参数占位符 新增操作基本新增添加后返回主键 更新操作查询操作根据id查询数据封装条件查询条件查询 Mybatis基础操作 准备工作 根据下面页面原型及需求&am…

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接

目录 操作系统介绍 什么是操作系统 常见操作系统 UNIX操作系统 linux操作系统 mac操作系统 嵌入式操作系统 个人版本和服务器版本的区别 安装VMWare虚拟机 VMWare虚拟网卡 ​编辑 配置虚拟网络编辑器 ​编辑 安装配置Windows Server 2012 R2 安装Windows Server 2…

轻量级gif制作工具 GIFfun中文 for mac

GIFfun是一款GIF制作工具&#xff0c;可以帮助用户从照片和视频中创建GIF动画。该软件具有多种功能&#xff0c;例如GIF转视频、视频转GIF、照片转GIF、照片转视频、GIF转JPG、调整GIF大小、PDF转GIF、PDF转JPG、裁剪视频、GIF编辑等。 GIFfun还提供了专业版功能&#xff0c;如…

代数结构上的泛型算法

一&#xff0c;半群算法 //半群 class SemiGroup { public://枚举只去掉1个数&#xff08;v.size()>1&#xff09;&#xff0c;剩下的数做p累积运算的结果template<typename T, typename Tfunc>static vector<T> allExceptOne(vector<T>& v, Tfunc p…