集群部署篇--Redis 集群分片模式

news2024/11/28 13:31:10

文章目录

  • 前言
  • 一、Redis 分片集群介绍
    • 1.1 介绍:
    • 1.2 工作机制:
      • 1.2.1 节点:
      • 1.2.2 槽 slot:
      • 1.2.3 故障转移:
  • 二、Redis 分片集群搭建:
    • 2.1 配置文件:
    • 2.2 redis 部署:
    • 2.3 redis 集群创建:
    • 2.4 redis 集群连接:
  • 总结
  • 参考:


前言

对于平常的业务往往使用redis 的哨兵模式就可以了,虽然redis 单台服务可以提供10W 的并发,但是对于并发量非常大的服务来说可能还不够,所以此时就需要对redis 进行分片集群;


一、Redis 分片集群介绍

1.1 介绍:

如果说依靠哨兵可以实现redis的高可用,如果还想在支持高并发同时容纳海量的数据,那就需要 redis 集群。redis 集群是 redis 提供的分布式数据存储方案,集群通过数据分片sharding来进行数据的共享,同时提供复制和故障转移的功能。

1.2 工作机制:

1.2.1 节点:

在这里插入图片描述
一个 redis 集群由多个节点 node 组成,而多个 node 之间通过 cluster meet 命令来进行连接,节点的握手过程:

  • 节点 A 收到客户端的 cluster meet 命令
  • 节点 A 根据收到的 IP 地址和端口号,向 B 发送一条 meet 消息
  • 节点 B 收到 meet 消息返回 pong
  • 节点 A 知道 B 收到了 meet 消息,返回一条 ping 消息,握手成功
  • 最后,节点 A 将会通过 gossip 协议把节点 B 的信息传播给集群中的其他节点,其他节点也将和 B 进行握手

1.2.2 槽 slot:

redis 通过集群分片的形式来保存数据,整个集群数据库被分为 16384 个 slot,集群中的每个节点可以处理 0-16383 个slot,当数据库 16384 个 slot 都有节点在处理时,集群处于上线状态,反之只要有一个 slot 没有得到处理都会处理下线状态。通过 cluster addslots 命令可以将 slot 指派给对应节点处理。

slot 是一个位数组,数组的长度是 16384/8=2048,而数组的每一位用 1 表示被节点处理,0 表示不处理,如图所示的话表示 A 节点处理 0-7 的slot。
在这里插入图片描述
当客户端向节点发送命令,如果刚好找到 slot 属于当前节点,那么节点就执行命令,反之,则会返回一个MOVED命令到客户端指引客户端转向正确的节点。(MOVED过程是自动的)

在这里插入图片描述
如果增加或者移出节点,对于 slot 的重新分配也是非常方便的,Redis 提供了工具帮助实现 slot 的迁移,整个过程是完全在线的,不需要停止服务。

1.2.3 故障转移:

如果节点 A 向节点 B 发送 ping 消息,节点 B 没有在规定的时间内响应 pong,那么节点 A 会标记节点 B 为 pfail 疑似下线状态,同时把 B 的状态通过消息的形式发送给其他节点,如果超过半数以上的节点都标记 B 为 pfail 状态,B 就会被标记为 fail 下线状态,此时将会发生故障转移,优先从复制数据较多的从节点选择一个成为主节点,并且接管下线节点的 slot,整个过程和哨兵非常类似,都是基于 Raft 协议做选举。

二、Redis 分片集群搭建:

2.1 配置文件:

对每个redis实例的 redis.conf,进行修改:

protected-mode no
#  打开 AOF每次 Redis收到更改数据集的命令
appendonly yes
# 设置访问密码
requirepass 123456
#redis监听的端口号。
port 8579
# masterauth就是用来配置master的密码
masterauth
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000

完整的 redis.conf 参数 可以在 集群部署篇–Redis 主从模式 搜索“redis.conf 可以参考如下” 获取;

2.2 redis 部署:

docker run -d  \
--name fpredis-8379 \
-p 8379:8379 \
-p 18379:18379 \
--privileged=true \
-v /root/fp/redis1/redis.conf:/etc/redis/redis.conf \
-v /root/fp/redis1/data:/data \
redis \
redis-server /etc/redis/redis.conf

这里开通了两个端口,一个用来访问redis ,一个+10000 用来分片集群 通信使用端口

重复 2.1 和 2.2 可以 部署多个redis 服务(如果是在同一台服务注意对 redis.conf port 端口进行修改);

博主是在3台虚拟机上,分别在没台服务上搭建了3个redis 实例;

2.3 redis 集群创建:

用redis-cli --cluster create命令创建集群:

docker exec -it fpredis-8379 redis-cli -p 8379 -a 123456  --cluster create 192.168.75.129:8379 192.168.75.130:8379 192.168.75.131:8379  192.168.75.129:8479 192.168.75.129:8579  192.168.75.130:8479 192.168.75.130:8579  192.168.75.131:8479 192.168.75.131:8579   --cluster-replicas 2

参数解释:

  • fpredis-8379 为某个redis 实例(任选一个 节点上的redis 实例即可);
  • -p 是这个实例redis 访问的端口;
  • -a 如果在redis.conf 使用 requirepass 设置了访问密码,可以使用-a 后跟上 访问密码;
  • –cluster create 为创建集群命令;
  • –cluster-replicas 为副本和主节点的比值 ,如果是1个主节点一个从节点则为 1 ;1个主节点两个从节点 则为2 ,依次类推;

可以看到集群搭建的情况:
在这里插入图片描述
执行过程中会提示是否同意上面的配置 :会询问是否按照上面的主从节点进行集群创建,输入 yes 即可

在这里插入图片描述

可以看到集群创建的情况 对16384 个slot 进行了分配
在这里插入图片描述

2.4 redis 集群连接:

使用 redis-cli 连接集群:

docker exec -it fpredis-8379 redis-cli -p 8379 -c

查看集群信息:如果设置了密码 则输入 auth 密码

cluster info

在这里插入图片描述
一共有9个节点,3个主节点;进行set 存储数据时,可以看到如果当前的key 不在当前的redis 主节点实例,则会将命令发送到对应的机器上去
在这里插入图片描述


总结

通过–cluster create 命令我们可以为已经存在的redis 实例创建分片集群,然后进行数据访问时 又会通过key 计算hash 然后对应到落到具体的slot 槽,如果当前节点不包含这个槽点,则将请求转发到对应的节点完成命令的执行;

参考:

Redis系列:Redis主从、哨兵、集群介绍

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

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

相关文章

杂文月刊投稿方式论文发表要求

《杂文月刊》是由国家新闻出版总署批准的正规文学类期刊。主要内容取向:杂文、散文、小说、诗歌、漫画、文学评论、艺术评论、戏剧文化、地方文化、非遗文化、美学艺术、教育等历史、文化、文学、艺术类的文章。是广大专家、学者、教师、学子发表论文、交流信息的重…

2024年人工智能领域10大预测

2023年人工智能领域如果只能筛选一个关键词的话,恐怕非“大模型”莫属。大模型的发展在过去一年中,让各行各业发生了天翻地覆的变化,有企业因大模型而新生,有企业因大模型而消亡。企业的变迁跟技术迭代息息相关,而大模…

前端 js 基础(1)

js 结果输出 &#xff08;点击按钮修改文字 &#xff09; <!DOCTYPE html> <html> <head></head><body><h2>Head 中的 JavaScript</h2><p id"demo">一个段落。</p><button type"button" onclic…

【2023】hadoop基础介绍

&#x1f4bb;目录 Hadoop组成HDFSHDFS操作HDFS分布式文件存储NameNode元数据数据读写流程 YARN和MapReduceMapReduce&#xff1a;分布式计算YARN&#xff1a;资源管控调度YARN架构提交任务到**YARN中运行** Hadoop组成 hadoop安装教程可以看我这篇文章> &#x1f345;hado…

论数据资源持有权(上)

关注WX公众号&#xff1a; commindtech77&#xff0c; 获得数据资产相关白皮书下载地址 1. 回复关键字&#xff1a;数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字&#xff1a;光大银行 下载 光大银行-《商业银行数据资产会计核算研究报告》 3. 回复关键字…

c语言之将输入的十进制转换成二进制数并打印原码反码补码

十进制转二进制 首先&#xff0c;我们要知道的是十进制转换成二进制数的方法。我们一般采用的除二取余的方法&#xff0c;在这里我用32位数组来进行转换。 int main() {printf("请输入一个十进制数\n");int n 0;scanf("%d", &n);int arr[32];int* p…

基于FFT + CNN - Transformer 时域、频域特征融合的轴承故障识别模型

目录 往期精彩内容&#xff1a; 前言 1 快速傅里叶变换FFT原理介绍 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 3 基于FFTCNN-Transformer的轴承故障识别模型 3.1 网络定义模型 3.2 设置参数&#xff0c;训练模型 3.3 模型评估 往期精彩内容&…

