Redis7.x安装系列教程(四)集群部署原理详解

news2024/12/25 1:30:16
1、什么是集群部署

Redis集群(cluster)是Redis的一种分布式运行模式,通过分片(sharding)提供数据的自动分区和管理,实现数据的高可用性和可扩展性。

在集群模式下,数据分布在多个Redis节点上,节点分为主节点和从节点。主节点负责读写请求和维护集群信息,从节点只进行复制主节点的数据和状态信息。

1.1、集群数据分片

Redis 集群的数据分片是通过哈希槽(hash slots)实现的。Redis 集群有16384个哈希槽(编号:0~16383),集群每个节点负责管理一部分哈希槽。

每个key通过CRC16校验后对16384取余映射到某个哈希槽上,通过这个值,可以找到对应的哈希槽对应的节点,直接自动跳转到这个节点进行存取操作。

以集群3个节点为例详解:
节点分布计算每个约 16384/3=5461.33,取整。
节点1哈希槽:0~5460
节点2哈希槽:5461~10922
节点3哈希槽:10923~16383
1.2、集群优点
  • 集群分片数据分散到多个节点,突破了Redis单机内存大小的限制,增加存储容量
  • 每个主节点都可对外提供读写服务,提高集群响应能力
  • 高可用,支持主从复制和主节点自动故障转移
1.3、整体架构图

在这里插入图片描述

2、环境准备&部署说明

集群配置为3主3从模式,也就是每台服务器上有两个Redis节点,分别为主节点master和从节点slave。

环境说明

服务器1:192.168.242.44
服务器2:192.168.242.45
服务器3:192.168.242.46

初始配置:主节点端口:6379 ,从节点端口:6380

每个节点都有6379和6380两份配置

部署步骤说明:

  • 先在3个虚拟服务器上创建存放集群配置目录和存储数据目录
  • 复制redis.conf到存放集群配置目录,命名为redis_6379.conf
  • 修改redis_6379.conf,再复制出redis_6380.conf并修改
  • 3个虚拟服务器都配置相同的63796380redis.conf
  • 3个虚拟服务器都以63796380redis.conf启动redis服务
  • 在其中一个虚拟服务器,执行命令创建3主3从集群
  • 故障模拟44主节点下线,再恢复44节点服务
3 、配置Redis

分别在3个虚拟服务器上创建存放集群配置目录和存储数据目录

#存放集群配置的目录
mkdir /opt/apps/server/redis/redis-stable/cluster
#存储数据目录
mkdir /opt/apps/server/redis/cluster

以单机部署的redis.conf复制一份到/redis-stable/cluster/

# 切换到集群配置的目录
cd /opt/apps/server/redis/redis-stable/cluster
# 因需要两份,配置以端口后缀命名
cp redis.conf cluster/redis_6379.conf

集群配置–通用配置:

# 允许所有的IP地址
bind * -::*
# 后台运⾏
daemonize yes
# 开启集群模式
cluster-enabled yes
# 集群节点超时时间,默认15000
cluster-node-timeout 5000
# 数据存储⽬录
dir "/opt/apps/server/redis/cluster"
# 开启AOF持久化
appendonly yes

集群配置–不需要密码【二选一】:

如果选择该配置,后面相关启动命令都不需要加-a pass

# 保护模式,默认开启,no 关闭, yes 开启,需要配置requirepass
protected-mode no 

集群配置–需要密码【二选一】:

如果选择该配置,后面相关启动命令都需要加-a pass,我选择是这个配置。

# 保护模式,默认开启,no 关闭, yes 开启,需要配置requirepass
protected-mode yes 
# 保护模式是yes时,才需要设置,密码验证
requirepass 123456
# 主节点密码验证
masterauth 123456

集群配置–需要端口变化–端口6379:

如果是多台服务器,就可以同一个配置即可,相当于3主3从需要6台服务器。

# 端⼝
port 6379
# log⽇志
logfile "/opt/apps/server/redis/redis-stable/cluster/redis_6379.log"
# 集群节点配置⽂件,该文件不手工配置
cluster-config-file nodes-6379.conf
# AOF⽂件名
appendfilename "appendonly_6379.aof"
# RBD⽂件名
dbfilename "dump_6379.rdb"

redis_6379.conf按以上配置好后,复制一份配置出来,文件命名为redis_6380.conf

# 复制文件
cp redis_6379.conf redis_6380.conf

集群配置–需要端口变化–端口6380:

其他配置按上面的配置参考不变。

# 端⼝
port 6380
# log⽇志
logfile "/opt/apps/server/redis/redis-stable/cluster/redis_6380.log"
# 集群节点配置⽂件,该文件不手工配置
cluster-config-file nodes-6380.conf
# AOF⽂件名
appendfilename "appendonly_6380.aof"
# RBD⽂件名
dbfilename "dump_6380.rdb"

