用sentinel作Redis集群,总结下自己遇到的坑,以及探讨下改如何设置哨兵模式

2024-06-22 11:32

本文主要是介绍用sentinel作Redis集群,总结下自己遇到的坑,以及探讨下改如何设置哨兵模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先写总结

1.sentinel 的配置文件要配置master的密码:sentinel auth-pass mymaster phFUND_linux_redis。

2.为了主从能自由切换请给主从都配置好密码,而且要设置相同的密码(完成切换后,因为从没有配置masterauth,导致重启后连接不上主):

masterauth "phFUND_linux_redis"

requirepass "phFUND_linux_redis"

3.因为使用了别人的配置文件,在主从切换时一直超时,所以强烈建议各位在部署时,使用该版本redis自带的配置文件进行配置,且一定要保证配置项的顺序和原版保持一致。针对自己的需要修改配置项。如果不一致,可能会报错。

4.会看sentinel的日志。:

 +try-failover master mymaster 172.**.**.117 6379(开始尝试进行failover)
 +vote-for-leader e2a313dd66f8e8df829628d4580d77f840ebb068 4(sentinel配置文件中的myid,确认leader sentinel)
 +elected-leader master mymaster 172.**.**.117 6379(已存在的master节点)
 +failover-state-select-slave master mymaster 172.**.**.117 6379(分析master的slave状态)
 +selected-slave slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(已选出一个原master的slave)
 +failover-state-send-slaveof-noone slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(将新的slave进行主从切换)
 +failover-state-wait-promotion slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(等待slave升级中)
 +promoted-slave slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(升级完成)
 +failover-state-reconf-slaves master mymaster 172.**.**.117 6379(重写原master的配置文件)
 +slave-reconf-sent slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
 +slave-reconf-inprog slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
 +slave-reconf-done slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
 +slave-reconf-sent slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
 +slave-reconf-inprog slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
 +slave-reconf-done slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
 +failover-end master mymaster 172.**.**.117 6379(failover结束)
 +switch-master mymaster 172.**.**.117 6379 172.**.**.117 7379(slave节点已经升级为master)
 +slave slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 7379(为新的master节点确认slave节点)
 +slave slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 7379(为新的master节点确认slave节点)
 +slave slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(为新的master节点确认slave节点)
 +sdown slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(原master节点变为slave,且主观下线)
 -sdown slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(重启了,恢复状态)
 +convert-to-slave slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(已转换为新master 的slave)

5.sentienl常用命令:1)进入sentinel : redis-cli -h <IP> -p <port> 。2)查看集群所有master的状态:sentinel masters 。 3)查看某个master的所有slave:sentinel slaves <mastername> 4)Ssentinel failover <master name> 强制进行一次故障转移,并通知其他sentinel转移情况。

6.sentinel的配置:

port 26379
protected-mode no(允许所有地址的访问,如果是yes则只允许本机,默认是yes。文档显示设置了bind和密码的话该设置不会生效)
logfile "/home/session/redis/logs/redis_26379.log"(日志地址,如果配置了该地址,则不会打印堆栈。)

sentinel myid e2a313dd66f8e8df829628d4580d77f840ebb068(sentinel的唯一ID)
sentinel monitor mymaster 172.18.50.117 7379 1

sentinel down-after-milliseconds mymaster 30000(多少毫秒判定master宕机)                                                                              sentinel parallel-syncs mymaster 1(同步时允许最多几台slave同步master,数字越小同步时间越久,在同步的过程中不能提供服务,所以配置大了也不好,依情况而定)

daemonize yes(守护线程模式)

dir "/tmp"

# Generated by CONFIG REWRITE
maxclients 4064(自动生成,也可以自己配置)
sentinel failover-timeout mymaster 150000(多少毫米未切换完成则判定失败)
sentinel auth-pass mymaster phFUND_linux_redis(密码要配置)
sentinel config-epoch mymaster 4(自动生成)
sentinel leader-epoch mymaster 4(自动生成)
sentinel known-slave mymaster 172.18.50.117 6379(自动生成)
sentinel known-slave mymaster 172.18.50.117 7381(自动生成)
sentinel known-slave mymaster 172.18.50.117 7380(自动生成)
sentinel current-epoch 4(自动生成)

 

项目和环境介绍

因为公司的测试环境的Redis老是挂,导致系统启动报错。一直没人管,所幸我自己看看。

问题:一台master挂掉,无法进行故障转移,不能选举从。

先上个测试环境的架构图: 

分片规则是在应用层实现的,比较简单,直接用hash值对接连数取模计算节点,没有用一致性hash,扩展性很差。

而且,一个哨兵监控了两个master,实在不明白如果请求sentinel它到底会把请求发给哪个master。

即便可以,也不建议这样配置,一个哨兵挂了,会导致两个主从集群的监控都出问题。

建议用这个作者的设置:https://blog.csdn.net/men_wen/article/details/72724406。

因为测试环境只有两台服务器,一般哨兵不太可能会挂,所以我改成了如下:

这篇关于用sentinel作Redis集群,总结下自己遇到的坑,以及探讨下改如何设置哨兵模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084161

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十