Redis Cluster 单机部署

news2024/11/15 7:57:13

高可用架构-Redis Cluster

Redis服务器支持单机、主从复制、Sentinel、集群部署,部署架构也是由简单到复杂,Redis Cluster 集群架构是官方推荐应对大数据量、大并发场景部署方案。Redis的架构变迁如下图所示,其归属就是Redis Cluster

在这里插入图片描述

Redis Cluster是Redis的分布式实现,其设计主要目标如下:

  • 高性能 高扩展 - 支持线性扩展 最高可达1000个节点。没有中间代理 使用异步复制
  • 允许范围内的写入安全机制 - 系统以最大努力的方式确保主节点写入安全操作,但并不是100%
  • 高可用 - 在节点不可用的情况下,Redis Cluster集群能够保证其他节点的可用性。同时每个主节点可设置最少一个副本节点

不同于Redis Sentinel ,Redis Cluster 采用将数据进行分割处理,每个节点存储整个数据集的一部分,同时为了保证架构的高可用性,每个节点允许N个副本进行数据备份。Redis Cluster 集群将数据从逻辑上分成 16384个Hash 槽,每个Node节点承担16384个槽中的一部分数据。假设Redis Cluster 有三个Node节点,则数据分布如下

SlotsNode
0 - 5460Node #0
5461 - 10922Node #1
10923 - 16383Node #2

简单的原理先介绍到这里,现在开始动手在本地搭建一个Cluster 集群。

单机集群

创建配置

在单机上设置三个节点(Redis Cluster要求最少三个节点),占用端口分别为 60000、60001、60002;使用一下shell脚本自动生成三个节点的配置文件

# 创建 redis_cluster.sh 文件内容如下
for i in 0 1 2 
do
 p=$((6000 + i))
 mkdir -p node_$p 
 cat << EOF > node_$p/redis.conf
 port $p
 cluster-enabled yes
 cluster-config-file cluster.conf
 cluster-node-timeout 5000
 daemonize yes
 appendonly yes
EOF
done
# 对 redis_cluster.sh 文件进行授权
chmod u+x *.sh
# 运行文件
./redis_cluster.sh 
# 查看目录
AndydeMacBook-Pro:cluster andy$ ls
node_6000		node_6001		node_6002		redis_cluster.sh

已经自动生成三个节点的配置文件,下面简单介绍一下配置文件的内容

配置说明

# 查看文件内容
more node_6000/redis.conf
 # 节点占用端口
 port 6000
 # 启动Redis Cluster 集群 
 cluster-enabled yes
 # 定义集群节点 配置存储文件名称
 cluster-config-file cluster.conf
 # 心跳 (ping) 超时时间
 cluster-node-timeout 5000
 # 以后台进程启动
 daemonize yes
 # 开启aof 持久化
 appendonly yes

运行节点

# 编写 run_cluster.sh 批量运行集群
for i in 0 1 2;
  do cd node_$((6000 + i));
redis-server redis.conf& cd -; 
done
# 对 run_cluster.sh 文件进行授权
chmod u+x *.sh
# 运行文件
AndydeMacBook-Pro:cluster andy$ ./run_cluster.sh 
/Users/andy/tool/util/redis-stable/cluster
/Users/andy/tool/util/redis-stable/cluster
/Users/andy/tool/util/redis-stable/cluster

在这里插入图片描述

如上,三个节点已经正常运行。

创建集群

# 使用一下命令创建cluster , 在中途输入yes 使用系统自动分配的hash槽 进行初始化
redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002

在这里插入图片描述

客户端连接

测试Redis Cluster是否工作正常。

AndydeMacBook-Pro:~ andy$ redis-cli -c -p 6000
# x 的key 的hash 槽是 16287 被分配到 6002节点进行存储
127.0.0.1:6000> set x world
-> Redirected to slot [16287] located at 127.0.0.1:6002
OK
# hello 的key 的hash 槽是 866 被分配到 6000节点进行存储
127.0.0.1:6002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:6000
OK

使用redis-cli 连接集群时,需要加上 -c 参数,否则就会出现 (error) MOVED 16287 127.0.0.1:6002错误

img

至此,单机Cluster架构已经搭建完毕,但是似乎并不满足高可用的设计初衷,因为任意节点不可用都会导致服务不正常,接下来我们为每个节点创建一个从节点,复制主节点的数据。

单机主从Cluster

三个主节点 + 三个从节点 那么最少需要创建6个节点才能满足高可用的要求。启动集群也非常的简单,只需要使用标志–cluster replica 1,就能自动创建集群