配置好44节点的redis_6379.confredis_6380.conf远程拷贝到45、46节点:

如果想熟悉过程,可以按上面的配置参考操作。

scp redis_6379.conf root@192.168.242.45:/opt/apps/server/redis/redis-stable/cluster/
scp redis_6380.conf root@192.168.242.45:/opt/apps/server/redis/redis-stable/cluster/

scp redis_6379.conf root@192.168.242.46:/opt/apps/server/redis/redis-stable/cluster/
scp redis_6380.conf root@192.168.242.46:/opt/apps/server/redis/redis-stable/cluster/

远程copy需要用户自己确认并输入密码,如下:

在这里插入图片描述

4、启动redis 集群服务和查看状态

配置⽂件准备完成之后,启动所有redis服务,⽤cluster配置⽂件

3台服务器都需要,简便方法是设置发送键盘输入的所有会话(打开3个服务器)

# 切换到cluster配置所在目录
cd /opt/apps/server/redis/redis-stable/cluster/
# 配置⽂件准备完成之后,启动所有redis服务,⽤cluster配置⽂件
redis-server redis_6379.conf
redis-server redis_6380.conf

检查服务状态,必须是正常启动且是cluster

# 检查服务状态
ps aux|grep redis

在这里插入图片描述

创建3主3从集群模式,每⼀个主节点带⼀个从节点 ,在其中一个服务器上执行一次即可

# 创建3主3从集群模式,每⼀个主节点带⼀个从节点
# --cluster-replicas 后面带的数字1表示1个从节点
redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.242.44:6379 192.168.242.44:6380 192.168.242.45:6379 192.168.242.45:6380 192.168.242.46:6379 192.168.242.46:6380 

在这里插入图片描述

查看集群相关信息,如果是保护模式都需要加授权-a pass

# 查看集群信息
redis-cli -a 123456 cluster info
# 查看单个节点信息
redis-cli -a 123456 info replication
# 查看集群节点身份信息
redis-cli -a 123456 cluster nodes

查看集群信息

在这里插入图片描述

查看单个节点信息

在这里插入图片描述

查看集群节点身份信息

在这里插入图片描述

5、故障模拟

下线主节点192.168.242.44:6379,看集群节点信息

# 在主节点上执行
redis-cli -p 6379 -a 123456 shutdown

再上线节点:192.168.242.44:6379,状态会变化为从节点

# 切换到配置目录
cd /opt/apps/server/redis/redis-stable/cluster
# 重新启动44:6379服务
redis-server redis_6379.conf

看集群节点信息对比信息

在这里插入图片描述

6、我的公众号

敬请关注我的公众号:大象只为你,持续更新技术知识…

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

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

相关文章

Pytorch如何判断两个模型的权重是否相同(比较权重差异/参数字典)

参考资料: GPT-4o mini的回答 第一种方法是使用md5sum这个命令(Linux上),但是由于环境的不同,哪怕是load之后转存似乎都会有差,所以效果不大。 第二种方法是使用代码比较,这段代码是我找GPT要的,感觉非常不…

Linux线程间通信学习记录(线程同步)

0.线程间通信的方法 (1).全局变量(要结合同步机制) (2).信号量 (3).P操作 (4).V操作 一.线程同步 同步:指的是多个任务按照约定的先后次序相互…

OpenCV图像滤波(19)计算图像每个像素点的邻域内的平方和函数sqrBoxFilter()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算覆盖在滤波器上的像素值的平方和。 对于源图像中的每一个像素 (x, y),函数计算那些与放置在像素 (x, y) 上的滤波器重叠的邻域像…

【百度】25届秋招内推码

内推码 IV1RBB 介绍 📣 百度TPG技术中台事业群组—深度学习技术平台部 25届校招正在进行中,可通过定向内推形式get校招绿色通道 ! 欢迎联系我定向内推 🌟【部门介绍】 飞桨(PaddlePaddle)以百度多年的深度…

坐牢第二十七天(聊天室)

基于UDP的网络聊天室 一.项目需求: 1.如果有用户登录,其他用户可以收到这个人的登录信息 2.如果有人发送信息,其他用户可以收到这个人的群聊信息 3.如果有人下线,其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息…

idea 遇到依赖引入失败问题

在引入 aspects 的相关依赖时&#xff0c;没有找到这个版本 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.0.0-M2</version> </dependency> 第一次尝试&#xff…

C++编程:生产者-消费者模型中条件变量的使用问题及优化方案

文章目录 0. 引言1. 生产者-消费者模型简介1.1 示例代码1.2 为什么必须加锁&#xff1f; 2. 上述代码存在的问题2.1 信号丢失2.2 锁的作用范围2.3 竞态条件 3. 优化方案3.1 使用两个条件变量3.2 扩展锁的作用域3.3 使用原子操作3.4 使用无锁队列 4. 底层实现与深入探讨5. 流程图…

