【Redis(6)】Redis集群模式配置示例

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

在构建高性能缓存系统时,Redis以其卓越的速度和灵活性成为首选。然而,传统的哨兵模式和主从复制模式虽然提供了基本的高可用性和读写分离,但在面对大规模数据和高并发时显得有点力不从心。本文将探讨Redis集群模式如何打破这些局限,详细介绍其工作原理、配置要求,以及启动和监控策略。

一、为什么不采用哨兵模式和主从复制模式?

  • 写入性能瓶颈:在主从复制模式中,所有写入操作都必须在主节点上执行,这可能成为性能瓶颈。
  • 容量限制:单个Redis实例的存储容量有限,随着数据量的增长,扩展存储成为一个问题。
  • 故障转移延迟:尽管哨兵系统提供了自动故障转移,但转移过程本身存在延迟,可能影响服务的连续性。

Redis集群模式的引入为了解决上述问题,Redis集群模式被设计为提供自动分区、线性扩展能力和内置的高可用性。

二、Redis集群模式工作原理

Redis集群通过数据分片(sharding)和复制来实现高可用性和负载均衡。数据被分布在多个节点上,每个节点负责存储一部分数据(称为槽或slots)。集群中的每个主节点都可以处理写入操作,并且每个主节点都可以有一个或多个从节点。

  1. 数据分片:集群共有16384个槽,每个槽分配给一个主节点。
  2. 主节点负责写入:每个主节点负责其分配的槽的写入操作。
  3. 从节点复制和故障转移:从节点复制主节点的数据,并在主节点故障时自动进行故障转移。

三、最小节点数

Redis集群至少需要3个主节点和3个从节点来保证高可用性和故障转移。这是最小配置,实际部署时可能会需要更多节点。

四、配置文件

以下是两个主节点和两个从节点的高性能配置文件示例:

主节点1配置 (redis_cluster_master_1.conf):

port 7000
daemonize yes
pidfile /var/run/redis_7000.pid
logfile /var/log/redis_7000.log
dir /var/lib/redismaxmemory 8gb
maxmemory-policy allkeys-lruappendonly yes
appendfilename "appendonly.aof"
appendfsync everyseccluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000cluster-announce-ip <Master1_IP>
cluster-announce-port 7000
cluster-announce-bus-port 12001

主节点2配置 (redis_cluster_master_2.conf):

port 7001 # ...其他配置与主节点1相似,端口号不同

从节点1配置 (redis_cluster_slave_1.conf):

port 7002
daemonize yes
pidfile /var/run/redis_7002.pid
logfile /var/log/redis_7002.log
dir /var/lib/redis_slaveslaveof <Master1_IP> 7000
slave-read-only yes# ...其他配置与主节点相似,根据需要调整

从节点2配置 (redis_cluster_slave_2.conf):

port 7003 # ...其他配置与从节点1相似,端口号和slaveof指令指向的主节点不同

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

Redis版本:推荐使用Redis 3.2或以上版本,以确保集群模式和复制功能的最佳支持。

服务器资源

CPU:至少4核处理器。

内存:至少8GB RAM,根据集群节点的数量和数据量进行调整。

磁盘:至少提供等同于内存大小的磁盘空间,推荐使用SSD以提高I/O性能。

网络:需要稳定和足够的带宽,以支持节点间的数据同步和集群通信。

六、启动和初始化Redis集群

启动Redis集群节点

  1. 为每个节点配置:确保每个节点的配置文件(包括主节点和从节点)都已正确设置,包括端口号、持久化选项、集群配置等。

  2. 启动Redis服务:在每个节点上,使用对应的配置文件启动Redis服务。例如,对于主节点1,可以使用以下命令:

    redis-server /path/to/redis_cluster_master_1.conf
  3. 验证节点状态:检查每个Redis节点是否成功启动并且没有错误日志。

初始化Redis集群

  1. 使用redis-cli --cluster create命令:这个命令可以帮助你一次性创建整个集群。你需要为命令提供所有主节点的信息。例如:

    redis-cli --cluster create 
    <IP1>:7000 
    <IP2>:7001 
    <IP3>:7002 --cluster-replicas 1

    这里<IP1>:7000<IP2>:7001<IP3>:7002是三个主节点的IP地址和端口,--cluster-replicas 1表示每个主节点后面跟随着一个从节点。

  2. 处理提示:在执行上述命令时,Redis会提示你进行一些操作,如确认槽(slots)的分配,或者当从节点需要提升为主节点时进行确认。

  3. 检查集群信息:使用以下命令检查集群的状态和配置是否正确:

    redis-cli --cluster info

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

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

相关文章

STL分解

效果图 ref&#xff1a;时序数据分析的利器——STL分解 - 知乎 (zhihu.com)

2024化工制造企业数字化白皮书

来源&#xff1a;蓝凌研究院 中国石油和化学工业联合会发布2023年中国石油和化工行业经济运行情况。数据显示&#xff0c;2023年&#xff0c;我国石化行业实现营业收入15.95万亿元&#xff0c; 同比下降1.1%&#xff0c;利润总额8733.6亿元&#xff0c;行业经济运行总体呈现低…

2024蓝桥杯每日一题(数学期望)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;收集卡牌 试题二&#xff1a;爬树的甲壳虫 试题三&#xff1a;绿豆蛙的归宿 试题四&#xff1a;扑克牌 试题一&#xff1a;收集卡牌 【题目描述】 小林在玩一个抽卡游戏&#xff0c;其…

MySQL-笔记-06.数据高级查询

目录 6.1 连接查询 6.1.1 交叉连接&#xff08;cross join&#xff09; 6.1.2 内连接&#xff08;inner join&#xff09; 6.1.3 外连接&#xff08;outer join&#xff09; 6.1.3.1 左外连接&#xff08;left [outer] join&#xff09; 6.1.3.2 右外连接&#xff08;rig…

LeetCode 1378、1277、2944

1378 二级排序&#xff0c;compare函数必须是static的 class Solution { public:struct node {int val;int priority;};static bool compare(const node &n1, const node &n2) {if (n1.priority n2.priority) {return n1.val < n2.val;}return n1.priority < n…

VSCode 目录折叠展开、缩进深度设置

1、VSCode 目录折叠展开设置 运行 Visual Studio Code &#xff0c;按 Ctrl &#xff0c;打开设置 输入Explorer:Compact Folders&#xff0c;取消勾选 或者在设置文件上添加 "explorer.compactFolders": false2、VSCode 目录缩进深度设置 输入Workbench Tree:…

【C# 数据结构-队列】

在C#中&#xff0c;队列&#xff08;Queue&#xff09;是一种先进先出&#xff08;First In First Out&#xff0c;FIFO&#xff09;的数据结构&#xff0c;允许添加&#xff08;Enqueue&#xff09;和移除&#xff08;Dequeue&#xff09;元素。队列类在.NET Framework的Syste…

Navicat Premium 16最新版激活 mac/win

Navicat Premium 16 for Mac是一款专业的多连接数据库管理工具。它支持连接多种类型的数据库&#xff0c;包括MySQL、MongoDB、Oracle、SQLite、SQL Server、PostgreSQL等&#xff0c;可以同时连接多种数据库&#xff0c;帮助用户轻松地管理和迁移数据。 Navicat Premium 16 fo…

1.PROXY-代理内容

SwitchyOmega&#xff0c;浏览器插件&#xff08;edge&#xff0c;火狐插件库都是存在的&#xff09;&#xff0c;安装后的样式 1.安装 2.设置 我们常用的功能&#xff0c;主要是设置一个代理ip访问学习网站入github等&#xff0c;或者docker服务等 3.启动代理 4.验证 https…

LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama3&#xff1a;Llama 3的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年4月18日&#xff0c;Meta 重磅推出了Meta Llama 3&#xff0c;本文章主要介绍了Meta推出的新的开源大语言模型Meta Llama 3。模型架构 Llama 3 是一种自回归语言模型&#x…

移动端双验证码登录实现

说明&#xff1a;本文介绍如何用图形验证码短信验证码实现移动端登录思路&#xff1b; 分析 通过手机号图形验证码手机验证码实现登录的时序图如下&#xff1a; 说明&#xff1a; &#xff08;1&#xff09;用户进入登录界面&#xff0c;出现图形验证码&#xff0c;可点击图形…

探索Java设计模式:享元模式

探索Java设计模式&#xff1a;深入理解与实践享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享对象来有效地支持大量细粒度对象的复用&#xff0c;从而降低系统内存占用&#xff0c;提高性能。在Java编程中&#xff0c…

【2024】深度学习配置环境常见报错,持续更新中....

No such file or directory: ‘:/usr/local/cuda-10.1:/usr/local/cuda-10.1/bin/nvcc‘: 确保CUDA正常后&#xff0c;直接运行以下代码&#xff1a; export CUDA_HOME/usr/local/cuda详细原因参照&#xff0c;安装mmcv-full时报错&#xff1a;Could not build wheels for mm…

python多线程技术(Threading)

文章目录 前言一、多线程(Threading)是什么?二、threading库1.初识多线程2.增加新线程2.1 多线程的基本使用2.2 对多线程是同时进行的进行一个直观上的演示(非重点--理解是实时就行)2.3 thread.join()功能2.4 使用queue(队列)功能获取多线程的返回值(重要,这就是前面那…

R version 4.1.0 安装ggplot2,options(pkgType=“binary“) install.packages(“ggplot2“)

R version 4.1.0 安装ggplot2 R version 4.1.0 安装ggplot21. 报错信息2. 成功安装3. 参考资料 R version 4.1.0 安装ggplot2 # 直接安装报错 install.packages("ggplot2")# 安装成功 options(pkgType"binary") install.packages("ggplot2")1. …

浅析ARM Contex-CM3内核架构

目录 概述 1. Cortex-M3类型MCU 1.1 MCU 架构 1.2 实时性系统概念 1.3 处理器命名法 1.4 MCU的一些知识 2. Cortex-M3 概览 2.1 Cortex-M3综述 2.2 寄存器组 2.3 操作模式和特权极别 2.4 内建的嵌套向量中断控制器 2.5 存储器映射 2.6 总线接口 2.7 存储器保护单元…

SpringBoot多数据源(一)

SpringBoot多数据源&#xff08;一&#xff09; 1.多数据源使用场景1.1 业务复杂&#xff08;数据量大&#xff09;1.2 读写分离 2.多数据源配置3.应用4.测试 1.多数据源使用场景 1.1 业务复杂&#xff08;数据量大&#xff09; 简单理解就是业务量复杂&#xff0c;将庞大的数…

Python模块之logging

官方文档 常见用法 logging模块是Python标准库中用于记录日志的模块。它提供了灵活且可配置的日志记录功能&#xff0c;可以用于在应用程序中捕获和输出各种级别的日志消息。以下是logging模块的常见用法示例&#xff1a; python import logging# 配置日志记录器 logging.b…

Java中的==与equals的区别

区别 首先&#xff0c;是运算符&#xff0c;equals()是方法 是一个二元运算符&#xff0c;用于比较两个对象的引用是否相同。当使用 进行比较时&#xff0c;Java会检查两个对象的内存地址是否相同。如果两个对象的内存地址相同&#xff0c;则认为它们是相同的。 如果比较的…

浏览器原理之本地存储

一 浏览器本地存储方式及使用场景 Cookies: 小段数据&#xff0c;由服务器发送到用户浏览器&#xff0c;浏览器将其存储并在以后的请求中回送到服务器。使用场景&#xff1a;会话管理&#xff08;登录状态、用户偏好设置&#xff09;、个性化&#xff08;用户主题&#xff09;、…