Redis哨兵TILT模式问题解决方案

news2024/11/20 23:37:30

Redis sentinel的TILT影响范围

Redis版本影响范围:5、6、7版本

部署方式为k8s部署,都会受到影响,裸金属部署没有问题

当redis哨兵集群进入TILT模式后,业务无法正常连接到redis集群,无法正常使用redis集群。

TILT 模式:倾斜模式

TILT 模式是一种保护模式,当计算机发生严重的故障或灾难时,系统会进入这种模式,禁止除了监控之外的所有操作。在 Redis Sentinel 的上下文中,由于 Sentinel 的大多数操作依赖于时间同步,因此进入 TILT 模式表明 Sentinel 的时间可能存在问题,这使得 Sentinel 的判断变得不可靠。

在 TILT 模式下,Sentinel 除了发送必要的 PING 和 INFO 命令外,不会主动执行其他任何操作,例如主备倒换、标记主观或客观下线等。尽管如此,Sentinel 仍可以通过接收 INFO 命令和发布订阅连接中的 HELLO 消息包来获取外部信息,并据此更新自身的状态。这一模式将持续 SENTINEL_TILT_PERIOD 时长,默认为 30 秒。在此期间内,我们可以认为 TILT 模式是 Sentinel 的被动模式。

Redis集群影响

当 Sentinel 处于“TILT mode”时,会对 Redis 集群产生以下影响:

  1. 可靠性降低:
    Sentinel 无法正常监视 Master 和 Slave 节点的健康状况,可能导致故障检测不及时。
    故障转移机制失效,Master 节点发生故障时无法自动切换到 Slave 节点,影响集群的高可用性。
  2. 性能下降:
    Sentinel 进程频繁重启或资源不足可能导致集群整体性能下降。
    监控指标异常可能提示系统存在潜在的性能瓶颈。
  3. 维护复杂度增加:
    Sentinel 进程的异常状态增加了维护的复杂度,需要排查具体原因并采取相应措施。

方案验证

  1. 组件使用helm 部署bitnami封装出来的部署有问题,请bitnami开发自行排查!
  2. redis域名和ip什么样的情况下会导致redis集群出现偏移? 已看完redis 源码,如下原因会导致哨兵偏移:
    (1) 服务器或者容器时间紊乱, 对应条件负数;
    (2) 哨兵实例慢, 导致eventloop时间间隔长, 超过了2秒, 对应条件delta>2000ms

应急方案

前置条件:
1、若仅仅是哨兵出现问题,主从没问题采用5.1进行恢复
2、若主从已无法切换,采用方案5.2进行恢复
3、若重启过程出现warn警告信息“TCP backlog setting of 511”采用方案5.3进行恢复
4、若以上方案都不能解决此问题,可采用方案5.4进行恢复,且需要业务层代码支持

说明: TILT判断依据为,pod日志会有如下信息: “tilt mode exited” TCP backlog报错,日志会有如下信息:
在这里插入图片描述

滚动重启

滚动重启setinel pod节点(最好飘逸到其他node,避免node本身问题影响):

kubectl rollout restart -n <命名空间> <statefulset 或者 deployment>

如 Kubectl get pod -n <命名空间> 查看运行状态,
如图:
在这里插入图片描述

哨兵状态:
在这里插入图片描述

Redis实例集群状态:
在这里插入图片描述

以上为表明正常运行。

手动切换主从

手动恢复master-slaves集群,也即手动执行哨兵故障转移流程:
A)、按部署时的配置,更新redis哨兵节点配置(部署的yaml文件);

master配置(仅供参考,请以实际为准)如下:
在这里插入图片描述

Slave配置(仅供参考,请以实际为准)如:
在这里插入图片描述

B)、而后,启动master-slaves集群节点,验证集群状态,执行:
命令info replication
如下图:
在这里插入图片描述

C)、临时将业务连接的svc绑定到master节点ip,如下图,假设redis-sentinel-node-0为master服务节点,可按照图示操作;
在这里插入图片描述

修改系统参数

若redis哨兵启动报WARNING:“The TCP backlog setting of 511 cannot be enforced”问题,

编辑容器内 /etc/sysctl.conf添加net.core.somaxconn= 1024,执行sysctl -p验证是否添加成功。

验证时间同步问题

关闭时间同步,同时观察sentinel是否还有“tilt mode exited”

#关闭自动同步时间
timedatectl set-ntp no  

发现再无“tilt mode exited”日志产生

重启自动时间同步