创建配置

# 重新创建一个 cluster_salve 文件夹  更改 redis_cluster.sh 的内容
for i in 0 1 2 3 4 5
do
 p=$((6000 + i))
 mkdir -p node_$p
 cat << EOF > node_$p/redis.conf
 port $p
 cluster-enabled yes
 cluster-config-file cluster.conf
 cluster-node-timeout 5000
 daemonize yes
 appendonly yes
EOF
done
# 运行脚本
AndydeMacBook-Pro:cluster_slave andy$ ./redis_cluster.sh 

运行节点

# run_cluster.sh 内容如下
for i in 0 1 2 3 4 5;
  do 
  p=$((6000 + i))
  cd node_$p;
redis-server redis.conf& cd -; 
done
# 运行脚本
AndydeMacBook-Pro:cluster_slave andy$ ./run_cluster.sh 

创建集群

AndydeMacBook-Pro:cluster_slave andy$ redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 \
> 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 \
> --cluster-replicas 1

在这里插入图片描述

Cluster 基本命令

查看节点信息

AndydeMacBook-Pro:cluster_slave andy$ redis-cli -c -p 6000 cluster nodes
f6c144b0743c9d32fb85d14fb3508e2a7310a3e7 127.0.0.1:6003@16003 slave 35cf7788e843934944d9690d6d627e6ae56ca7bf 0 1670682923682 1 connected
15a4bd4db978a14458bd0da6d967acf2e4a76214 127.0.0.1:6001@16001 master - 0 1670682922000 2 connected 5461-10922
24fd38e6d58d3969cacd1ee26a6a113fa88d181f 127.0.0.1:6004@16004 slave 15a4bd4db978a14458bd0da6d967acf2e4a76214 
...

查看集群信息

AndydeMacBook-Pro:cluster_slave andy$ redis-cli -c -p 6000 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
....

查看节点ID

127.0.0.1:6000> cluster myid
"35cf7788e843934944d9690d6d627e6ae56ca7bf"

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

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

相关文章

一款功能强大的课程报名系统 v6.2.0

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 课程报名系统可为专为教育培训机构设计的在线选课报名系统&#xff0c;学员可综合考虑课程分类、适合人群、上课地点、上课时间、课程价格等多种选报最合适的班级 课程报名系统发布v6.2…

组件库技术选型和开发环境搭建

点击上方卡片“前端司南”关注我您的关注意义重大原创前端司南本文为稀土掘金技术社区首发签约文章&#xff0c;14天内禁止转载&#xff0c;14天后未获授权禁止转载&#xff0c;侵权必究&#xff01;专栏上篇文章传送门&#xff1a;基于Vite打造业务组件库&#xff08;开篇介绍…

盘点和总结秒杀服务的功能设计及注意事项技术体系

秒杀应该考虑哪些问题 超卖问题 分析秒杀的业务场景&#xff0c;最重要的有一点就是超卖问题&#xff0c;假如备货只有100个&#xff0c;但是最终超卖了200&#xff0c;一般来讲秒杀系统的价格都比较低&#xff0c;如果超卖将严重影响公司的财产利益&#xff0c;因此首当其冲…

0代码20min |微信接入chat-GPT

0代码20min | 微信接入chat-GPT 拥有一个openai账号 这个账号比较麻烦&#xff0c;需要国外手机号认证&#xff0c;这个的话可以直接参考这篇文章ChatGPT注册攻略 - 知乎 (zhihu.com)&#xff0c;这篇文章是用在线接受短信的虚拟号码 - SMS-Activate这个网站来注册账号的。 用…

《操作系统》期末考试试卷2参考答案

《操作系统》期末考试卷&#xff08;第2套&#xff09; 参考答案与评分标准 一、单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 题 号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答 案 D A C C B A D D A B D C A B D 二、填空题&#xff08;…

