redis系列(三)-Redis集群

Linux 系列(三)——Redis 分布式集群搭建 Java 数据结构在Redis的安装和部署(Linux)一文中详细介绍了在Linux环境中搭建Redis服务,本文将介绍关于Redis分布式 集群搭建细节。 一、Redis集群架构 1、Redis集群架构图 蓝色的为Redis集群中的每个node节点,节点之间通过ping 命令,测试相互是否连接正常,普通集群没有主从区分,连接任何一个节点操作,都可以转发到其他 阅读详情

前言

Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Redis集群。本文参考了Rdis的官方文档和使用Redis官方提供的Redis Cluster工具搭建Rdis集群。

注意 :Redis的版本要在3.0以上,本文使用4.0.2。

Redis安装

网上安装教程很多,大致步骤是下载、解压、编译、安装、配置后端启动。请网上找资料,例如:《了解一下 Redis 并在 CentOS 下进行安装配置》。
##Redis集群的概念
Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。

数据分片

Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
集群中的每个节点负责处理一部分哈希槽。 举个例子, 一个集群可以有三个哈希槽, 其中:

  • 节点 A 负责处理 0 号至 5500 号哈希槽。
  • 节点 B 负责处理 5501 号至 11000 号哈希槽。
  • 节点 C 负责处理 11001 号至 16384 号哈希槽。
    这种将哈希槽分布到不同节点的做法使得用户可以很容易地向集群中添加或者删除节点。 比如说:
    我现在想设置一个key,叫my_name:

set my_name value1

按照Redis Cluster的哈希槽算法,CRC16(‘my_name’)%16384 = 2412 那么这个key就被分配到了节点A上
同样的,当我连接(A,B,C)的任意一个节点想获取my_name这个key,都会转到节点A上
再比如
如果用户将新节点 D 添加到集群中, 那么集群只需要将节点 A 、B 、 C 中的某些槽移动到节点 D 就可以了。
增加一个D节点的结果可能如下:

  • 节点A覆盖1365-5460
  • 节点B覆盖6827-10922
  • 节点C覆盖12288-16383
  • 节点D覆盖0-1364,5461-6826,10923-1228
    与此类似, 如果用户要从集群中移除节点 A , 那么集群只需要将节点 A 中的所有哈希槽移动到节点 B 和节点 C , 然后再移除空白(不包含任何哈希槽)的节点 A 就可以了。
    因为将一个哈希槽从一个节点移动到另一个节点不会造成节点阻塞, 所以无论是添加新节点还是移除已存在节点, 又或者改变某个节点包含的哈希槽数量, 都不会造成集群下线。
    所以,Redis Cluster的模型大概是这样的形状
    这里写图片描述

搭建集群

1.创建文件夹
redis-cluster统一存放文件夹,并在文件夹内新建6个文件夹用于存放6个实例(注:redis集群使用主从复制模型,也就是一个主节点有1-N个从节点);其中3个为主节点,3个为从节点。
使用命令

mkdir /usr/local/redis-cluster
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

这里写图片描述
2.复制执行脚本
在 /usr/local/redis-cluster 下创建 bin 文件夹,用来存放集群运行脚本,并把安装好的 Redis 的 src 路径下的运行脚本拷贝过来。
使用命令:

mkdir redis-cluster/bin
cd /usr/local/redis/src
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin


3.创建新的redis实例
复制新的redis实例到9001,然后对实例进行修改:
使用命令:

cp /usr/local/redis/* /usr/local/redis-cluster/9001

修改redis.conf,具体如下:

port 9001(每个节点的端口号)
daemonize yes
bind 127.0.0.1(绑定当前机器 IP)
dir /usr/local/redis-cluster/9001/data/(数据文件存放位置)
pidfile /var/run/redis_9001.pid(pid 9001和port要对应)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes9001.conf(9001和port要对应)
cluster-node-timeout 15000
appendonly yes

复制当前实例到其他5个文件夹中,并修改相应的配置
使用命令:
\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9002 \cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9003 \cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9004 \cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9005 \cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9006

这里写图片描述
##启动服务,查看效果
1.启动9001-9006六个节点,看看服务是否已经配置完成
使用命令:

/usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9002/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9003/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9004/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9005/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/9006/redis.conf

这里写图片描述
使用901节点进行测试,
使用命令:

/usr/local/redis-cluster/bin/redis-cli -h 192.168.119.131 -p 9001

set name mafly

服务报错,节点没有槽点可以提供服务。
这里我们只是开启了6个redis进程而已,它们都还只是独立的状态,还么有组成集群这里我们使用官方提供的工具redis-trib,不过这个工具是用ruby写的,要先安装ruby的环境。
这里写图片描述
这里写图片描述

安装ruby环境:

安装命令:

yum install ruby
yum install rubygems
gem install redis 

安装报错:redis requires ruby version》=2.2.2.。
CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2,自己编译的ruby源码,再执行还是报错
解决方法:redis requires Ruby version >= 2.2.2
这里写图片描述
##成功安装Ruby环境
这里写图片描述
##启动redis集群服务
###1.创建集群
使用命令

/usr/local/redis-cluster/bin/redis-trib create --replicas 1 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006

简单解释一下这个命令:调用 ruby 命令来进行创建集群,–replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

这里写图片描述

测试集群

使用如下命令查看集群状态

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.131 -p 9001
cluster info
cluster nodes

进行测试:
这里写图片描述

参考博文

1.Redis集群的原理和搭建
2.Redis 集群搭建详细指南
3.redis集群搭建(同机器、不同机器搭建)
4.redis requires Ruby version >= 2.2.2

深入学习 Redis - 主从结构配置、流程、底层原理(全网最详细) 单点问题可用性:如果这个机器挂了,意味着服务就中断了.性能:支持的并发量也是比较有限的.因此引入分布式系统,主要也是为了解决上述的单点问题~ 分布式系统中,往往需要多个服务器来部署 redis 服务,从而构成redis 集群,此时就可以让这个集群给整个分布式系统中的其他服务,提供更稳定 / 更高效的数据存储功能.本章主要来讲一下 redis 部署方式中的主从模式~ 阅读详情

相关推荐

如何在TRAE(国际版)中搭建ESP-IDF环境以及怎么使用ESP-IDF插件编译烧录到ESP32s3中

点击进入,再点击ESPRESSIF中的EXPRESS,这里会下载ESP-IDF所需要的全部工具和包等等。首先我们从终端中进入项目所在的目录中,我的项目在E盘下的jikecode\esp32s3-client中,我就进入这个目录下。,因为我的项目是针对ESP32-S3进行开发的,所以这里的芯片型号是esp32s3,大家根据各自芯片的型号来输入。执行了这个命令后,ESP-IDF会自动配置与ESP-S3相关的编译选项,生成对应芯片的配置文件。进入第一个ESP-IDF插件,进行安装,注意安装的是。

一个爱折腾技术的普通人,分享踩过的坑、学到的干货。 1509

redis cluster主从互换

初始状态–cluster nodes 6000到6005一共6个节点,6001<–6004,6002<–6005,6000<–6003 现在要将6001和6004主从互换,并且要确保键不会丢,先在各master节点上设置几个键 删除节点6004–./redis-trib.rb del-node 127.0.0.1:6004 node-id(ip:port 是集群中任一节点,n...

hirosiwang 1665

最全软考高项工具技术总结(上)

第四版教材把工具和技术分为:数据收集技术、数据分析技术、数据表现技术、决策技术、沟通技巧、人际关系和团队技能、其他。我会按照上面的分类总结说明并标识他们用在哪些过程。小伙伴们可以通读理解做到有印象能选对应付上午选择,选几个深化用在下午论文的举例中。没必要背!

PM喵的窝 2046

Redis集群详解

在了解Redis集群之前尽量先了解清楚Redis的主从复制和哨兵机制。读写分离,性能扩展,降低主服务器的压力容灾,快速恢复,主机挂掉时,从机变为主机Redis 主从模式不具备自动容错和恢复功能,如果主节点宕机,Redis 集群将无法工作,此时需要人为干预,将从节点提升为主节点。哨兵机制作用主要是监控主从节点,当主节点挂掉,通过内部投票机制,从 从节点当中选出一个主节点,这样可以避免人工成本。虽然主从+哨兵采用了多节点,但是他们存在的目的主要是解决容灾问题,而并非性能问题。

怪咖@的博客 2万+

2023西工大NOJ (C语言版) 完结!!!

代码均可AC,不含解析。

annesede的博客 8万+

CentOS 7下Synopsys DC综合工具安装与配置全攻略(附常见报错解决方案)

本文详细介绍了在CentOS 7操作系统上安装与配置Synopsys Design Compiler(DC)综合工具的完整流程。内容涵盖从系统环境准备、软件安装、许可证配置到实战综合的全过程,并针对DC综合工具在安装和运行中常见的报错问题提供了具体的解决方案,帮助数字IC设计初学者快速搭建稳定的EDA学习环境。

weixin_29159441的博客 260

Redis三种集群模式介绍及搭建

redis集群 redis集群就是多个redis节点一起工作的模式。它没有代理节点和中心节点,各个节点平等。 redis集群提供了以下两个好处 1、将数据自动切分(split)到多个节点 2、当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。 集群中的主从复制 集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。这样集群就不会因为一个主节点的下线而无法正常工作。 注意: 1、如果

QHJJHQ的博客 2万+

点云直线检测-3DLineDetection复现

点云直线分割-Fast 3D line detection

阁楼 8156

Redis集群的讲解及搭建实战教程

Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。Redis 集群通过分区来提供一定程度的可用性: 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。搭建和后期维护都很不方便,因此引入了无中心化集群!答案是重启6379服务器,6379角色变为6389的从机,上位主机后的6389服务器依然是主机。再次思考:如果集群中某台主机挂掉之后,此主机的所有从机也都挂掉了(如下图),整个集还能正常提供服务吗?..

架构沉思录的博客 1万+

Windows报无法成功完成操作,因为文件包含病毒或潜在的垃圾软件的解决方法

Windows报无法成功完成操作,因为文件包含病毒或潜在的垃圾软件的解决方法 在Windows的搜索框中输入Windows安全中心,搜索到后将其打开 点击病毒和威胁防护将鼠标移动到Microsoft Defender防病毒选项处,将定期扫描打开 下滑找到管理设置 先关闭篡改防护,再点击添加或删除排除项 先点击添加排除项,再点击文件,选择报出异常的文件,将其添加到排除项中,过程中会存在跳框确认,皆点击确定,完成后就可以运行报无法成功完成操作,因为文件包含病毒或潜在的垃圾软件异常的文件

123 2万+

PCL 最小生成树用于法向量定向【2025最新版】

PCL 最小代价生成树用于点云法向量的定向。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2068

redis集群系列三

redis集群的故障转移及恢复

快乐划水程序猿的专栏 758

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Redis集群系列三 —— 哨兵集群原理

Redis搭建哨兵集群

旷野历程 878

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis系列之Redis集群(三)

在前面的文章中,已经实现多节点的Master-Slave,其实可以称作为集群,但是是以命令的方式实现的,不怎么方便,现在以配置的方式,实现Redis集群 1、首页在redis路径下创建redis-cluster文件夹,再到redis-cluster目录下创建三个目录,分别为9001,9002,9003,文件名分别代表每个实例的端口号longwentaodeMacBook-Pro:redis-clu

kity9420的专栏 1098

保姆教程系列三、Redis高可用(Cluster集群模式)

看完redis集群高可用后,领导双手竖起了大拇指

南国以南i的博客 1345

深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态。Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 在 分布式 方面的需求。当遇到 单机内存、并发、流量 等瓶颈时,可以采用 Cluster 架构方案达到 负载均衡 的目的。 image ...

陌上轩客 980

【Redis系列三】Redis集群模式安装-使用-常见问题处理

将Redis做成一个服务 参考:Redis Quick Start Centos下Redis 的安装 # 在/usr/local/下执行 wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar -zxvf redis-5.0.0.tar.gz # yum安装gcc依赖 yum install gcc -y mv redis-5.0.0 redis cd redis # 编译安装 make MALLOC=libc cd src &

awesometime的博客 662

(Redis系列三)centos7实现redis集群数据迁移

本次迁移是把一个三主0从的数据迁移至三主三从 伪集群:172-22-14-88,三个节点6379\6380\6381 真集群: 172-22-14-105 两个节点 6379\6380 172-22-14-106 两个节点 6379\6380 172-22-14-107 两个节点 6379\6380 先看下三主0从的结构,都是集群 主机为172-22-14-88 [root@host-172-22...

wuwei的博客 4601

redis 集群模式_深度剖析Redis系列笔记(三) Redis集群模式搭建与原理详解

在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态。Redis Cluster是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis在 分布式 方面的需求。当遇到 单机内存、并发、流量 等瓶颈时,可以采用 Cluster架构方案达到 负载均衡 的目的。本文将从集群方案、数据分布、搭建集群、节点通信、集群伸缩、请求路由...

weixin_39930252的博客 266

Redis系列(三)持久化,主从复制,哨兵,集群

Redis有两种方式进行持久化 一、RDB方式持久化 这种方式保存的是数据。 执行方法: 手动:save(已废弃)/bgsave 自动:在配置文件中 save m n 配置文件常用参数 RDB文件保存路径:配置文件中的dir RDB文件保存文件名:配置文件中dbfilename RDB文件是否压缩:配置文件中rdbcompression 二、AOF方式持久化 这种方式保存的是写命令,更主流。 默认关闭,要开启,配置文件中:appendonly yes AOF重写:将当前数据转化为写命令,与旧AOF文

肯特技术宅的博客 304

redis学习系列(三)--redis集群-相关命令

Redis集群:集群常用命令及说明 一、本文目的        介绍集群的基本情况及常用命令      二、集群的特点   3、集群优缺点   三、集群客户端命令(redis-cli -c -p port) 集群 cluster info :打印集群的信息 cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。 节点 clus

Destiny宿命的博客 317

redis集群-docker环境

本文介绍了Redis 5.0集群的部署方案,采用三主六从架构,分布在104、105、110三台服务器上。详细说明了集群搭建步骤:创建目录结构、修改配置文件、开放端口、创建Docker容器、初始化集群主节点及添加从节点。文章还提供了常用的集群管理指令,包括节点查看、数据操作、故障转移等,并总结了集群的测试结果和容错机制。此外,还介绍了单体Redis部署方法、Windows环境下集群搭建方案以及Redis集群图形化管理工具redis-manager的安装使用说明。最后强调了集群的容错能力和部署注意事项。

SeaArea_的博客 634

Redis分片集群

Redis Cluster 是 Redis 官方提供的分布式解决方案。它不是像哨兵(Sentinel)那样只负责高可用切换,而是同时解决了数据分片和高可用两个问题。✨

qq_56158663的博客 4633

Redis 篇-初步了解 Redis 持久化、Redis 主从集群、Redis 哨兵集群、Redis 分片集群

在子进程写入磁盘过程中,主进程有可能会进行写操作,所有为了防止脏读的情况,在写数据的时候,将内存的数据进行拷贝,再来进行写操作。在 slave 加载 RDB 文件的时候,master 也会不断接收写操作的请求命令,这些命令会先保存到 repl_baklog 文件中,等待 slave 加载完成之后,master 发送 repl_baklog 中的命令到 slave 节点中,而 slave 节点接收到命令就会执行。重新启动该 Redis 服务之后,会自动从 RDB 文件中获取数据,重新将数据放到内存中。

小扳手 2586
上一篇: Nginx学习(二)----Nginx配置文件详解
下一篇: 整理最全Java面试题一(附答案,欢迎指正)
GraceJava
博客等级 码龄10年 131粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值