#开启自动同步时间
timedatectl set-ntp yes

修改副本数

若以上解决方案失效,请将sentinel的三节点,可以将其中两个的sentinel的replicas由1改为0,
可通过命令:

kubectl scale --replicas=0 deployment sentinel-1 -n paas-middleware,kubectl scale --replicas=0 deployment sentinel-2 -n paas-middleware,(假设deployment的名字为sentinel-1,sentinel-2)保留一个,形成sentinel为单节点,
同时:
将sentinel monitor个数由2改成1,
将sentinel parallel-syncs 由2改成1。

官方参考

titl-mode也是redos的sentinel的保护机制,TITL模式是redis的一种保护模式,计算机发生严重的事情或者灾难的时候,会进入这个模式,禁止除了监控之外的操作,而且因为redis sentinel一般操作都是依赖时间,进入TITL模式则说明他的时间也有可能有问题,那这个sentinel的判断就不可信了。

处于该模式下Sentinel除了发送必要的PING及INFO命令外,不会主动做其他操作,例如主备倒换,标志主观、客观下线等。但可以通过INFO 命令及发布订阅连接的HELLO消息包来获取外界信息并对自身结构进行更新,直到SENTINEL_TILT_PERIOD时长(默认为30s)结束为止,我们可以认为Tilt模式是Sentinel的被动模式。
在这里插入图片描述

参考连接:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/#tilt-mode
issues:https://github.com/bitnami/charts/issues/9689

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你用过最好用的AI工具有哪些?探寻用户心中的最爱与最佳

随着人工智能技术的飞速发展&#xff0c;AI 工具如雨后春笋般涌现&#xff0c;广泛应用于各个领域。在 10 月 8 日至 10 月 27 日这段时间里&#xff0c;我们深入探讨了人们在使用 AI 工具时的偏好和体验&#xff0c;旨在揭示那些最受用户喜爱以及被认为最好用的 AI 工具&#…

构造函数

引入&#xff1a;构造函数的由来 对于以下Date类&#xff1a; class Date { public:void Init(int year, int month, int day){year year;_month month;_day day;}void Print(){cout << _year << "-" << _month << "-" <&…

STL源码剖析:STL算法

