redis分片集群

article/2025/9/30 20:00:12

目录

  • 分片集群结构
  • 搭建分片集群
  • 散列插槽
  • 集群伸缩
  • 故障转移

分片集群结构

主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:

1.海量数据存储问题
2.高并发写的问题

使用分片集群可以解决上述问题,分片集群特征:

1.集群中有多个master,每个master保存不同数据
2.每个master都可以有多个slave节点
3.master之间通过ping监测彼此健康状态
4.客户端请求可以访问集群任意节点,最终都会被转发到正确节点

搭建分片集群

1.准备一个新的redis.conf文件:

port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /tmp/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /tmp/6379
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 192.168.150.101
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /tmp/6379/run.log

2.将这个文件拷贝到每个目录下。
3.修改每个目录下的redis.conf,并做一定的修改。
4.启动相应的redis服务

5.创建集群
  虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。

redis-cli --cluster create --cluster-replicas n IP IP IP ...
  • redis-cli --cluster 或者 ./redis-trib.rb :代表集群操作命令
  • create :代表是创建集群
  • –replicas 1 或者 --cluster-replicas 1 :指定集群中每个master的副本个数为1,此时 节点总数 ÷ (replicas + 1)得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master.

通过命令可以查看集群状态:

redis-cli -p 7001 cluster nodes

散列插槽

  Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上,查看集群信息时就能看到。
在这里插入图片描述
  可以简单理解为将16384个插槽分给这些master节点,每个master节点都有一个范围。写到某个插槽上就会写到具体某个master节点上。
  数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:

1.key中包含"{}",且“{}”中至少包含1个字符,“{}”中的部分是有效部分
2.key中不包含“{}”,整个key都是有效部分

  例如:key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值。
Redis如何判断某个key应该在哪个实例?

将16384个插槽分配到不同的实例
根据key的有效部分计算哈希值,对16384取余
余数作为插槽,寻找插槽所在实例即可

如何将同一类数据固定的保存在同一个Redis实例?

这一类数据使用相同的有效部分,例如key都以{typeId}为前缀

集群伸缩

  集群伸缩也就是往集群中添加master节点和删除master节点.
  redis-cli --cluster提供了很多操作集群的命令,可以通过下面方式查看:
在这里插入图片描述
在这里插入图片描述
  添加后记得分配插槽,将某个节点的插槽分给这个节点多少个,相应的数据也移(拷贝)到这个节点上。

故障转移

当集群中有一个master宕机会发生什么呢?

  • 首先是该实例与其它实例失去连接
  • 然后是疑似宕机:
    在这里插入图片描述
  • 最后是确定下线,自动提升一个slave为新的master:
    在这里插入图片描述
      利用cluster failover命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。其流程如下:
    在这里插入图片描述
    手动的Failover支持三种不同模式:
1.缺省:默认的流程,如图1~6歩
2.force:省略了对offset的一致性校验
3.takeover:直接执行第5歩,忽略数据一致性、忽略master状态和其它master的意见

http://chatgpt.dhexx.cn/article/jdIbrLRQ.shtml

相关文章

Redis分区/分片详解

分区/分片详解 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服务宕机了将会影响到整个服务。解决的…

Redis(七)--分片技术详解

文章目录 介绍Redis集群的数据分布算法:哈希槽算法集群的请求重定向Redis集群中节点的通信机制:goosip协议介绍原理通信过程优缺点goosip协议的常见类型 集群的扩容与收缩扩容收缩 集群的故障检测与故障恢复机制故障检测故障恢复 介绍 Redis分片&#x…

Redis集群系列五 —— 分区/片概念

什么是分区 分区就是将所存储的数据按照一定的规则存储在不同的存储服务或介质上,通过降低单服务或介质的数据量级来提升数据处理能力,从而达到拥有数据处理横向扩容的能力的目的。 还可简单的理解为分区就是将数据拆分到多个 Redis 实例的过程&#xf…

redis分区(分片)原理

redis相关文章 ----redis原理概述 -----redis集群方案 ----redis分区(分片)原理 ----Redis实现分布式锁 ----redis缓存穿透、雪崩和解决方案 分区的概念 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集如果只使…

调和级数近似求和公式推导(转载)

原文链接: https://blog.csdn.net/ezoiHQM/article/details/82961266?utm_mediumdistribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonec…

级数求和.

题目描述 输入格式 一个正整数 k。 输出格式 一个正整数 n。 输入样例 1输出样例 2#include<iostream> using namespace std; int main() {int k;cin>>k;double S0,tmp;for(int i1;i<99999;i){tmp1.0/i;SStmp;if(S>k){cout<<i<<endl;break…

高等数学——级数

目录 一&#xff0c;级数 二&#xff0c;函数项级数的一致收敛性 一&#xff0c;级数 二&#xff0c;函数项级数的一致收敛性

高数---级数

常数项级数 定义 先搞清什么是级数&#xff0c;级数是一个求和&#xff0c;可以先理解为是数列的求和。 这样一个级数&#xff1a; ∑ n 1 ∞ f ( n ) f ( 1 ) f ( 2 ) f ( 3 ) . . . f ( n ) . . . \sum_{n1}^\infty f(n) f(1) f(2) f(3) ... f(n) ... ∑n1∞​…

代码【级数求和】

题目 已知&#xff1a;S_n 11/21/3 \cdots 1 /nSn​11/21/3⋯1/n。显然对于任意一个整数 KK&#xff0c;当 nn 足够大的时候&#xff0c;S_nSn​ 大于 KK。 现给出一个整数 K(1 \le k \le 15)K(1≤k≤15)&#xff0c;要求计算出一个最小的 nn&#xff1b;使得 S_n > KSn​…

【高数】收敛关系:级数与部分和、级数与数列、数列与子数列、级数与子级数

目录 一、概念理解 1. 级数是什么&#xff1f; 二、区别与联系 1. 级数、部分和 2. 级数收敛、数列收敛 3. 数列收敛、子数列收敛 4. 级数收敛、子级数收敛 三、小结 一、概念理解 1. 级数是什么&#xff1f; 疑问&#xff1a;级数是无穷数列的和&#xff0c;那为什么…

级数求和和

#include<bits/stdc.h> using namespace std;int main(){double k,i1,sn0;//如果是float就错了&#xff0c;因为double比float更加精确//float占4个字节&#xff0c;double占8个字节&#xff0c;它可以存储的有效数字更多//所以题目要求精确的时候&#xff0c;用double&a…

高数_第6章无穷级数__调和级数

所谓调和级数&#xff0c;是指 看一个例题 证明&#xff1a; 级数 发散。 证&#xff1a; 调和级数的部分和 此题可以继续扩展 结论&#xff1a; 可以看到此题的级数&#xff0c;比调和级数仅仅多了 , 却是收敛。 我们不能用思维定势&#xff0c; 思维定势害人呐&…

函数列与函数项级数——(一)一致收敛性

一.函数列及其一致收敛性 设是一列定义在同一数集E上的函数&#xff0c;称为定义在E上的函数列&#xff0c;&#xff08;1&#xff09;也可简单地写作或 函数列的极限函数记作f&#xff0c;则有或 函数列极限的定义&#xff1a;当n>N时&#xff0c;有 使函数列收敛的全体…

微积分:常用公式、微分方程、级数

http://blog.csdn.net/pipisorry/article/details/52200140 微积分 直观地说&#xff0c;对于一个给定的正实值函数&#xff0c;在一个实数区间上的定积分可以理解为在坐标平面上&#xff0c;由曲线、直线以及轴围成的曲边梯形的面积值&#xff08;一种确定的实数值&#xff…

数学小课堂:几何数列的求和(几何级数的发散性和收敛性)

文章目录 引言I 入会骗局的数学原理1.1 提成方式1.2 情况分析1.3 级数的发散性和收敛性II 案例2.1 社交网络上的信息传播问题2.2 核裂变的链式反应引言 I 入会骗局的数学原理 1.1 提成方式 每一个人入会需要缴纳1万元发展一个直接下线,可以从后者的身上提成20%;直接下线每发…

调和级数求和

文章由 流星蝴蝶没有剑 提供 题目&#xff1a; 已知&#xff1a;Sn 1&#xff0b;1&#xff0f;2&#xff0b;1&#xff0f;3&#xff0b;…&#xff0b;1&#xff0f;n。显然对于任意一个整数K&#xff0c;当n足够大的时候&#xff0c;Sn大于K。 现给出一个整数K&#xff08;…

常用的求和公式(级数求和)

http://blog.csdn.net/lewutian/article/details/4359766 下面是常用的一些求和公式&#xff1a;

常用求和公式和级数

1. 多项式级数 2. 指数级数 3. Harmonic 级数 4. 其他 常见的级数查询表 https://blog.csdn.net/algzjh/article/details/82533996 https://www.zhihu.com/topic/19998598/hot