Redis 集群结构

Ubuntu搭建Redis集群 为什么要有集群 之前我们已经讲了主从的概念,一主可以多从,如果同时的访问量过大(1000w),主服务肯定就会挂掉,数据服务就挂掉了或者发生自然灾难 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北地区、西南地区、东北地区、台港澳地区机房) 集群的概念 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。 当请求到来首先由负载均衡服务器处理,把请求转发到另外 阅读详情

以下是更详细的逐步指南,涵盖从零开始搭建Redis集群到Spring Boot集成的完整流程,配置好之后和单机使用是一样的:


在这里插入图片描述

一、Redis集群搭建(6节点,3主3从)

1. 安装Redis
# Ubuntu/Debian
sudo apt update
sudo apt install -y redis-server

# CentOS/RHEL
sudo yum install -y epel-release
sudo yum install -y redis

# 验证安装
redis-server --version
2. 准备集群目录
# 创建集群节点目录
mkdir -p /opt/redis-cluster/{7000,7001,7002,7003,7004,7005}
3. 配置每个节点

每个端口目录下创建 redis.conf,以 7000 为例:

cd /opt/redis-cluster/7000
vim redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
bind 0.0.0.0  # 允许外部访问(生产环境需限制IP)
dir ./         # 数据存储目录

重复上述步骤,为7001-7005端口创建配置文件。

4. 启动所有节点
redis-server /opt/redis-cluster/7000/redis.conf
redis-server /opt/redis-cluster/7001/redis.conf
# ... 依次启动7002-7005
# 验证进程
ps -ef | grep redis
5. 创建集群
# 使用redis-cli自动分配主从
redis-cli --cluster create \
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

# 输入yes确认配置
6. 验证集群状态
# 检查节点信息
redis-cli -p 7000 cluster nodes

# 检查槽位分配
redis-cli --cluster check 127.0.0.1:7000

二、Spring Boot集成详细配置

1. 添加依赖 (pom.xml)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 可选:若需要JSON序列化 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
2. 配置文件 (application.yml)
spring:
  redis:
    cluster:
      nodes:
        - 192.168.1.100:7000
        - 192.168.1.100:7001
        - 192.168.1.100:7002
        - 192.168.1.100:7003
        - 192.168.1.100:7004
        - 192.168.1.100:7005
      max-redirects: 3  # 允许的最大跳转次数
    password: your_password  # 如果设置了密码
    timeout: 3000       # 连接超时时间(毫秒)
    lettuce:
      pool:
        max-active: 16  # 最大连接数
        max-idle: 8     # 最大空闲连接
        min-idle: 4     # 最小空闲连接
        max-wait: 2000  # 获取连接最大等待时间(毫秒)
      shutdown-timeout: 100ms  # 关闭超时时间
3. 配置RedisTemplate
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 使用JSON序列化
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, 
            ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(objectMapper);

        // Key使用String序列化
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);

        template.afterPropertiesSet();
        return template;
    }
}
4. 编写操作类
@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 基本操作
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    // 使用Hash Tag确保数据在同一个slot
    public void setWithHashTag(String userId, String value) {
        String key = "{user:" + userId + "}:profile";
        redisTemplate.opsForValue().set(key, value);
    }

    // 集群操作示例
    public void printClusterInfo() {
        RedisClusterConnection conn = (RedisClusterConnection) redisTemplate.getConnectionFactory().getConnection();
        ClusterInfo clusterInfo = conn.clusterGetClusterInfo();
        System.out.println("Cluster State: " + clusterInfo.getState());
    }
}

三、验证集群操作

1. 编写测试用例
@SpringBootTest
public class RedisClusterTest {

    @Autowired
    private RedisService redisService;

    @Test
    void testClusterWriteRead() {
        String key = "test:key1";
        String value = "cluster_value";

        // 写入数据
        redisService.set(key, value);

        // 读取数据
        String result = (String) redisService.get(key);
        Assertions.assertEquals(value, result);
    }

    @Test
    void testHashTag() {
        String userId = "1001";
        String profile = "{'name':'John', 'age':28}";
        redisService.setWithHashTag(userId, profile);

        // 验证数据所在slot
        RedisClusterConnection conn = (RedisClusterConnection) redisTemplate.getConnectionFactory().getConnection();
        int slot = ClusterSlotHashUtil.calculateSlot("{user:1001}".getBytes());
        System.out.println("Data stored in slot: " + slot);
    }
}

四、故障排查指南

1. 连接失败检查
# 检查节点是否运行
ps -ef | grep redis

# 检查端口监听
netstat -tuln | grep 7000

# 测试节点可达性
telnet 192.168.1.100 7000

# 检查防火墙规则
sudo ufw status
2. Spring Boot日志调试
logging:
  level:
    org.springframework.data.redis: DEBUG
    io.lettuce.core: WARN  # 避免过多网络日志
3. 强制重新分配槽位
# 如果出现[ERR] Not all slots are covered
redis-cli --cluster fix 127.0.0.1:7000

五、生产环境优化

1. 安全加固
spring:
  redis:
    password: your_strong_password
    ssl: true  # 启用SSL加密
2. 高可用配置
spring:
  redis:
    cluster:
      max-redirects: 5
    lettuce:
      cluster:
        refresh:
          adaptive: true  # 自动发现拓扑变化
          period: 5000    # 刷新间隔(毫秒)
3. 监控配置
# 使用redis-exporter监控
docker run -d --name redis-exporter \
  -p 9121:9121 \
  oliver006/redis_exporter \
  --redis.addr=redis://192.168.1.100:7000 \
  --redis.password=your_password
  • Prometheus配置示例:
scrape_configs:
  - job_name: 'redis_cluster'
    static_configs:
      - targets: ['192.168.1.100:9121']

六、关键注意事项

  1. 跨槽位操作限制

    • 事务(Transaction)和Lua脚本只能在单个槽位执行
    • 使用hash tags强制相关数据存储在同一个槽位
  2. 数据迁移

    # 动态添加节点后迁移数据
    redis-cli --cluster reshard 127.0.0.1:7000
    
  3. 备份策略

    # 定期执行BGSAVE
    redis-cli -p 7000 bgsave
    # 备份RDB文件
    cp /opt/redis-cluster/7000/dump.rdb /backup/
    

按照以上步骤操作后,您将拥有一个完整的Redis集群环境,并在Spring Boot中实现了高性能的缓存操作。遇到具体问题时,可根据日志和集群状态命令快速定位原因。

redis 集群数据结构 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。 阅读详情

相关推荐

Redis(三十):集群(一)——集群的数据结构底层与建立连接过程

一个Redis集群通常是由多个节点组成的(一个节点对应的就是一台服务器),,要组建一个高可用的集群,需要将各个独立的节点连接起来,构成一个拥有多节点的集群里面。cluster nodes //查看当前节点集群的信息cluster meet ip地址 端口号 //让指定ip地址和端口号的服务器加入到自己的集群使用cluster meet 时,可以当前节点与指定节点进行,当握手成功时,当前节点就会将返回握手响应的节点加入到当前集群中去启动节点一个节点其实就是一个。

2401_89317420的博客 1058

Redis集群详解

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

怪咖@的博客 2万+

EPLAN二次开发入门:Visual Studio 2019环境配置与插件调试实战

本文详细介绍了EPLAN二次开发入门的关键步骤,重点讲解如何在Visual Studio 2019中配置开发环境并进行插件调试。通过创建符合命名规范的项目、引用核心API库、实现插件接口以及使用附加进程调试等实战技巧,帮助电气工程师快速掌握EPLAN插件开发,提升自动化设计效率。

h6i7j8的博客 763

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

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

QHJJHQ的博客 2万+

SpotBugs实战:10大类Bug检测规则详解与代码优化实例(附避坑清单)

本文深入解析SpotBugs在Java开发中的实战应用,详细讲解10大类Bug检测规则与代码优化实例,包括NPE防御、多线程安全、性能优化等关键问题。通过具体代码示例和避坑清单,帮助开发者提升代码质量,有效集成到CI/CD流程中。

