Redis 集群实操:强大的数据“分身术”

目录

Redis Cluster集群模式

1、介绍

2、架构设计

3、集群模式实操

4、故障转移

5、常用命令


Redis Cluster集群模式

1、介绍

redis3.0版本推出的Redis Cluster 集群模式,每个节点都可以保存数据和整个集群状态,每个节点都和其他所有节点连接。Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。

2、架构设计

  1. Redis 集群是一种分布式架构,数据被分片存储在多个节点上。
  2. 每个节点可以同时处理读写请求,这样可以有效分担负载。
  3. 数据通过哈希槽进行分片,整个集群最多支持 16384 个哈希槽。每个键在写入时会通过哈希函数计算出其对应的哈希槽,进而确定存储在哪个节点上。7c5a96567da4481f9c342d9fea904382.gif

图片来源:最通俗易懂的 Redis 架构模式详解 - 墨天轮

3、集群模式实操

3.1、环境准备

Redis集群需要至少3个主节点和3个从节点组成,这样在主节点出现故障时,可以通过从节点提供持久化数据访问,保证系统的可用性。所以我们这里准备三台Linux服务器,6个节点来做这个实验。

10.211.55.526379
6380
10.211.55.536379  
6380
10.211.55.546379
6380

三台均需下载安装redis

精简版
[root@iycms ~]# wget http://download.redis.io/releases/redis-7.2.6.tar.gz
[root@iycms /]# tar -zxvf /root/redis-7.2.6.tar.gz  -C /usr/
[root@iycms /]# cd /usr/redis-7.2.6/
[root@iycms redis-7.2.6]# make

创建配置文件存放目录、数据存放目录(所有服务器均需要)

mkdir -p /usr/redis-7.2.6/redis_63{79,80}/conf
mkdir -p /var/redis/63{79,80}/{pid,log}

编写集群配置文件(所有服务器均需,注意端口号修改)

vim /usr/redis-7.2.6/redis_6379/conf/redis.conf
#录入以下信息
#快速修改::%s/6379/6380/g
#绑定端口
port 6379 
#绑定地址 
bind 0.0.0.0  
#守护模式启动
daemonize yes  
#pid存放地址
pidfile /var/redis/6379/run/redis_6379.pid
#log存放地址
logfile /var/redis/6379/log/redis_6379.log
数据存储目录
dir /var/redis/6379 
#是否以集群模式启动 
cluster-enabled yes  
#生成的集群配置文件名
cluster-config-file nodes-6379.conf  
#超时时间,超过即下线
cluster-node-timeout 5000  
#AOF模式
appendonly yes
#关闭保护模式
protected-mode no

3.2、启动集群

每台服务器执行

[root@master ~]# /usr/redis-7.2.6/src/redis-server /usr/redis-7.2.6/redis_6379/conf/redis.conf 
[root@master ~]# /usr/redis-7.2.6/src/redis-server /usr/redis-7.2.6/redis_6380/conf/redis.conf 

启动查看进程可以看到cluster

[root@master ~]# ps -ef | grep redis
root        8833       1  0 13:09 ?        00:00:00 /usr/redis-7.2.6/src/redis-server 0.0.0.0:6379 [cluster]
root        8840       1  0 13:09 ?        00:00:00 /usr/redis-7.2.6/src/redis-server 0.0.0.0:6380 [cluster]
root        8848    8466  0 13:10 pts/1    00:00:00 grep --color=auto redis

查看集群配置文件


[root@master ~]# vim /var/redis/6379/nodes-6379.conf a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 :0@0,,tls-port=0,shard-id=3e19853b240c5212b80b60093d61c05e4944dc81 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0#a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9:0@0代表唯一标识符。
#connected表示节点已经成功加入集群

3.3、加入集群

查看集群所有节点cluster nodes

[root@master ~]# /usr/redis-7.2.6/src/redis-cli 
127.0.0.1:6379> cluster nodes
a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 :6379@16379 myself,master - 0 0 0 connected

很明显现在各个节点虽然启动了,但是没有加入到同一集群,现在我们需要创建并加入集群