FPGA项目(13)——基于FPGA的电梯控制系统

1.摘要 随着科技的发展&#xff0c;电梯早在上个世纪就已进入人们的生活。对于电梯的控制&#xff0c;传统的方法是使用继电器——接触器控制系统进行控制。随着EDA技术的发展&#xff0c;FPGA已广泛应用于各项电子设计中&#xff0c;本设计即利用FPGA来实现对电梯控制系统的设…

loTDB数据库学习笔记之初识 —— 筑梦之路

loTDB简介 IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。具有体量轻、性能高、易使用的特点&#xff0c;适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求&#xff0c;同时包含数据订阅、数据同步、负载均衡和运维监控功能。 由清华大学…

家具定制出库标签打印,家具出入库进销存管理系统软件教程

一、前言 1、家具管理软件如何打印标签&#xff1f; 上图打印标签&#xff0c;以 佳易王家具出入库管理软件V16.1版本为例 说明&#xff0c;在打印标签的时候&#xff0c;可以同时打印自己的LOGO&#xff0c;而且可以根据需要定制打印格式。 2、软件中 &#xff0c;预定家具如…

【Maven】下载配置maven以及IDEA配置maven详情

目录 1、下载maven 2、配置settings.xml 2.1、配置本地仓库 2.2、配置阿里云镜像仓库 2.3、配置JDK 3、配置环境变量 4、IDEA配置maven 1、下载maven maven官网&#xff1a;https://maven.apache.org/ 2、配置settings.xml 2.1、配置本地仓库 <localRepository>C:\…

NLP:预测新闻类别 - 自然语言处理中嵌入技术

简介 在数字时代&#xff0c;在线新闻内容呈指数级增长&#xff0c;需要有效的分类以增强可访问性和用户体验。先进机器学习技术的出现&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;为文本数据的自动分类开辟了新的领域。本文[1]探讨了在 NLP …

力扣回溯算法-电话号码的字母组合

力扣第17题&#xff0c;电话号码的字母组合 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 .电话号码的字母组合 示例: 输入&#xff1a;“2…

LeetCode每日一题.05(N皇后)

按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种…

第三代半导体SiC 专业术语及指标解释

SiC &#xff1a; 化合物半导体材料&#xff0c;第三代半导体材料代表&#xff0c;主要用于功率半导体领域 GaN &#xff1a; 化合物半导体材料&#xff0c;第三代半导体材料代表&#xff0c;主要用于高频射频领域 GaAs&#xff1a; 化合物半导体材料&#xff0c;第二…

在VMware上安装Ubuntu:详细教程

关于VMware和Ubuntu VMware VMware 是一家全球领先的虚拟化和云基础架构解决方案提供商。它提供了多个产品和技术&#xff0c;用于管理和优化计算机资源的使用&#xff0c;实现虚拟化、云计算和数据中心自动化等功能。 以下是 VMware 公司提供的一些主要产品&#xff1a; V…

vue2 jeecg-boot

业务介绍 &#xff1a; 在首页进行数据的添加&#xff0c;添加之后 将数据传递给后端&#xff0c;后端会计算&#xff0c;在返回给前端&#xff0c;前端拿到进行渲染&#xff0c;拿到数据跳转到结果页面&#xff0c;点击存档后&#xff0c;才可以触发下载和浏览&#xff0c;不…

Cisco模拟器-交换机端口的隔离

设计要求将某台交换机的端口划分在不同的VLAN。以实现连接在相同VLAN端口上的计算机可以通信&#xff0c;而连接在不同VLAN端口上的计算机无法通信的目的。 通过设计&#xff0c;一方面可以加强计算机网络的安全&#xff0c;另一方面通过隔绝不同VLAN间的广播包也可以提高网络…

分布式缓存Redis

基于Redis集群解决单机Redis存在的问题&#xff0c;在之前学Redis一直都是单节点部署 单机或单节点Redis存在的四大问题&#xff1a; 数据丢失问题&#xff1a;Redis是内存存储&#xff0c;服务重启可能会丢失数据 > 利用Redis数据持久化的功能将数据写入磁盘并发能力问题…

Windows CPU部署llama2量化模型并实现API接口

目录 模型部署本地运行llama2使用fastapi实现API接口常用git仓库 模型部署 从huggingface下载模型 https://huggingface.co/ 放在本地文件夹&#xff0c;如下 本地运行llama2 from ctransformers import AutoModelForCausalLMllm AutoModelForCausalLM.from_pretrained(&q…