Redis集群_cluster

cluster集群

  • cluster翻译就是集群,所以cluster集群也叫做redis集群
  • 相比于哨兵模式,cluster集群能支持扩容,并且无需额外的节点来监控状态,所以使用这种模式集群的系统会用的更多些
  • redis cluster采用的是去中心化网络拓扑架构,所有节点既是数据储存节点也是控制节点
  • 引入槽(slot),通过crc+hashslot哈希算法支持多个主节点(分片),每个主节点分别负责储存一部分数据,这样理论上支持无限主节点的水平扩容以便支持海量吞吐量
  • 内置类似哨兵(sentinal)高可用机制,能够实现自动故障转移,保证每个主节点(分片)的高可用

哈希槽

通过某cluster集群是由六台redis服务器组成的,那么每台服务器上也会被平均分配一定数量的的哈希槽,此外,cluster集群里也支持主从复制,即分配到一定数量哈希槽的redis服务器也可以携带一个或多个从节点。

在这里插入图片描述

cluster集群

搭建cluster集群

这里搭建三主三从的cluster集群

新建自定义目录并且加777权限

mkdir -p /root/redis/clusterchmod -R 777 /root/redis/cluster
创建三主三从的配置文件

配置文件位置放到上面创建的目录下

1.cluster-m1.conf

port 6379
dir /redisConfig
logfile cluster-m1.log
cluster-enabled yes
cluster-config-file nodes-6379.conf

解释:

第一行:端口

第二、三行:指定了该节点的日志目录和文件名

第四行:开启cluster集群模式

第五行:自动生成cluster相关配置文件

2.cluster-m2.conf

port 6380
dir /redisConfig
logfile cluster-m2.log
cluster-enabled yes
cluster-config-file nodes-6380.conf

3.cluster-m3.conf

port 6381
dir /redisConfig
logfile cluster-m3.log
cluster-enabled yes
cluster-config-file nodes-6381.conf

4.cluster-s1.conf

port 16379
dir /redisConfig
logfile cluster-s1.log
cluster-enabled yes
cluster-config-file nodes-16379.conf

5.cluster-s2.conf

port 16380
dir /redisConfig
logfile cluster-s2.log
cluster-enabled yes
cluster-config-file nodes-16380.conf

6.cluster-s3.conf

port 16381
dir /redisConfig
logfile cluster-s3.log
cluster-enabled yes
cluster-config-file nodes-16381.conf
启动6个节点的容器
docker run -itd --name redis-m1 -v /root/redis/cluster:/redisConfig:z -p 6379:6379 redis:latest redis-server /redisConfig/cluster-m1.conf

由于通过redis-server启动redis服务器时传入了cluster-m1.conf的配置文件,因此redis-m1自动加入了该集群,此时集群中只有这一个节点

继续将其他节点启动加入集群

docker run -itd --name redis-m2 -v /root/redis/cluster:/redisConfig:z -p 6380:6380 redis:latest redis-server /redisConfig/cluster-m2.confdocker run -itd --name redis-m3 -v /root/redis/cluster:/redisConfig:z -p 6381:6381 redis:latest redis-server /redisConfig/cluster-m3.confdocker run -itd --name redis-s1 -v /root/redis/cluster:/redisConfig:z -p 16379:16379 redis:latest redis-server /redisConfig/cluster-s1.confdocker run -itd --name redis-s2 -v /root/redis/cluster:/redisConfig:z -p 16380:16380 redis:latest redis-server /redisConfig/cluster-s2.confdocker run -itd --name redis-s3 -v /root/redis/cluster:/redisConfig:z -p 16381:16381 redis:latest redis-server /redisConfig/cluster-s3.conf

全部启动,但还未配置主从关系

在这里插入图片描述

进入其中一个节点查看生成的配置文件
[root@localhost cluster]# docker exec -it redis-m1 /bin/bash
root@9d29016966fe:/data# cd /redisConfig/
root@9d29016966fe:/redisConfig# cat nodes-6379.conf
863340d68ac280317d410f2c0fc8f863fb9a74f4 :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0

从第一行可以看出主节点只连接到自身

确定每个节点的ip
docker inspect redis-m1|grep IPAddress
节点名称ip地址端口
redis-m1172.17.0.26379
redis-m2172.17.0.36380
redis-m3172.17.0.46381
redis-s1172.17.0.516379
redis-s2172.17.0.616380
redis-s3172.17.0.716381

进入redis-m1容器中,执行命令

docker exec -it redis-m1 /bin/bash

用以下命令连接节点

redis-cli -p 6379 cluster meet 172.17.0.3 6380
redis-cli -p 6379 cluster meet 172.17.0.4 6381
redis-cli -p 6379 cluster meet 172.17.0.5 16379
redis-cli -p 6379 cluster meet 172.17.0.6 16380
redis-cli -p 6379 cluster meet 172.17.0.7 16381

使用cluster info查看

root@9d29016966fe:/redisConfig# redis-cli
127.0.0.1:6379> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:43
cluster_stats_messages_pong_sent:55
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:103
cluster_stats_messages_ping_received:55
cluster_stats_messages_pong_received:48
cluster_stats_messages_received:103

因为还没有分配槽,所以状态时fail

给主节点分配槽

命令

redis-cli -h 172.17.0.2 -p 6379 cluster addslots n

使用脚本批量执行

vi /root/redis/cluster/setHashSlots.sh
#!/bin/bash
for i in $(seq 0 5460)
do
/usr/local/bin/redis-cli -h 172.17.0.2 -p 6379 cluster addslots $i
done

进入对应容器节点执行

bash /redisConfig/setHashSlots.sh

然后redis-m2分配

#!/bin/bash
for i in $(seq 5461 10922)
do
/usr/local/bin/redis-cli -h 172.17.0.3 -p 6380 cluster addslots $i
done

redis-m3分配

#!/bin/bash
for i in $(seq 10923 16383)
do
/usr/local/bin/redis-cli -h 172.17.0.4 -p 6381 cluster addslots $i
done

以此修改sh文件执行即可

等三个主节点分配完槽之后,查看redis-m1状态

root@9d29016966fe:/data# redis-cli
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:796
cluster_stats_messages_pong_sent:788
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:1589
cluster_stats_messages_ping_received:788
cluster_stats_messages_pong_received:801
cluster_stats_messages_received:1589
获取nodes的id,设置主从关系

在redis-m1上执行

127.0.0.1:6379> cluster nodes
788bb0674543fda50fb9bfabbc4dd598c041e4f6 172.17.0.7:16381@26381 master - 0 1726305277000 5 connected
8211c4e11468743394dc102778a8985708d88925 172.17.0.4:6381@16381 master - 0 1726305278355 2 connected 10923-16383
3c429e47ee9e8cb79457cc9f1556ca5df2a5df92 172.17.0.3:6380@16380 master - 0 1726305276000 4 connected 5461-10922
863340d68ac280317d410f2c0fc8f863fb9a74f4 172.17.0.2:6379@16379 myself,master - 0 1726305276000 1 connected 0-5460
b2adb4177ef4c28715b9aca9b965668a0c6407d1 172.17.0.6:16380@26380 master - 0 1726305278000 0 connected
997c06402f48db3c3925c8d820af5f1695347c36 172.17.0.5:16379@26379 master - 0 1726305279380 3 connected

设置主从关系命令,到从节点中执行

cluster replicate 主节点nodeid

进入redis-s1

docker exec -it redis-s1 /bin/bashredis-cli -p 16379#从节点一对应主节点一的nodeid
cluster replicate 863340d68ac280317d410f2c0fc8f863fb9a74f4

依次将其他从节点也执行

设置完进入主节点一看主从关系

[root@localhost cluster]# docker exec -it redis-m1 /bin/bash
root@9d29016966fe:/data# redis-cli
127.0.0.1:6379> cluster nodes
788bb0674543fda50fb9bfabbc4dd598c041e4f6 172.17.0.7:16381@26381 slave 8211c4e11468743394dc102778a8985708d88925 0 1726305959000 2 connected
8211c4e11468743394dc102778a8985708d88925 172.17.0.4:6381@16381 master - 0 1726305957000 2 connected 10923-16383
3c429e47ee9e8cb79457cc9f1556ca5df2a5df92 172.17.0.3:6380@16380 master - 0 1726305956000 4 connected 5461-10922
863340d68ac280317d410f2c0fc8f863fb9a74f4 172.17.0.2:6379@16379 myself,master - 0 1726305958000 1 connected 0-5460
b2adb4177ef4c28715b9aca9b965668a0c6407d1 172.17.0.6:16380@26380 slave 3c429e47ee9e8cb79457cc9f1556ca5df2a5df92 0 1726305958000 4 connected
997c06402f48db3c3925c8d820af5f1695347c36 172.17.0.5:16379@26379 slave 863340d68ac280317d410f2c0fc8f863fb9a74f4 0 1726305959588 1 connected
在cluster集群中读写数据
root@9d29016966fe:/data# redis-cli -c
127.0.0.1:6379> set name yohoo
-> Redirected to slot [5798] located at 172.17.0.3:6380
OK

解释:

-c是为了避免因为槽导致的设置数据失败

在到其他节点去读

root@2564e5d44d2e:/data# redis-cli -p 16379 -c
127.0.0.1:16379> get name
-> Redirected to slot [5798] located at 172.17.0.3:6380
"yohoo"

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

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

相关文章

2024.9.14(RC和RS)