[root@master ~]# /usr/redis-7.2.6/src/redis-cli --cluster create 10.211.55.52:6379 10.211.55.52:6380 10.211.55.53:6379 10.211.55.53:6380 10.211.55.54:6379 10.211.55.54:6380 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.211.55.53:6380 to 10.211.55.52:6379
Adding replica 10.211.55.54:6380 to 10.211.55.53:6379
Adding replica 10.211.55.52:6380 to 10.211.55.54:6379
M: a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 10.211.55.52:6379slots:[0-5460] (5461 slots) master
S: 80c0cb2658770e28900e0f331001f3e6aa4b8f46 10.211.55.52:6380replicates c7a60dbe6b19408bcd2fe4025d692217ac056727
M: 58614a8515f84090c6ba38d9755148b985c136cb 10.211.55.53:6379slots:[5461-10922] (5462 slots) master
S: a5bffa3f5c7a47fae9d3436614d0ba6a91692447 10.211.55.53:6380replicates a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9
M: c7a60dbe6b19408bcd2fe4025d692217ac056727 10.211.55.54:6379slots:[10923-16383] (5461 slots) master
S: d7110c436b1f345a07cb85a59050298576172820 10.211.55.54:6380replicates 58614a8515f84090c6ba38d9755148b985c136cb
Can I set the above configuration? (type 'yes' to accept): 
#填入yes

--cluster-replicas 1 选项告诉 Redis 每个主节点应该有一个从节点。

在这里从节点的分配不是静态的。在集群运行过程中,如果主节点出现故障,其从节点可能会被提升为主节点

3.3.1、查看下集群的所有节点及其他信息

哈希槽、主从关系

127.0.0.1:6379> cluster nodes
a5bffa3f5c7a47fae9d3436614d0ba6a91692447 10.211.55.53:6380@16380 slave a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 0 1734374444589 1 connected
a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 10.211.55.52:6379@16379 master - 0 1734374445631 1 connected 0-5460
c7a60dbe6b19408bcd2fe4025d692217ac056727 10.211.55.54:6379@16379 master - 0 1734374445000 5 connected 10923-16383
d7110c436b1f345a07cb85a59050298576172820 10.211.55.54:6380@16380 slave 58614a8515f84090c6ba38d9755148b985c136cb 0 1734374445525 3 connected
80c0cb2658770e28900e0f331001f3e6aa4b8f46 10.211.55.52:6380@16380 slave c7a60dbe6b19408bcd2fe4025d692217ac056727 0 1734374444896 5 connected
58614a8515f84090c6ba38d9755148b985c136cb 10.211.55.53:6379@16379 myself,master - 0 1734374444000 3 connected 5461-10922

3.3.2、查询哈希槽分配

[root@master ~]# /usr/redis-7.2.6/src/redis-cli -c -h 10.211.55.52 -p 6379 cluster slots
1) 1) (integer) 02) (integer) 54603) 1) "10.211.55.52"2) (integer) 63793) "a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9"4) (empty array)4) 1) "10.211.55.53"2) (integer) 63803) "a5bffa3f5c7a47fae9d3436614d0ba6a91692447"4) (empty array)
2) 1) (integer) 54612) (integer) 109223) 1) "10.211.55.53"2) (integer) 63793) "58614a8515f84090c6ba38d9755148b985c136cb"4) (empty array)4) 1) "10.211.55.54"2) (integer) 63803) "d7110c436b1f345a07cb85a59050298576172820"4) (empty array)
3) 1) (integer) 109232) (integer) 163833) 1) "10.211.55.54"2) (integer) 63793) "c7a60dbe6b19408bcd2fe4025d692217ac056727"4) (empty array)4) 1) "10.211.55.52"2) (integer) 63803) "80c0cb2658770e28900e0f331001f3e6aa4b8f46"4) (empty array)

3.4、向集群加入数据并查询

注意:写数据的时候要注意连接到正确的地址,否则会提示

(error) MOVED 5798 10.211.55.53:6379

这是MOVED重定向

加上参数-c即可处理(-c无所谓你的Redis是否是集群模式)

/usr/redis-7.2.6/src/redis-cli -c -h 127.0.0.1 -p 6379

