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

文章目录

  • 前言
  • 一、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.mzph.cn/news/591065.shtml

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

相关文章

图像分割实战-系列教程9:U2NET显著性检测实战1

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 U2NET显著性检测实战1 1、任务概述

安全数据交换系统:有效提升网间文件交换能力

各级政府部门和金融、能源、电力这些行业,以及一些大中型企业组织,为了保护内部的重要数据不外泄,普遍都采用了多网络并行的方式,也是做了网络隔离划分,不同的网络拥有不同的密级以及人员权限。然后再通过安全数据交换…

【C++学习】:命名空间、输入输出和缺省参数全面解析

🎥 屿小夏 : 个人主页 🔥个人专栏 : C入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 命名空间1.1 为什么需要命名空间?1.2 命名空间的定义1.3 命名空间特性1…

GC6236,GC6208,GC6209镜头驱动芯片选型,多应用于摄像机镜头,家庭监控云台驱动等产品中

国产芯片GC6236,GC6208,GC6209 为5V摄像机镜头驱动芯片,电压范围在3~5.5(V),最大持续电流可达0.8(A)最高工作温度在-40~100之间。其特点都具有5V多通道,低噪步进电机驱动和霍尔自动光圈驱动等。可应用在摄像机镜头,家庭…

千里马2023年终总结-android framework实战

背景: hi粉丝朋友们: 2023年马上就过去了,很多学员朋友也都希望马哥这边写个年终总结,因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发,差点都忘记了这个事情了,今天特别花时间来写个bl…

混合编程—C++程序中python脚本的嵌入方法(理论部分)

一、C与Python高级编程语言简概 (一)C C是一种被广泛使用的计算机程序设计语言。它是一种通用程序设计语言,支持多重编程范式,例如过程化程序设计(Procedural programming)、面向对象程序设计(…

大数据背后的绿色收割:基于Hadoop的农产品价格信息智能分析

大数据背后的绿色收割:基于Hadoop的农产品价格信息智能分析 引言正文1. 数据获取与准备2. 数据清洗与处理3. Hadoop数据分析引擎的运用4. MySQL数据库的集成5. 创新性的可视化6. 结论与展望 结语 引言 随着信息技术的不断发展,农业领域也在数字化的浪潮…

electron预加载脚本

webPreferences 指定预加载脚本,可以使用部分node脚本 webPreferences: {preload: path.join(__dirname, "preload.js"),},创建preload.js 中 测试文件读取功能 const fs require(fs) const text fs.readFileSync(package.json, utf-8)console.log(text)报错,为了…

云计算复习提纲

第一章 大数据的概念:海量数据的规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策 大数据的特点:①数据量大,存储的数据量巨大,PB级别是常态;②多样,数…

SpringBoot快速集成多数据源(自动版)

有些人因为看见所以相信,有些人因为相信所以看见 有目录,不迷路 前期准备实现演示参考 最近研究了一下多数据源,这篇博客讲的是简单模式,下篇博客预计写自动切换模式 前期准备 本篇博客基于SpringBoot整合MyBatis-plus&#xff0…

vue保姆级教程----深入了解Vuex的工作原理

📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 &#x1f4…

Gen-AI 的知识图和分析(无需图数据库)

如今,图表比以往任何时候都更加相关和有用。由于目前正在发生的人工智能革命,工程师们正在考虑围绕 Gen-AI 的机会,利用具有动态提示、数据基础和屏蔽功能的开放 Gen-AI 解决方案,这进一步促使他们思考知识图谱等有效的解决方案。…

Ansible自动化运维(一)简介及部署、清单

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

Vue2 - Vue.observable 介绍

目录 1,介绍2,使用场景和 Vue 实例的区别 1,介绍 官网参考 可以让一个对象变成响应式数据。在 Vue 内部就是用它来处理传递给 Vue 的 data 对象,或是在单文件组件中 data() 返回的对象。 var vm new Vue({data: {count: 0} })…

MySQL数据库学习二

2 MySQL InnoDB 锁的基本类型 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 官网把锁分成了 8 类。所以我们把前面的两个行级别的锁(Shared and ExclusiveLocks),和两个表级别的锁(Intention Locks)…

游泳耳机到底怎么选?一文说全游泳耳机哪个好!

对于一个热爱游泳的人,每次游泳都希望找到一种好的方式来打发时间,同时也希望能够得到一些锻炼。在尝试了各种游泳装备之后,发现游泳耳机是一个非常不错的选择,不过市面上的游泳耳机鱼龙混杂,所以游泳耳机的选择需要综…

深度学习|2.11 向量化vectorization

2.11 向量化的作用 向量化可以使得向量中的每一个维度的数据进行并行计算,从而加快了神经网络的计算速度。 验证 其他

超市订单管理系统

比较简单的超市订单管理系统

4.28 构建onnx结构模型-Unfold

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Unfold 结点进行分析 方式 方法…

电子书推荐|VMware 替代与升级攻略:技术路线、产品对比与用户实践

在进行 VMware 国产化替代时,您是否会遇到以下问题: 如何实现 VMware 整体架构/部分组件替换?是否可以不仅“为替换而替换”,而是同时实现架构的升级,带来更多业务价值?哪些国产方案具备 VMware 同等能力&…