『 C++ 』IO流

文章目录 IO流概述iostream 的标准对象C流和C标准库I/O函数的同步 sync_with_stdiofstream 文件流文件流的打开标志二进制读写二进制读写的浅拷贝问题文本读写 字符串流注意 IO流概述 流是指数据的有序传输序列,路表示数据从一个地方流向另一个地方的过程,流可以是输入流也可以…

欧盟新规:苹果App Store开发者需公开联系方式,透明度提升还是隐私挑战?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 随着数字经济的蓬勃发展&#xff0c;欧盟对数字服务的监管也在不断加强。最近&#xff0c;苹果公司宣布了一项针对欧盟App Store的新政策&#…

Lesson 67 The weekend

Lesson 67 The weekend 词汇 greengrocer 菜市场 构成&#xff1a;green n. 绿色的    grocer n. 食杂店&#xff0c;小卖店 商店词汇&#xff1a;shop n. 商店      store n. 小店      market n. 市场      super market 超市      Sunday market 二…

Codeforces Round 949 (Div. 2) C.D构造和E题

C题链接 D题链接 E题链接 C题思路&#xff1a; 我们设相邻的两个-1的位置是的值是l和r&#xff0c;他们直接的距离是d(也就是r的下标减l的下标)。 思路1&#xff1a;直接模拟操作&#xff0c;看所有操作里是否有合法操作。 比如1 -1 -1 -1 -1 -1 7. 容易想到1*213,3*217&a…

psychopy 中文语义相关判断任务实验设计

参考文献&#xff1a; [石如彬, 谢久书, 杨梦情, & 王瑞明. (2022). 语言和情境对具体概念感知运动仿真的影响. 心理学报, 54(6), 583–594. https://doi.org/10.3724/SP.J.1041.2022.00583] 2.2.4实验1。 演示效果 按下“上方向键” 按F或J 反馈信息&#xff1a; 实验步骤…

C#中的S7协议

S7协议-S7COMM S7COMM 进行写 CTOP->PDU type已知枚举值 0X0E连接请求0x0d连接确认0x08断开请求0x0c断开确认0x05拒绝访问0x01加急数据0x02加急数据确认0x04用户数据0x07TPDU错误0x0f数据传输 S7Header->ROSCTR已知枚举值 0X01JOB REQUEST。主站发送请求0x02Ack。从站…

jmeter压测websocket

1、jmeter安装websocket插件 下载地址 pjtr / JMeter WebSocket Samplers / Downloads — Bitbucket 下载之后&#xff0c;放到lib/ext文件夹下&#xff0c;重启jmeter即可&#xff0c;看到下图这些证明插件安装成功 2、脚本 新建websocket request-response sampler

day05-SpringBootWeb请求响应学习笔记

上面说过&#xff0c;浏览器向服务端发送请求&#xff0c;服务端会给浏览器发送出响应&#xff0c;无论是哪种&#xff0c;都包含三部分。这一章&#xff0c;依旧围绕这部分内容 请求 Postman 由于前后端分离&#xff0c;对我们后端技术人员来讲&#xff0c;在开发过程中&…

SpringBoot——整合Swagger

目录 Swagger Swagger工具集 Swagger注解 项目总结 新建SpringBoot项目 pom.xml Swagger2Config配置类 User实体类 UserController控制器 项目测试 添加用户 修改用户 查询用户 删除用户 Swagger Swagger是一款基于RESTful接口的用于文档在线自动生成和功能测试的开…

揭开虚拟与现实的帷幕:二进制世界与道

本章将带领读者进入一个结合科学与哲学的思维世界&#xff0c;从一个全新的视角探讨二进制世界的概念&#xff0c;结合超弦理论和老子的“道”哲学&#xff0c;深入理解计算机底层的运行原理及其与宇宙本质的联系。通过回顾经典电影《黑客帝国》以及最新的人工智能发展&#xf…

Android经典实战之Kotlin 2.0 迁移指南:全方位优化与新特性解析

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 Kotlin 2.0 迁移指南&#xff1a;开发者如何迎接新时代 Kotlin 2.0&#xff0c;这个备受期待的版本&#xff0c;终于在 JetBrains 的精心打磨下…

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载 各种文本文件预览&#xff08;pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件&#xff09; 其中 除p…

【LeetCode Cookbook(C++ 描述)】一刷二叉树综合(上)

目录 LeetCode #226&#xff1a;Invert Binary Tree 翻转二叉树「遍历」「分而治之」广度优先搜索&#xff1a;层序遍历 LeetCode #101&#xff1a;Symmetric Tree 对称二叉树递归法迭代法 LeetCode #100&#xff1a;Same Tree 相同的树递归法迭代法 LeetCode #559&#xff1a;…