一、replicationcontroller (RC) 1、更改镜像站 [rootk8s-master ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io",&…

探索UWB技术的独特优势:实现高精度定位

UWB定位技术是一种利用无线信号进行精确位置定位的技术,它利用超宽带无线电信号通过测量信号的到达时间、相位差和信号能量等参数来确定物体的精确位置。 UWB定位技术具有多种优势,首先,它具有较高的定位精度,可实现毫米级的精确…

哈工大“计算机设计与实践”(cpu)处理器实验设计报告

哈工大“计算机设计与实践”(cpu)处理器实验设计报告 【哈工大“计算机设计与实践”(cpu)处理器实验设计报告】 在计算机科学领域,CPU(中央处理器)是计算机系统的核心部件,负责执行指…

性能诊断的方法(四):自下而上的资源诊断方法和发散的异常信息诊断方法

关于性能诊断的方法,我们可以按照“问题现象—直接原因—问题根源”这样一个思路去归纳。我们先从问题的现象去入手,包括时间的分析、资源的分析和异常信息的分析。接下来再去分析产生问题现象的直接原因是什么,这里我们归纳了自上而下的资源…

C语言 13 指针

指针可以说是整个 C 语言中最难以理解的部分了。 什么是指针 还记得在前面谈到的通过函数交换两个变量的值吗&#xff1f; #include <stdio.h>void swap(int, int);int main() {int a 10, b 20;swap(a, b);printf("a %d, b %d", a, b); }void swap(int …

Python编码系列—Python建造者模式:构建复杂对象的优雅之道

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

传知代码-融合经典与创新的图像分类新途径

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 在当前的深度学习领域&#xff0c;构建兼具高性能与灵活性的卷积神经网络&#xff08;CNN&#xff09;已成为计算机视觉研究的核心课题。本文介绍了一种全新的卷积神经网络架构&#xff0c;该网络巧妙地结合…

OZON电子产品大幅增长,OZON跨境PS5销量激增

Top1 存储卡 Карта памяти Canvas Select Plus 128 ГБ 商品id&#xff1a;1548303593 月销量&#xff1a;2131 欢迎各位卖家朋友点击这里&#xff1a; &#x1f449; D。DDqbt。COm/74rD 免费体验 随着智能手机和平板电脑的普及&#xff0c;用户对于存储空…

vite + vue3 + ts 移动端开箱即用现代开发模板

中文 | English SouthernWind https://blog.csdn.net/nanchen_J?typeblog sw-template vite vue3 ts 移动端开箱即用现代开发模板 特点 &#x1f436; Vite 的Vue3 的文件路由布局系统Mock 后续支持Api 自动引入组件自动引入VueUse 支持TypeScript 的Tailwind css 的暗…

Gitlab实现多项目触发式自动CICD

工作中可能会遇到这种场景&#xff0c;存在上游项目A和下游项目B&#xff0c;项目B的功能依赖项目A&#xff08;比如B负责日志解析&#xff0c;A是日志描述语言代码&#xff09;&#xff0c;这种相互依赖的项目更新流程一般如下&#xff1a; A项目更新&#xff0c;通知B项目开发…

好用的电脑监控软件推荐!分享六个企业必备的电脑监控软件,赶紧Get吧!

数字化办公日益普及&#xff0c;由于工作的需要&#xff0c;几乎每个员工都有自己的电脑&#xff0c;并且大多数电脑都接入了互联网。 这使得电脑监控软件&#xff0c;变为企业管理中必不可少的一部分&#xff01;它们不仅能够帮助管理者实时了解员工的工作状态&#xff0c;提…

充电宝什么品牌比较好用?2024年最值得推荐充电宝品牌!

近年来&#xff0c;随着电子设备使用需求的增加&#xff0c;充电宝市场呈现出蓬勃发展的态势。优秀的充电宝产品不仅能够提供稳定的充电速度&#xff0c;还具备方便携带的体验&#xff0c;深受用户喜爱。然而&#xff0c;面对市场上众多品牌和型号的选择&#xff0c;如何找到最…

Linux云计算 |【第二阶段】SHELL-DAY5

主要内容&#xff1a; awk命令、内置变量&#xff08;FS、$0、$1、$2、NF、NR&#xff09;、过滤时机&#xff08;BEGIN{}、{}、END{}&#xff09;、处理条件&#xff08;正则、&&、||、~\!~、等&#xff09;、awk数组、监控脚本、安全检测脚本 一、awk介绍 awk 是一…

基于微信平台的旅游出行必备商城小程序+ssm(lw+演示+源码+运行)

摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

影视直冲?对接卡券特权充值接口对于用户来说有什么优势?

对用户来说有哪些优势&#xff1a; 便利性&#xff1a;用户可以直接在应用程序或网站上充值和使用卡券&#xff0c;无需通过多个平台或渠道&#xff0c;提高了用户体验。实时性&#xff1a;卡券充值和使用状态可以实时更新&#xff0c;用户可以立即看到余额变化和卡券状态。安…

移动硬盘无法读取?别慌!这些方法助你恢复数据!

在我们的日常工作和生活中&#xff0c;移动硬盘作为重要的数据存储工具&#xff0c;承载着珍贵资料。然而&#xff0c;移动硬盘无法被电脑读取的情况时有发生&#xff0c;令人焦急。别慌&#xff0c;下面为大家详细介绍恢复移动硬盘数据的有效方法。 一、检查硬件连接和驱动问题…

麒麟桌面操作系统:查看最近安装与卸载的软件包

麒麟桌面操作系统&#xff1a;查看最近安装与卸载的软件包 1、查看最近安装的deb包2、查看最近卸载的deb包 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在麒麟桌面操作系统中&#xff0c;快速查看最近安装与卸载的软件包非常简单。这里有…

【多因子分组箱线图】:附Origin详细画图教程

目录 No.1 理解箱线图 1 什么是箱线图 2 箱线图的组成 No.2 画图流程 1 导入数据并绘图 2 设置绘图细节 3 设置坐标轴 4 效果图 No.1 理解箱线图 1 什么是箱线图 箱线图&#xff0c;又称箱形图、盒须图或盒式图&#xff0c;用于体现数据分散情况的统计图。在视觉上辅助…

大数据新视界 --大数据大厂之数据挖掘入门:用 R 语言开启数据宝藏的探索之旅

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

猜数-while-python

题目要求&#xff1a; 设置一个范围1-100的随机整数变量&#xff0c;通过while循环&#xff0c;诶和input语句&#xff0c;判断输入的数字是否等于随机数 无限次机会&#xff0c;直到猜中为止每一次不猜中都&#xff0c;会提示大了小了猜完数字后&#xff0c;提示裁了几次 imp…