[root@master ~]# /usr/redis-7.2.6/src/redis-cli -c -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name zhangjj
-> Redirected to slot [5798] located at 10.211.55.53:6379
OK

3.4.1、查看录入的数据

 /usr/redis-7.2.6/src/redis-cli -c -h 10.211.55.54 -p 6379 get name

[root@master ~]# /usr/redis-7.2.6/src/redis-cli -c -h 10.211.55.54 -p 6379 get name  
"zhangjj"
[root@master ~]# /usr/redis-7.2.6/src/redis-cli -c -h 10.211.55.53 -p 6379 get name  
"zhangjj"

4、故障转移

已知10.211.55.52:6379是10.211.55.53:6380的主节点。现杀掉52的6379

[root@master ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:16379           0.0.0.0:*               LISTEN      9047/redis-server 0 
tcp        0      0 0.0.0.0:16380           0.0.0.0:*               LISTEN      9040/redis-server 0 
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      793/cupsd           
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      9047/redis-server 0 
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      9040/redis-server 0 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      794/sshd: /usr/sbin 
tcp6       0      0 ::1:631                 :::*                    LISTEN      793/cupsd           
tcp6       0      0 :::22                   :::*                    LISTEN      794/sshd: /usr/sbin 
[root@master ~]# kill -9 9047

查看变化

10.211.55.53:6380自动升为主节点

[root@master ~]# /usr/redis-7.2.6/src/redis-cli -c -p 6380
127.0.0.1:6380> cluster nodes
c7a60dbe6b19408bcd2fe4025d692217ac056727 10.211.55.54:6379@16379 master - 0 1734376636144 5 connected 10923-16383
58614a8515f84090c6ba38d9755148b985c136cb 10.211.55.53:6379@16379 master - 0 1734376635721 3 connected 5461-10922
a5bffa3f5c7a47fae9d3436614d0ba6a91692447 10.211.55.53:6380@16380 master - 0 1734376634660 7 connected 0-5460
80c0cb2658770e28900e0f331001f3e6aa4b8f46 10.211.55.52:6380@16380 myself,slave c7a60dbe6b19408bcd2fe4025d692217ac056727 0 1734376624000 5 connected
a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 10.211.55.52:6379@16379 master,fail - 1734376579470 1734376577355 1 disconnected
d7110c436b1f345a07cb85a59050298576172820 10.211.55.54:6380@16380 slave 58614a8515f84090c6ba38d9755148b985c136cb 0 1734376636778 3 connected

再次重启10.211.55.52:6379查看变化

10.211.55.52:6379成为了10.211.55.53:6380的从节点

[root@master ~]# /usr/redis-7.2.6/src/redis-server /usr/redis-7.2.6/redis_6379/conf/redis.conf 
[root@master ~]# /usr/redis-7.2.6/src/redis-cli -c -p 6380
127.0.0.1:6380> cluster nodes
c7a60dbe6b19408bcd2fe4025d692217ac056727 10.211.55.54:6379@16379 master - 0 1734376823031 5 connected 10923-16383
58614a8515f84090c6ba38d9755148b985c136cb 10.211.55.53:6379@16379 master - 0 1734376823450 3 connected 5461-10922
a5bffa3f5c7a47fae9d3436614d0ba6a91692447 10.211.55.53:6380@16380 master - 0 1734376822512 7 connected 0-5460
80c0cb2658770e28900e0f331001f3e6aa4b8f46 10.211.55.52:6380@16380 myself,slave c7a60dbe6b19408bcd2fe4025d692217ac056727 0 1734376818000 5 connected
a73ec6b05ad9dd04ec11e7af585b0e42e443a5e9 10.211.55.52:6379@16379 slave a5bffa3f5c7a47fae9d3436614d0ba6a91692447 0 1734376822926 7 connected
d7110c436b1f345a07cb85a59050298576172820 10.211.55.54:6380@16380 slave 58614a8515f84090c6ba38d9755148b985c136cb 0 1734376822410 3 connected

5、常用命令

命令描述案例
create创建Redis集群redis-cli --cluster create 10.211.55.52:7000 10.211.55.52:7001 10.211.55.53:7002 --cluster-replicas 1(创建包含三个主节点和三个从节点的集群)
check检查Redis集群状态redis-cli --cluster check 10.211.55.52:7000(检查集群中所有节点的槽位分配和状态)
info查看Redis集群的简易信息redis-cli --cluster info 10.211.55.52:7000(查看集群的节点数、槽位分配等基本信息)
fix修复Redis集群中的槽位分配问题redis-cli --cluster fix 10.211.55.52:7000 --cluster-search-multiple-owners(修复被多个节点拥有的槽位问题)
reshard在Redis集群中迁移槽位redis-cli --cluster reshard 10.211.55.52:7000 --cluster-from 10.211.55.52:7001 --cluster-to 10.211.55.53:7002 --cluster-slots 100(从节点7001迁移100个槽位到节点7002)
rebalance平衡Redis集群中的槽位分配redis-cli --cluster rebalance 10.211.55.52:7000 --cluster-threshold 1.5(根据权重和阈值条件平衡集群中的槽位分配)
add-node向Redis集群中添加新节点redis-cli --cluster add-node 10.211.55.53:7003 10.211.55.52:7000 --cluster-slave --cluster-master-id <master-node-id>(将新节点7003作为从节点添加到集群,并指定其主节点ID)
del-node从Redis集群中删除节点redis-cli --cluster del-node 10.211.55.52:7000 <node-id>(从集群中删除指定ID的节点,注意从节点可以直接删除,有槽位分配的主节点不能直接删除)
set-timeout设置Redis集群的cluster-node-timeout时间redis-cli --cluster set-timeout 10.211.55.52:7000 5000(将集群的节点超时时间设置为5000毫秒)
call在Redis集群的所有节点上执行命令redis-cli --cluster call 10.211.55.52:7000 FLUSHALL(在所有节点上执行FLUSHALL命令,清空所有节点的数据)

至此验证测试完成。

学习地址:Redis 超详细的手动搭建Cluster集群步骤 - 云崖先生 - 博客园

Redis 超详细的手动搭建Cluster集群步骤 - 云崖先生 - 博客园

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

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

相关文章

探索 Seaborn Palette 的奥秘:为数据可视化增色添彩

一、引言 在数据科学的世界里&#xff0c;视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息&#xff0c;还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库&#xff0c;而它的调色板&#xff08;palette&#xff09;功能&#xff0c;则为我们提供了调配绚…

多模态医学图像融合概述

Part1: Summary 实际应用中&#xff0c;我们常用到多种来源不同数据进行融合&#xff1b; 包括图像分解、重建、融合规则及质量评估。如&#xff1a;MRI、CT、PET、SPECT、US等成像方式; 也可能有点云数据融合 CT&#xff0c;或MR 进行定位等&#xff1b; Part2: 融合数据的…

STM32F103 | Embedded IDE03 - 使用OpenOCD在STM32F103项目时出现下载固件失败

导言 在上一篇备忘录介绍使用OpenOCD的stlink-v2.cfg接口下载固件&#xff0c;在STM32F407的项目上很顺利。但是&#xff0c;在stm32f103上会出现下载失败。 在网上搜了一下&#xff0c;这位博主的文章解决了这个问题: https://www.iotword.com/26738.html 一、修改stm32f1x.c…

Android Studio IDE环境配置

​需要安装哪些东西&#xff1a; Java jdk Java Downloads | OracleAndroid Studio 下载 Android Studio 和应用工具 - Android 开发者 | Android DevelopersAndroid Sdk 现在的Android Studio版本安装时会自动安装&#xff0c;需要注意下安装的路径Android Studio插件…

人工智能ACA(四)--机器学习基础

零、参考资料 一篇文章完全搞懂正则化&#xff08;Regularization&#xff09;-CSDN博客 一、 机器学习概述 0. 机器学习的层次结构 学习范式&#xff08;最高层&#xff09; 怎么学 监督学习 无监督学习 半监督学习 强化学习 学习任务&#xff08;中间层&#xff0…

Qt之QML应用程序开发:给应用程序添加图标文件

开发环境: 1、Qt Creator 14.0.1 2、windows10 先看下面的步骤,不明白再返回来看下面官方指导链接。 先看下面的步骤,不明白再返回来看下面官方指导链接。 先看下面的步骤,不明白再返回来看下面官方指导链接。 --------------------------------------------------------…

代码随想录D24-25 回溯算法03-04 Python

目录 93. 复原 IP 地址 78. 子集 子集问题 90. 子集 II 491. 非递减子序列 46. 全排列 排列问题 47. 全排列 II 332. 重新安排行程 利用字典实现图 51. N 皇后 多维问题入门 37. 解数独 93. 复原 IP 地址 要点&#xff1a; 本质上和上一期的回文字串切分是相似的&am…

新能源汽车锂离子电池各参数的时间序列关系

Hi&#xff0c;大家好&#xff0c;我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究&#xff0c;本文主要汇总并介绍了电动汽车的锂离子电池的各项参数&#xff0c;通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析&#xff0c;进一步研究各项参…

鸿蒙学习笔记:用户登录界面

文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素&#xff1a;一张图片增添视觉感&#xff0c;两个分别用于账号与密码的文本输入框&#…

左神算法基础巩固--1

文章目录 时间复杂度常数时间的操作时间复杂度的定义时间复杂度的作用剖析递归行为和递归行为时间复杂度的估算 排序选择排序冒泡排序插入排序归并排序小和问题问题描述解题思路 快速排序荷兰国旗问题问题描述 堆排序堆结构大根堆小根堆 桶排序 二分二分搜索 ^的运用不用额外空…

ROS1安装教程

一、环境准备 操作系统&#xff1a;Ubuntu 20.04 LTS 注&#xff1a;为保证系统干净&#xff0c;本文使用Docker进行 演示&#xff0c;如已安装相应的Ubuntu系统请忽略。 Docker安装Ubuntu系统步骤如下&#xff1a; # 拉取镜像 docker pull ubuntu:20.04# 创建容器 docker ru…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》

一、数据来源&#xff1a;住建部、国家知识产权局、中国城市统计年鉴&#xff0c;内含原始数据、处理代码和基准回归 二、数据范围&#xff1a; DID 为了延长政策效应估计的时间区间&#xff0c;将住建部公布的首批国家智慧城市作为处理组&#xff0c;非试点城市作为对照组。将…

【机器学习与数据挖掘实战】案例04:基于K-Means算法的信用卡高风险客户识别

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

Oracle中间件 SOA之 OSB 12C服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用1台服务器&#xff0c;具体信息如下&#xff1a; App1服务器 归类 APP服务器 Ip Address 172.xx.30.xx HostName appdev01. xxxxx.com Alias appdev01 OSB1服务器 归类 OSB服务器 Ip Address 172.xx3…

Elasticsearch-分词器详解

什么是分词器 1、分词器介绍 对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart&…

CE之植物大战僵尸植物无冷却

思路&#xff1a;先扫描所有的未知道初始化的值&#xff0c;一般是4字节&#xff0c;然后我们先种植一棵植物再通过CE扫描不断变化的值&#xff0c;等植物冷却结束后再去扫描未变化的值&#xff0c;重复操作。然后找到冷却值&#xff0c;然后通过汇编的方式去编写nop代码&#…

Datawhale AI冬令营——Chat-悟空设计

Chat - 悟空项目介绍 一、项目背景 当前大模型市场竞争激烈&#xff0c;通用大模型众多&#xff0c;但针对特定领域、具有特色风格的垂直领域微调模型仍有较大发展空间。以《西游记》这一高人气影视IP为依托进行微调&#xff0c;能在文化娱乐相关细分市场吸引用户关注&#xf…

微服务分布式(二、注册中心Consul)

首先我们需要安装consul,到官网下载Consul Install | Consul | HashiCorp Developer 在解压的consul目录下 执行启动命令 consul agent -dev 启动服务 -dev表示开发模式 -server表示服务模式 启动后在浏览器访问8500端口http://localhost:8500/可以看到服务管理界面 项目…

Java基于SSM框架的无中介租房系统小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…