ADI Blackfin DSP处理器-BF533的开发详解31:汉字/ASIC II 字库(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了汉字库和 ASIC II 码 字库的功能&#xff0c;代码会在编译时&#xff0c;将字库文件加载到内存中&#xff0c;所以必须使用 …

软件测试基础篇(6)

两个测试模型: 一:软件测试V模型:从上到下是一个开发模型&#xff0c;从下到上是一个测试模型(V模型也是瀑布模型的一个变种) 需求分析--->计划---->设计---->编码----->测试 用户需求 验收测试需求分析与…

java基于springboot的共享单车系统-计算机毕业设计

项目介绍 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Ma…

合并有序数组

目录 I.合并有序数组 Time Limit:1s Memory Limit: 256M Description: Input: Output: Sample input: Sample output: 约束&#xff1a; 思路代码: 1.暴力法 1.2暴力代码: 2.双指针(归并排序思路) 2.2双指针代码 总结: 题目链接: I.合并有序数组 Time Limit:1s Me…

专注推荐系统13年,我收获最大的4个成长

‍‍ 作者 | gongyouliu编辑 | gongyouliu我从2010年开始接触推荐系统&#xff0c;到现在差不多有13年了&#xff0c;这13年间我基本没有间断过对推荐系统的学习和实践&#xff08;今年还看了两本推荐系统相关的书籍和一些论文&#xff09;。回顾一下这十几年的经历&#x…

Java项目:SSM高校教职工差旅报销管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能&#xff1a; 管理员登录,修改管理员资料,用户管理,公告管理,报销类型管理,系别信息管理,报销审核管理等功能。 用户角色…

Python webdriver.Chrome()的使用

1.前提 Python与Chrome路径下均安装chromedriver.exe。 2.chromedriver.exe版本选择及下载 下载地址为&#xff1a;http://npm.taobao.org/mirrors/chromedriver/ Chrome版本查看&#xff1a;浏览器右上角三个点->帮助->关于Google Chrome 找到对应的版本&#xff0c;主…

大数据面试之YARN常见题目

大数据面试之YARN常见题目 1 YARN工作机制 1.1 图解 上面有单词少个r&#xff0c;就不改了&#xff0c;大家知道就行。 1.2 文字描述 文字版描述&#xff1a; 1、MapReduce程序提交到Client所在节点&#xff0c;在MR程序的主函数当中有job.waitForCompletion()将任务进行提…

Linux网络-五种IO模型

Linux网络-高级IO零、前言一、什么是IO二、五种IO模型1、阻塞IO2、非阻塞IO3、信号驱动IO4、IO多路转接5、异步IO三、高级IO重要概念1、同步通信 vs 异步通信2、阻塞 vs 非阻塞3、其他高级IO零、前言 本章主要就Linux网络讲解非常重要的一个话题-高级IO 一、什么是IO IO是输入i…

20221211英语学习

今日新词&#xff1a; helplessly adv.无助地&#xff1b;无能为力地 physicist n.物理学家, 物理学研究者 capable adj.有能力的&#xff0c;有才能的&#xff1b;能胜任的&#xff1b;可以…的&#xff1b;容许…的 spokeswoman n.女发言人 production n.产量&#xff1…

卡尔曼滤波应用

卡尔曼滤波器的过程 卡尔曼滤波器的过程分为&#xff1a; 状态方程&#xff1a; xkAxk−1Buk−1ωk−1zkHxkνk这样就得到了状态方程和观测方程的表达式其中xk是状态向量&#xff0c;A是转移矩阵&#xff0c;B是输入转换为状态的矩阵&#xff0c;uk是系统输入&#xff0c;ωk是…

【波段自适应梯度和细节校正:统一遥感融合】

A Unified Pansharpening Model Based on Band-Adaptive Gradient and Detail Correction &#xff08;基于波段自适应梯度和细节校正的统一全色锐化模型&#xff09; 利用全色锐化技术将全色&#xff08;PAN&#xff09;图像与多光谱&#xff08;MS&#xff09;图像融合&…

谈谈Java应用发布时CPU抖动的优化

研究背景 通常情况下应用发布或重启时都存在cpu抖动飙高&#xff0c;甚至打满的现象&#xff0c;这是由于应用启动时&#xff0c;JVM重新进行类加载与对象的初始化&#xff0c;CPU在整个过程中需要进行比平时更多的编译工作。同样&#xff0c;闲鱼的消息系统在重新发布时经常有…

fsQCA+NCA方法的软件操作及注意事项、论文实证分析部分的写作范式

目录前言1 软件操作步骤2 fsQCA方法的详细操作步骤2.1 软件下载2.2 数据的准备2.3 校准点的确定2.4 变量的校准步骤及闪退问题2.5 fsQCA的数据必要性检验&#xff08;开始一次最后一次&#xff09;2.6 频数、一致性水平、PRI一致性水平的确定2.6.1 频数的确定2.6.2 一致性水平、…

【中级ECharts技术】前端框架ECharts的dataset 管理数据对数据可视化的高级dataset 管理

dataset 管理数据 提供一份数据。 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。 option = {legend: {},tooltip: {},dataset: