Redis 高可用之集群搭建和数据分片
Redis 高可用之集群搭建和数据分片
- 一、简介
- 1. Redis 集群:
- 2. 集群搭建:
- 二、Redis 集群搭建
- 1. 单机 Redis 升级为 Redis Cluster
- a. 搭建方法
- b. 搭建方式说明
- 2. 环境准备
- 3. 配置修改
- 4. 启动集群
- 三、Redis数据分片的实现
- Redis数据分片概念说明
- 数据分片的策略
- 哈希一致性算法
- 按范围区间分片
- 哈希槽模式分片
- 四、Redis集群的运维与维护
- 集群节点状态的监控
- 集群故障处理
- 节点掉线恢复
- 槽迁移处理
- 集群扩容、缩容
- 五、Redis集群实现高可用方案
- 1. Redis主从架构
- 2. 主从同步
- 3. 主从切换
- 4. Redis哨兵模式
- 5. Redis集群集成实践案例
- 集群搭建
- 集群使用
一、简介
1. Redis 集群:
Redis 集群是将数据和负载分散在多个节点上的一种方法。每个节点都是一个独立的 Redis 实例,这些实例协同工作以提供高可靠性和性能。在 Redis 集群中,数据被分数个槽位, 并将这些槽位分配给不同的节点存储,在读写数据时会自动进行数据迁移。Redis 集群的这种方式可以无需使用共享存储或共享内存等资源,便可以实现线性扩展。此外,Redis 集群还支持故障恢复和单点故障自动转移。
2. 集群搭建:
当单个 Redis 实例无法满足业务需求时,Redis 集群便显得尤其必要。Redis 集群可以提高系统的可用性、吞吐量和容错性,从而满足高并发、高可靠性的业务场景。
二、Redis 集群搭建
1. 单机 Redis 升级为 Redis Cluster
a. 搭建方法
单机 Redis 可以通过升级到 Redis Cluster 来实现集群化部署。升级完成后,Redis 将变为一个多节点的集群,它包含多个节点,每个节点都是一个单独的 Redis 实例。下面介绍如何将 Redis 从单机模式升级为 Redis Cluster:
-
安装 Redis Server 和 Redis CLI
-
修改 Redis 配置文件 redis.conf。
# 启用集群模式cluster-enabled yes# 节点间通信的超时时间cluster-node-timeout 5000# 集群状态持久化方式,可以是rdb或者aof,也可以都开启cluster-config-file nodes-6379.conf
-
重启 Redis 服务端
-
使用 redis-cli 创建 Redis Cluster
首先启动一个节点:
redis-server --port 7001 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000
然后在该节点上使用 redis-cli 工具的 cluster 命令创建集群:
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 …
b. 搭建方式说明
以上搭建方法适用于小型 Redis 集群搭建。对于大规模的生产环境,需要使用 Redis 集群管理软件(如 Redis Sentinel 或 Redis Cluster)来进行故障转移和负载均衡。
2. 环境准备
在搭建 Redis 集群之前,需要进行如下准备工作:
-
安装 Redis server 和 Redis cli 工具
-
在多个机器上安装 Redis,并确保它们都能够互相通信。
-
确保每个 Redis Server 实例的配置文件中 cluster-enabled=yes。
-
创建一个目录用于存储 Redis Cluster 节点数据(如 /opt/redis/cluster/n1、/opt/redis/cluster/n2 等)。
3. 配置修改
-
修改每个 Redis Server 实例的配置文件,设置 node 一系列的参数(nodeport、nodename、dbfilename等)。
# 集群名称 cluster-name mycluster# 集群节点列表(多个Redis实例的 IP:PORT 组合) cluster-announce-ip <your_ip_address> cluster-announce-port <cluster_start_port># 同一节点的多个 Redis 实例需要有不同的端口号 port <different_port># 集群工作目录,用于存储会产生的日志和状态信息等 dir /path/to/redis/node1# 不使用AOF持久化方式(至少在这里不启动),可以降低内存使用率 appendonly no -
将各个 Redis Server 实例的配置文件拷贝到对应的目录(如 /opt/redis/cluster/n1、/opt/redis/cluster/n2 等),多个目录分别代表不同的节点。
-
修改集群中最少、最多节点数量(从而决定能存储的槽数量)。
cluster-node-timeout 5000 # 节点超时时间(单位毫秒) cluster-config-file nodes-6379.conf # 集群状态持久化文件 cluster-minimum-nodes <number_of_nodes> # 集群最少节点数 cluster-max-redirects 6 # 节点内部重定向的最大次数
4. 启动集群
-
在多个节点上启动 Redis Server 实例,并在它们的配置文件中开启“集群模式”。
-
使用 redis-cli 工具的 cluster 命令创建集群:
redis-cli --cluster create <ip1>:<port1> <ip2>:<port2> ... --cluster-replicas
此处的 <ip> 和 <port> 是各个 Redis Server 实例的 IP 地址和端口号,--cluster-replicas 参数表示使用自动生成的从节点。
到这里,一个 Redis 集群便成功搭建了。可以使用 redis-cli 工具进行验证和测试。
三、Redis数据分片的实现
Redis数据分片概念说明
Redis是一款支持较小内存的高性能键值对(key-value)存储数据库,随着业务数据逐步增大,单机Redis可能会出现内存不足、性能瓶颈等情况。数据分片是一种常见的解决Redis单点故障的方案,将数据划分到多个节点上进行存储和处理。
数据分片的策略
Redis官方提供了三种数据分片的策略:哈希一致性算法、按范围区间分片、哈希槽模式分片。
哈希一致性算法
哈希一致性算法是一种将数据节点进行哈希运算,将结果映射到环形空间的算法。通俗的讲,就是将每个节点用一个哈希值表示,然后在某个范围内寻找距离节点最近的值,将数据存储到该节点上。需要注意的是,当节点数量发生变化时,该算法需要重新计算哈希值。
按范围区间分片
按范围区间分片是一种将数据按照值的范围划分为若干段,然后将每个段分配给不同的节点进行存储和处理。该策略适用于数据能够按照某种方式划分为多个区间的场景。例如,按照用户ID的范围进行分片。
哈希槽模式分片
哈希槽模式分片是Redis集群中最常用的一种分片策略。将Hash Slot(哈希槽)的数量固定为16384,将数据库中所有Key使用相同的哈希函数进行哈希运算,再对16384进行取余,确定该Key对应的哈希槽。每个节点负责处理一部分哈希槽。如果节点数发生变化,槽和节点之间的映射关系会重新计算,数据迁移至新节点。
四、Redis集群的运维与维护
集群节点状态的监控
Redis提供了监控集群状态的工具redis-cli、redis-trib.rb和redis-stat,可以通过命令行或Web界面查看集群的实时状态、数据流量、QPS等信息。
集群故障处理
当集群中某个节点出现故障时,可以通过以下几个步骤进行处理:首先查看运行日志,分析故障原因;其次尝试重启、修复问题;最后如果无法修复,则通过增加新节点替代原有节点。
节点掉线恢复
当节点掉线时,需要先确认节点是否真的掉线,而非假故障,然后检查运行日志,并在必要的情况下进行数据迁移。
槽迁移处理
当增加或删除节点时,需要将一些槽重新分配到其他节点上,并进行数据迁移。这个操作需要在集群处于正常状态时进行。关键在于避免数据重复和数据丢失。
集群扩容、缩容
集群的扩容很简单,只需要增加新节点,然后进行槽的重新分配和数据迁移即可。缩容相对较为困难,需要考虑如何进行异地备份、数据归档等操作。可以采用持久化方式来对被缩容的节点进行数据归档,并通过Redis提供的Restore命令进行恢复。
五、Redis集群实现高可用方案
1. Redis主从架构
在Redis主从架构中,一个节点(Redis实例)被指定为主节点(master),其余节点为从节点(slave)。
主节点负责写操作并将写操作同步给从节点,从节点只能读取数据。
2. 主从同步
主从同步是指主节点将写操作同步到从节点,实现从节点数据与主节点数据的一致性。当从节点与主节点失去联系时,从节点变成不可用状态。
3. 主从切换
主从切换是指发生故障后将主节点切换到某个从节点,以此保证系统的可用性。
4. Redis哨兵模式
Redis哨兵模式是保证Redis高可用性的一种方式,通过Sentinel(哨兵)监控系统Redis节点状态,当某个Redis节点出现故障时,Sentinel会自动进行主从切换。
5. Redis集群集成实践案例
Redis集群是为了解决单台机器容量有限的问题,集群中的每个节点(在一定意义上可以看成是“分片”)处理部分数据,所有节点组成一个完整的Redis服务。
下面我们通过一个实例进行演示。
集群搭建
-
安装Redis和Ruby环境:
sudo apt-get update sudo apt-get install redis-server ruby -
安装ruby包管理器:
sudo apt-get install rubygems -
安装redis和redis-trib.rb
sudo gem install redis wget http://download.redis.io/redis-stable/src/redis-trib.rb chmod +x redis-trib.rb -
创建6个Redis实例,并启动:redis-6379,redis-6380,redis-6381,redis-6382,redis-6383,redis-6384
-
创建集群:
./redis-trib.rb create --replicas 1 \127.0.0.1:6379 \127.0.0.1:6380 \127.0.0.1:6381 \127.0.0.1:6382 \127.0.0.1:6383 \127.0.0.1:6384
集群使用
-
连接到Redis集群中任意节点:
redis-cli -c -h 127.0.0.1 -p 6379 -
在Redis集群中创建key,并查看分配情况:
set foo bar cluster keyslot foo -
查看当前集群节点状态:
cluster nodes
相关文章:
Redis 高可用之集群搭建和数据分片
Redis 高可用之集群搭建和数据分片 一、简介1. Redis 集群:2. 集群搭建: 二、Redis 集群搭建1. 单机 Redis 升级为 Redis Clustera. 搭建方法b. 搭建方式说明 2. 环境准备3. 配置修改4. 启动集群 三、Redis数据分片的实现Redis数据分片概念说明数据分片的…...
兄弟,王者荣耀的段位排行榜是通过Redis实现的?
目录 一、排行榜设计方案1、数据库直接排序2、王者荣耀好友排行 二、Redis实现计数器1、什么是计数器功能?2、Redis实现计数器的原理(1)使用INCR命令实现计数器(2)使用INCRBY命令实现计数器 三、通过Redis实现“王者荣…...
Linux系统编程--文件编程--打开创建文件
创建文件需要包含以下3个头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 打开、创建文件有以下3个API open的返回值——文件描述符(索引作用),是一个小的非负整数 int open(const char*pathn…...
http协议与apache
http概念: 互联网:是网络的网络,是所有类型网络的母集 因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念 万维网:万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库&…...
搜索二叉树的算法解析与实例演示
目录 一.搜索二叉树的特性与实现1.特点2.实现二.搜索二叉树的性能 一.搜索二叉树的特性与实现 1.特点 二叉搜索树是特殊的二叉树,它有着更严格的数据结构特点: (1)非空左子树的所有键值小于其根结点的键值。 (2&…...
研磨设计模式day13组合模式
目录 场景 不用模式实现 代码实现 有何问题 解决方案 代码改造 组合模式优缺点 思考 何时选用 场景 不用模式实现 代码实现 叶子对象 package day14组合模式;/*** 叶子对象*/ public class Leaf {/*** 叶子对象的名字*/private String name "";/**…...
Linux命令(73)之zip
linux命令之zip 1.zip介绍 linux命令zip是用来压缩文件及解压缩文件名称后缀为".zip"的文件 2.zip用法 zip [参数] filename[.zip] zip常用参数 参数说明-r压缩递归处理-d从压缩文件内删除指定的文件-T检查备份文件是否正确无误-u更换较新的文件到压缩文件内-q不…...
深入理解Reactor模型的原理与应用
1、什么是Reactor模型 Reactor意思是“反应堆”,是一种事件驱动机制。 和普通函数调用的不同之处在于:应用程序不是主动的调用某个 API 完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并…...
微信小程序开发的投票评选系统设计与实现
摘要 越来越多信息化融入到我们生活当中的同时,也在改变着我们的生活和学习方式,当然,变化最明显的除了我们普通民众之外,要数高校学生的生活方式以及校园信息化的变革。智慧是改变生活和生产的一种来源,那么智慧的体…...
【校招VIP】算法考点之堆排
考点介绍: 排序算法属于数据结构和算法的基础内容,并且也是大厂笔试中的高频考点。 堆排序是使用一棵树存储序列这个课树只保证跟节点是这棵树中的最小值,但并不保证其他节点是按顺序的。因此他的排序是每次从堆中取得堆顶,取得 n…...
关于yarn安装时报“node“ is incompatible with this module的解决办法
前提: 在用vue写一个h5页面时,当在用yarn安装时,提示如下错误: The engine “node” is incompatible with this module. Expected version "^14.18.0 || ^16.14.0 || >18. 解决办法 我是使用命令忽略错误:…...
开源利器推荐:美团动态线程池框架的接入分享及效果展示
前言 蛮早前有些过关于线程池的使用及参数的一些参考配置,有兴趣的可以翻看以前的博文,但终究无法解决线程池的动态监控和实时修改。 以前读过美团早期发布的动态线程池框架的思路相关文章,但想要独自实现不是一件容易的事。 去年,…...
Linux目录结构与文件管理 (02)(四)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、查看文件内容 二、创建文件 三、删除文件 四、 移动文件 五、复制文件 六、编辑文件内容 总结 前言 今天是在昨天的基础上继续学习,主要…...
对1GHz脉冲多普勒雷达进行快速和慢速处理生成5个移动目标的距离多普勒图研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
uni.uploadFile上传 PHP接收不到
开始这样,后端$file $request->file(file);接收不到 数据跑到param中去了 去掉Content-Type,就能接收到了 param只剩下...
2023年高教社杯 国赛数学建模思路 - 复盘:光照强度计算的优化模型
文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…...
Netty简易聊天室
文章目录 本文目的参考说明环境说明maven依赖日志配置单元测试 功能介绍开发步骤 本文目的 通过一个简易的聊天室案例,讲述Netty的基本使用。同时分享案例代码。项目中用到了log4j2,junit5,同时分享这些基础组件的使用。项目中用到了awt&…...
Flutter Cannot run with sound null safety, because the following dependencies
flutter sdk 版本升级到2.0或者更高的版本后,运行之前的代码会报错 Error: Cannot run with sound null safety, because the following dependencies dont support null safety:- package:flutter_swiper- package:flutter_page_indicator- package:transformer_p…...
利用改进的遗传算法(种群隔离与个体迁移)mpi并行解决tsp问题
序 关于tsp问题的概述以及如何使用遗传算法进行求解已经在上一篇文章中说明了:遗传算法解决TSP问题. 但是,作为一种演化算法,遗传算法还存在着许多问题,比如早熟的情况,很容易在算法前期就已经收敛了,大量…...
【C++】—— C++11之线程库
前言: 在本期,我将给大家介绍的是 C11 中新引进的知识,即关于线程库的相关知识。 目录 (一)线程库的介绍 1、线程库的由来 2、线程库的简单介绍 (二)线程函数参数 (三…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