STL 算法总览 质变算法 mutating algorithms—会改变操作对象之值 所有的 STL算法都作用在由迭代器(first,last)所标示出来的区间上。所谓“质变算法”,是指运算过程中会更改区间内(迭代器所指)的元素内容。诸如拷贝(copy)、互换(swap)、替换(replace)、填写(fill)、删除(remov…

吐槽kotlin之垃圾设计

本文重点在于吐槽垃圾设计&#xff0c;基本直只说缺点。 一.没有static关键字 static其实不是很面向对象&#xff0c;但是是很有必要和方便的。 kotlin为了实现java的static功能&#xff0c;必须使用伴生类&#xff0c;一般情况下没啥问题&#xff0c;但是反编译之后的class多…

数据结构与算法——Java实现 36.求数据流中位数

就借着月光&#xff0c;再与你对望 —— 24.10.14 295. 数据流的中位数 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 …

Java jconsole.exe 调试工具

寻找JDK所在路径&#xff1a; 打开 jconsole.exe 启动之前确保idea程序已经运行了有的同学需要用管理员方式运行&#xff0c;即 右键 jconsole.exe 选择用管理员方式运行 上面的折线图&#xff0c;表示随着时间有哪些线程 下面的左边的线程中&#xff1a;Thread tnew MyThre…

【Java数据结构】链表面试题

【Java数据结构】链表面试题 一、移除链表元素二、反转链表三、链表的中间结点四、删除链表的倒数第 N 个结点五、合并两个有序链表六、链表分割七、链表的回文结构八、相交链表九、环形链表 此篇博客希望对你有所帮助&#xff08;帮助你更加了解链表&#xff09;&#xff0c;不…

stm32 为什么有2个晶振?8mhz+32.768k

1个是系统时钟晶振是单片机内部系统的主时钟源&#xff0c;它负责控制整个系统的时钟频率。这个晶振的频率一般比较高&#xff0c;通常在几十MHz到几百MHz不等。它和CPU以及各种总线之间相互配合&#xff0c;从而协同工作。 另外一个是外设时钟晶振则通常用于单片机的内部外设…

pnpm报错 cannot find package xxx,有的电脑正常运行,只有这个的电脑报错

pnpm build报错 cannot find package xxx&#xff0c;有的电脑正常运行&#xff0c;只有这一个报错 在网上查找各种资料发现是项目在电脑里的目录层级比较深导致的。 问题&#xff1a;在 Windows 系统上&#xff0c;文件路径过长&#xff08;超过 260 个字符&#xff09;可能…

2024年10月14日读书笔记第三篇-

我们继续学习 自下而上思考&#xff0c;总结概括 如果你将所有的信息进行归类分组、抽象概括&#xff0c;并以自上而下的方式表达出来&#xff0c;那么你的文章结构会如图1-3所示。每个方框代表你希望表达的一个思想。 你的思维从最底部的层次开始构建&#xff0c;将句子按照某…

CUDA 事件计时

CUDA 事件 可以为主机代码和设备代码计时。 基本的语法 // 定义事件变量 cudaEvent_t start, stop; // 初始化 cudaEventCreate(&start); cudaEventCreate(&stop); // 记录代表时间开始的事件&#xff0c;注意不是地址 cudaEventRecord(start); // 在TCC的驱动下可以…

【网络安全】1,600$:Auth0 错误配置

未经许可,不得转载。 文章目录 前言正文漏洞案例修复建议前言 Auth0 是一个广泛用于网站和应用程序的身份验证平台,负责管理用户身份并确保其服务的安全访问。该平台提供了多种工作流程,以无缝集成登录和注册流程。 在 Auth0 中创建新应用时,注册选项默认启用。当系统禁用…

Go 1.19.4 命令调用、日志、包管理、反射-Day 17

1. 系统命令调用 所谓的命令调用&#xff0c;就是通过os&#xff0c;找到系统中编译好的可执行文件&#xff0c;然后加载到内存中&#xff0c;变成进程。 1.1 exec.LookPath&#xff08;寻找命令&#xff09; 作用&#xff1a; exec.LookPath 函数用于在系统的环境变量中搜索可…

【每日刷题】Day139

51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; //思路&#xff1a;DFS哈希。 //本题的难点就在于剪枝操作。 class Solution { public: int n; vector<vector<string>> ans; vector<string> path; bool cols[10], dig1[20], dig2[20]; void dfs(int ro…

【无标题】基于情境依赖因果影响的多智能体协作强化学习

、文章探讨了大型语言模型&#xff08;LLMs&#xff09;&#xff0c;例如GPT-4&#xff0c;是否以及在何种意义上拥有知识。作者认为&#xff0c;这些模型展现了一种称为“工具性知识”的能力&#xff0c;这种知识允许它们根据输入上下文推断任务结构&#xff0c;并在此基础上进…

appium启动hbuild打包的apk异常解决

目录 一、错误信息 二、问题解决 2.1 通过以下命令获取安装包名称&#xff1a; 2.2 这个launcher状态下的安装包名称和active&#xff0c;替换原先的安装包名称 一、错误信息 通过adb shell dumpsys activity | findstr "mResume" 命令获取的安装包信息&#xff…

2024年公路水运工程施工企业主要负责人证模拟考试题库及公路水运工程施工企业主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年公路水运工程施工企业主要负责人证模拟考试题库及公路水运工程施工企业主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;公路水运工程施工企业主要负责人证模拟考试题库是根据公路水运工程施…

芯课堂 | 使用 SWM341 系列 MCU 环境配置

SWM341系列MCU调试环境配置 SWM341 是华芯微特的其中一款 MCU&#xff0c;341 和 341内置 SDRAM 的 34S 系列&#xff0c;其内核相同。 芯片使用安谋科技“星辰”STAR-MC1 内核,基于 Arm-V8 指令集架构&#xff0c;下载烧录选 M33&#xff0c;对应的工具需要升级; 1、使用 KE…

MySQL中库的操作

目录 前言 一、查看数据库 1.1、语法 二、创建数据库 2.1、语法 2.2、自定义⼀个数据库 2.2.1、创建一个名为“aokey”的数据库 三、字符集编码和校验(排序)规则 3.1、查看数据库支持的字符集编码 3.2、查看数据库支持的排序规则 3.3、不同的字串集与排序规则对数…

芯片供电引脚为什么要放一个104电容?

每个芯片的电源都要接一个104电容是为什么? 这颗电容叫高频旁路电容&#xff0c;作用就是把电源中的高频杂波对地短路防止高频污染&#xff0c;降低电源输入对芯片的影响。 接地滤波电容&#xff0c;如果没有&#xff0c;杂波干扰非常大&#xff0c;有了这个滤波电容&#x…