Redis集群部署指南

简介: 本教程基于CentOS7详解Redis集群部署,涵盖单机安装、主从复制、哨兵高可用及分片集群搭建。通过多实例模拟真实环境,深入讲解配置、启动、主从切换与数据读写测试,助你掌握Redis分布式架构核心技能。

Redis集群部署指南
本章是基于CentOS7下的Redis集群教程,包括:
单机安装Redis
Redis主从
Redis分片集群
1.单机安装Redis
首先需要安装Redis所需要的依赖:
然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:
redis-6.2.4.tar.gz
(2.3 MB)
例如,我放到了/tmp目录:
解压缩:
解压后:
进入redis目录:
运行编译命令:
如果没有出错就安装成功。 然后修改redis.conf文件中的一些配置(注意是四个0,不要额外的):
启动Redis:
停止redis服务(ctrl + c也可停止):
2.Redis主从集群
2.1.集群结构
我们搭建的主从集群结构如图:
共包含三个节点,一个主两个从。 这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:
知识产权
港口
角色
192.168.206.129
7001
主人
192.168.206.129
7002
奴隶
192.168.206.129
7003
奴隶
2.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
确保下面的配置已经更改(位置也别错)
1)创建目录
我们创建三个文件夹,名字分别叫7001、7002、7003:
如图:
2)恢复原始配置
修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。
3)拷贝配置文件到每个实例目录
然后将redis-6.2.4/redis.conf文件拷贝到三个目录中(在/tmp目录执行下列命令):
4)修改每个实例的端口、工作目录
修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在目录(在/tmp目录执行下列命令):
5)修改每个实例的声明IP(注意IP需要修改)
虚拟机本身有多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息,格式如下(下面这个只是语法说明,别执行):
每个目录都要改,我们一键完成修改(在/tmp目录执行下列命令):
2.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令(在/tmp目录执行下列命令):
启动后:
如果要一键停止,可以运行下面命令:
2.4.开启主从关系
现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
新开窗口执行下述命令,一旦ctrl +c退出后,redis服务将中断
有临时和永久两种模式:
修改配置文件(永久生效)
在redis.conf中添加一行配置:slaveof
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
注意:在5.0以后新增命令replicaof,与salveof效果一致。 (注意IP需要修改)
这里我们为了演示方便,使用方式二(在/tmp目录执行下列命令)。 通过redis-cli命令连接7002,执行下面命令:
执行完:exit,退出可继续执行后续命令。 通过redis-cli命令连接7003,执行下面命令:
然后连接 7001节点,查看集群状态:
结果:
2.5.测试
执行下列操作以测试:
利用redis-cli连接7001,执行set num 123
利用redis-cli连接7002,执行get num,再执行set num 666
利用redis-cli连接7003,执行get num,再执行set num 888
可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。
3.搭建哨兵集群
3.1.集群结构
这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。 如图:
三个sentinel实例信息如下:
节点
知识产权
港口
第一季
192.168.206.129
27001
第二季
192.168.206.129
27002
第三季
192.168.206.129
27003
3.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
我们创建三个文件夹,名字分别叫s1、s2、s3:
如图:
然后我们在s1目录创建一个sentinel.conf文件,添加下面的内容:
光盘 /TMP/S1
触摸哨兵.conf
vi sentinel.conf
粘贴下述文本
解读:
port 27001:是当前sentinel实例的端口
Sentinel Monitor mymaster 192.168.206.129 7001 2:指定主节点信息
mymaster:主节点名称,自定义,任意写
192.168.206.129 7001:主节点的ip和端口
2:选举master时的quorum值
然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中(在/tmp目录执行下列命令):
修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003:
3.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令(在tmp目录执行):
启动后:
3.4.测试
停止7001(当前主节点),此时会在多个哨兵中选举出一个哨兵的master,如下
27001投给27002
27002投给自己
27003投给27002
因此27002变成哨兵master
主观下线变客观下线
哨兵master自己从当前集群中的slave节点中选出一个新的master,原则是:
现有slave节点执行slave of,服从新的master节点
其余哨兵得到哨兵msater的选举通知
此时我们恢复7001,会发现会做一次全量同步
新加入的节点,执行slave of服从当前master(此时是从配置文件中读取)
4.搭建分片集群
4.1.集群结构
分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下
这里我们会在同一台虚拟机中开启6个redis实例,模拟分片集群,信息如下:
知识产权
港口
角色
192.168.206.129
7001
主人
192.168.206.129
7002
主人
192.168.206.129
7003
主人
192.168.206.129
8001
奴隶
192.168.206.129
8002
奴隶
192.168.206.129
8003
奴隶
4.2.准备实例和配置
停止原来的所有redis服务(哨兵也要停止),同时删除之前的7001、7002、7003这几个目录,重新创建出7001、7002、7003、8001、8002、8003目录:
在/tmp下准备一个新的redis.conf文件,内容如下:
触摸Redis.conf
vi redis.conf
将这个文件拷贝到每个目录下:
修改每个目录下的redis.conf,将其中的6379修改为与所在目录一致:
此时可以进到任意目录查看一下,确认是否都存在相关的配置文件
4.3.启动
因为已经配置了后台启动模式,所以可以直接启动服务:
通过ps查看状态:
发现服务都已经正常启动:
如果要关闭所有进程,可以执行命令:
或者(推荐这种方式):
4.4.创建集群
更多测试细节也可查看:https://www.yuque.com/xiankanpengyouquandisitiaodongtai/diods0/fzoohtlg0r8gz6cd#ecac7084
虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。
我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。
1)Redis5.0之前(我们版本是之后,不适用这个)
Redis5.0之前集群命令都是用redis安装包下的src/redis-trib.rb来实现的。 因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。
然后通过命令来管理集群:
2)Redis5.0以后
我们使用的是Redis6.2.4版本,集群管理以及集成到了redis-cli中,格式如下:
命令说明:
Redis-CLI --cluster或者./redis-trib.rb:代表集群作命令
create:代表是创建集群
--replicas 1或者--cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ ( replicas + 1) 得到的就是master的数量。 因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master
运行后的样子:
这里输入yes,则集群开始创建:
通过命令可以查看集群状态(下面端口可以是集群中的任意端口都行):
其中的映射关系分析如下图
4.5.测试
尝试连接7001节点,存储一个数据:

运行代码
复制代码
1
2
3
4
5
6
7
8

连接

redis-cli -p 7001

存储数据

set num 123

读取数据

get num

再次存储

set a 1
结果悲剧了:
集群操作时,需要给redis-cli加上-c参数才可以:

运行代码
复制代码
1
redis-cli -c -p 7001
这次可以了:

相关文章
|
1月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关是微服务架构的统一入口,具备路由转发、权限控制、限流及负载均衡等核心功能。基于SpringCloud Gateway可实现高性能响应式编程,支持丰富的断言与过滤器工厂,并可通过全局过滤器扩展自定义逻辑,有效解决跨域等问题,是微服务治理的关键组件。
129 0
|
1月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata分布式事务框架的部署与集成。首先下载并解压seata-server-1.5.1,修改application.yml配置,将seataServer.properties配置上传至Nacos作为统一配置中心,并创建所需数据库表。启动tc-server后,注册到Nacos,通过控制台可查看服务状态。各微服务需引入Seata依赖,并在application.yml中配置相关参数。为实现高可用,可搭建多节点TC集群,如GZ和HZ集群,通过Nacos统一管理事务组映射,微服务从Nacos读取client.properties配置,动态切换TC集群连接,提升系统容灾能力。
129 0
|
5月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
428 2
|
1月前
|
传感器 人工智能 安全
构建AI智能体:五十二、反应式智能体:AI世界的条件反射,真的可以又快又稳
反应式智能体是一种基于感知-行动模式的智能系统,它不依赖复杂的内部模型,而是通过简单的条件-动作规则对环境做出即时响应。文章通过蜜蜂采蜜、膝跳反射等例子,阐述了反应式智能体的核心思想:快速、直接的刺激-反应机制。重点介绍了罗德尼·布鲁克斯提出的包容架构,该架构通过分层的行为模块和优先级仲裁机制,使简单规则组合产生复杂行为。以扫地机器人为例,展示了反应式设计在实时响应、避障导航等方面的优势,同时也指出了其在复杂规划任务中的局限性。
234 4
|
1月前
|
JSON Dubbo Java
Feign远程调用
Feign简化Spring Cloud微服务间HTTP调用,替代RestTemplate,解决硬编码、可读性差问题。通过注解声明客户端,集成注册中心实现服务发现。支持自定义日志、编码器、连接池(如Apache HttpClient)优化性能,并可通过抽取公共模块实现最佳实践,提升代码复用与维护性。(238字)
95 0
|
1月前
|
XML Java 数据格式
SpringBoot. 打包
将项目打包为单一JAR文件,包含配置文件,通过`mvn clean package`命令构建。运行时可前台或后台启动:`java -jar **.jar` 或 `nohup java -jar **.jar`;停止服务需查找进程PID并执行`kill -9 pid`。也可分离JAR、依赖与配置文件以方便管理。
47 0
|
1月前
|
XML Java 数据格式
SpringBoot@Configuration
`@Configuration` 注解用于标记配置类,相当于 XML 配置文件。配合 `@Bean` 可注册 Bean 实例。通过 `AnnotationConfigApplicationContext` 启动容器,可加载配置类并管理其定义的 Bean,实现基于 Java 的 Spring 容器配置。
70 0
|
1月前
|
XML Java 数据库连接
MyBatis
本内容介绍MyBatis中四种映射关系:一对一(属性与字段映射,解决命名不一致)、一对多(如用户关联多个角色,使用`<collection>`)、多对一(如博客关联作者,使用`<association>`)和多对多(通过中间类关联,如用户与部门互相关联),详解如何通过resultMap配置实现复杂对象关系映射。
38 0
|
关系型数据库 MySQL 数据库
MySQL 集群部署实战指南:高可用与可扩展的数据库架构
本文深入讲解MySQL集群部署方案,涵盖主从复制、MHA高可用架构及InnoDB Cluster,结合实战配置与监控维护,助力构建高性能、高可用的数据库系统。
518 0
|
7月前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
267 5