【Redis(5)】Redis哨兵模式配置示例

ops/2024/12/22 18:05:16/

Redis的三种高可用方案对比参考上一篇博客:深入理解Redis三种高可用方案,以做出明智的选择,下面要探讨的是三种方案其中的一种。

在Redis的主从模式中,虽然可以从节点提供读取操作的负载均衡,并且作为数据的热备份,但是这种模式下存在一个关键的问题:主节点故障时需要手动进行故障转移。这不仅增加了系统的停机时间,而且对运维团队提出了较高的要求。为了解决这个问题,Redis引入了哨兵节点这个概念,添加哨兵节点到Redis的架构中是为了提高系统的高可用性。哨兵系统专门设计用来监控Redis主节点和从节点的健康状况,并在主节点发生故障时自动执行故障转移流程。

一、工作原理

Redis哨兵系统与主从复制的工作原理如下:

  1. 主节点(Master_node):处理所有写入操作,并通过复制机制将数据同步给从节点。
  2. 从节点(Slave_node):复制主节点的数据,处理读取操作,为主节点提供数据冗余和读扩展。
  3. 哨兵节点(Sentinel_node):监控主节点状态,当主节点故障时,自动进行故障转移,将一个从节点提升为新的主节点,并更新其他节点的配置。

二、最小节点数

为了实现哨兵系统,你需要至少以下节点:

1个主节点(Master_node)

1个从节点(Slave_node),为了提高可用性和读取性能,通常部署多个从节点。

3个哨兵节点(Sentinel_node),以确保哨兵之间的故障转移选举不会发生平局。

三、配置文件

以下是一个高性能的Redis主节点配置文件示例:

主节点(Master_node)配置 (Master_node.conf):

port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/lib/redis# 最大内存使用量
maxmemory 16gb# RDB持久化配置
save 900 1
save 300 10
save 60 10000# AOF持久化配置
appendonly yes
appendfsync everysec# 主从复制设置
replica-read-only yes# 网络性能优化
tcp-backlog 511
timeout 0

从节点(Slave_node)配置 (Slave_node.conf):

port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
logfile /var/log/redis_6380.log
dir /var/lib/redis_slave# 指定复制的主节点
slaveof <Master_node_IP> 6379# 从节点只读
replica-read-only yes# 其他配置与主节点相似,根据需要调整

哨兵节点(Sentinel_node)配置 (Sentinel_node.conf):

port 26379
daemonize yes
logfile /var/log/redis_sentinel.log
sentinel monitor <Master_node_IP> 6379 2
sentinel down-after-milliseconds <Master_node_IP> 6379 30000
sentinel failover-timeout <Master_node_IP> 6379 180000
sentinel auth-pass <Master_node_IP> 6379 <Master_Password>

四、版本与服务器资源要求

Redis版本:推荐使用Redis 3.x或以上版本,以确保哨兵系统和复制功能的最佳支持。

服务器资源

CPU:至少4核处理器,以保证Redis操作的快速执行。

内存:至少8GB RAM,推荐16GB或更多,以满足maxmemory配置。

磁盘:至少提供等同于内存大小的磁盘空间,用于持久化操作。SSD磁盘可以提供更好的I/O性能。

网络:需要稳定和足够的带宽,以支持节点间的数据同步和哨兵监控。

 

哨兵节点是Redis高可用性架构的重要补充。它们提供了自动的故障检测和转移,无需人工干预,从而提高了Redis在面临主节点故障时的自我恢复能力。在设计Redis系统时,考虑到系统的稳定性和可用性,通常会在主从模式的基础上添加哨兵节点。推荐至少部署三个哨兵节点以确保系统的健壮性和决策的可靠性。


http://www.ppmy.cn/ops/11940.html

相关文章

【muzzik 分享】关于 MKFramework 的设计想法

MKFramework是我个人维护持续了几年的项目&#xff08;虽然公开只有一年左右&#xff09;&#xff0c;最开始由于自己从事QP类游戏开发&#xff0c;我很喜欢MVVM&#xff0c;于是想把他做成 MVVM 框架&#xff0c;在论坛第一个 MVVM 框架出来的时候&#xff0c;我的框架已经快完…

vue-Router 路由(常量路由)

1、安装 pnpm i vue-router 2、新建文件&#xff1a;src/routes.ts import { RouteRecordRaw } from vue-routerexport const constantRoute: RouteRecordRaw[] [{//path: /,redirect: /login,},{//path: /login,component: () > import(/views/Login/index.vue),name…

TypeScript 泛型

泛型 介绍 软件工程中&#xff0c;我们不仅要创建一致的定义良好的API&#xff0c;同时也要考虑可重用性。 组件不仅能够支持当前的数据类型&#xff0c;同时也能支持未来的数据类型&#xff0c;这在创建大型系统时为你提供了十分灵活的功能。 在像C#和Java这样的语言中&…

【后端】python2和python3的语法差异

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为何要了解不同版本的语法差异二、python2和python3的语法差异三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使…

TCP连接被远程主机强制关闭错误判断实例

如果你遇到错误消息 “An existing connection was forcibly closed by the remote host.”&#xff0c;这通常意味着远程服务器&#xff08;即“remote host”&#xff09;非正常地关闭了TCP连接。这可能是因为多种原因&#xff0c;比如服务器遇到了问题、服务器决定断开连接以…

基于C++ DNN部署Yolov8出现的问题记录

代码问题 报错行&#xff1a;net.forward(outputs, net.getUnconnectedOutLayersNames()) 错误展示 错误代码&#xff1a;Exception message: OpenCV(4.8.1) C:\GHA-OCV-2\_work\ci-gha-workflow\ci-gha-workflow\opencv\modules\dnn\src\layers\reshape_layer.cpp:109: err…

基于SpringBoot的“幼儿园管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“幼儿园管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 个人信息界面图 缴费信息管理界…

16.Nacos环境隔离

环境隔离namespace Namespace->Group->Service/Data->集群->实例 Namespace: Group&#xff1a; nacos控制台新增一个开发环境的命名空间&#xff1a;dev, 会产生命名空间的id。 将命名空间的id配置到微服务的配置文件中&#xff1a; spring:cloud:nacos:server…