weixin_42665255的博客 195

DSP 6678处理器Cache配置实战:从基础设置到多核一致性优化

本文深入探讨了TI TMS320C6678多核DSP处理器的Cache配置与优化实战。文章从基础概念入手,详细解析了L1、L2 Cache的模式选择与内存属性配置,并重点剖析了多核环境下缺乏硬件一致性支持带来的挑战。核心部分提供了基于Writeback和Invalidate操作的手动一致性维护策略,以及针对数据流处理、频繁访问共享数据等不同场景的性能调优与避坑指南,帮助开发者构建高效稳定的多核DSP系统。

o5p6q的博客 183

【Redis】集群

奇数个master节点可以在满足选举该条件的基础上节省一个节点,比如三个master节点和四个master节点的集群相比,大家如果都挂了一个master节点都能选举新master节点,如果都挂了两个master节点都没法选举新master节点了,所以奇数的master节点更多的是从节省机器资源角度出发说的。因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新master的条件的。集群会记录节点和槽的对应关系。

IdealSanX的博客 9106

LMS Virtual.Lab二次开发:声学仿真结果导出方法(VBScript、Python)

Siemens LMS Virtual.Lab 提供一套集成软件平台用以模拟机械系统的品质属性,如结构完整性、振动噪声、耐久性、系统动力学特性、驾驶的平顺性及操纵的稳定性等。

爱看书的小沐 6019

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

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

架构沉思录的博客 1万+

别再折腾Windows了!Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境保姆级搭建指南

本文提供Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境的详细搭建指南,涵盖系统优化、UHD驱动编译、Vivado配置及硬件验证等关键步骤,帮助射频工程师高效构建稳定的开发环境,显著提升FPGA开发效率。

weixin_29168675的博客 255

【Halcon-2D测量】set_metrology_object_param 函数功能(用于配置计量对象常规参数)

HALCON算子 set_metrology_object_param 是2D计量模块的核心配置工具,用于动态修改计量对象的测量区域、边缘检测和几何拟合参数。该算子需在检测前调用,支持批量或单独修改对象参数,包含三类关键参数:测量区域(如长度、间距)、边缘检测(如平滑Sigma、阈值)和几何拟合(如RANSAC阈值、最小分数)。使用时需注意参数互斥规则(如measure_distance优先于num_measures)和多线程同步要求。算子无输出参数,仅修改计量模型内部状态,需配合apply_metrolo

weixin_45590420的博客 291

Redis面试篇 Redis主从集群、Redis哨兵监控主从集群、Redis分片集群、Redis数据结构、Redis内存回收、Redis缓存问题、Redis持久化

Sentinel的三个作用是什么?集群监控故障恢复状态通知Sentinel如何判断一个redis实例是否健康?每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线(sdown如果大多数sentinel都认为实例主观下线,则判定服务客观下线(odown故障转移步骤有哪些?首先要在sentinel中选出一个leader,由leader执行failover选定一个slave作为新的master,执行,切换到master模式然后让所有节点都执行slaveof新master。

2301_77358195的博客 1156

智能手表 BOM 表与版本管理记录

试产与量产阶段 智能手表 BOM 表与版本管理记录

hoony123的博客 1053

Redis的三种集群结构

redis有三种集群方式:主从复制,哨兵模式和集群。 一,主从复制 主从复制是指让一个服务器去复制另一个服务器的数据,使得双方的数据保存一致,其中被复制的服务器为主服务器,复制的服务器为从服务器。当主服务器的数据发生改变时,主服务器会通知从服务器,保存数据的一致性。 在Redis中,使用slaveof命令来执行主从复制。 (一)旧版的主从复制实现 在旧...

QEcode的博客 1027

37、OpenMP:并行编程的强大工具

本文详细介绍了 OpenMP 的核心功能和使用方法,包括执行环境例程、线程同步与协调机制,如关键区域、屏障、原子操作、归约子句、刷新构造和锁机制。此外,还提供了多个实践练习,涵盖矩阵乘法的并行实现、任务池与流水线模式的应用、读写锁的扩展与移植,以及客户端-服务器模式的实现与优化。通过这些内容,读者可以全面掌握 OpenMP 在并行编程中的实际应用与性能优化技巧。

www00的博客 102

假人有限元模型

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

Redis,从数据结构到集群的知识总结

redis底层使用C语言实现,这里主要分析底层数据结构。

Rinai的博客 983

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redis集群模式和常用数据结构

在这种模式下,主节点(Master)负责处理写入操作,而从节点(Slave)则是主节点的副本,用于处理读取操作和提供数据冗余。哨兵节点(Sentinel)监控主节点和从节点的状态,当主节点出现故障时,哨兵会自动将一个从节点升级为新的主节点,并通知其他从节点和客户端新的主节点地址,以此来保证Redis服务的高可用性。适用场景:字符串是最基本的类型,可以存储任何形式的数据,比如文本、数字、JSON 等。适用场景:列表是一个有序的字符串集合,可以实现栈(先进后出)或队列(先进先出)的功能。

sdgfafg_25的博客 1068

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Redis集群概念和结构概念

Redis是非关系型数据库,使用key value结构做存储 redis支持了string,list,hash,set,zset5种类型。 以下是一些基础结构 1.string结构 SDS结构,线程安全,防止溢出,惰性空间释放 2.list结构 双端,无环 3.dictionary结构 hash表实现,可以参考hashmap的实现 渐进rehash,新建B,然后后续使用的时候,慢慢从A->B...

sky_die的专栏 228

【一文看懂 Redis 核心】 基础数据结构 & 架构设计 & 存储 & 集群

就是快,就是效率

dying 搁浅 1046

redis分片集群结构

Redis 分片集群(Redis Cluster)是一种分布式部署模式,它将数据划分为多个片(Shard),分别存储在不同的 Redis 节点上。通过分片实现水平扩展,每个节点仅存储整个数据集的一部分,同时节点之间能够协同工作。Redis 分片集群通过数据分片实现了高可用性和可扩展性,是应对高并发和海量数据存储的利器。在 Java 项目中,可以使用 Jedis 等客户端轻松连接和操作 Redis 集群。合理规划节点数和主从结构。使用工具自动化配置集群。监控集群运行状态,及时扩展或调整节点。

Flying_Fish_roe的博客 988

【Redis】核心技术详解:数据结构、缓存、日志与集群

本文系统解析Redis的核心技术模块,包括数据结构、缓存机制、持久化方案及集群架构。首先详细拆解5种基础数据结构(String、Hash、List、Set、Sorted Set)和3种扩展结构(Bitmap、HyperLogLog、Geospatial)的底层实现与应用场景。其次深入探讨缓存策略,包括过期处理与淘汰机制,并提出穿透、击穿、雪崩三大问题的解决方案。然后对比分析RDB和AOF两种持久化方式的原理与优劣。最后简要介绍Redis集群的高可用实现。全文通过表格对比和实战细节,帮助开发者全面掌握Redi

独立思考,明辨是非 815

Redis分片集群结构

Redis存在以下两个问题。

qq_55630615的博客 617

Redis哨兵集群结构和作用

Redis哨兵集群结构和作用

m0_61787196的博客 522

Redis的集群结构

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)进行数据共享,并提供复制和故障转移功能。 一、节点         同其他分布式的集群一样,Redis集群也是由多个相互独立的节点组成的,通过将各个相互独立的节点连接起来,构成一个包含多个节点的集群。通过CLUSTER MEET 命令,将指定节点添加当前节点所在的集群:

行者小朱的博客 810

redis集群、数据结构、底层、算法等总结

Redis使用文档 一、redis集群模式说明 1、主从复制模式、哨兵模式、cluster高可用集群模式 主从复制模式 (1)工作原理 Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已

weixin_37601506的博客 453
上一篇: Redis哨兵(主从架构 + Sentinel)
下一篇: FreeMarker静态模版基础语法
小李不秃头♛
博客等级 码龄2年 619粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值