Redis 哨兵集群搭建及在 Spring Boot 项目中的应用(YAML 配置)指南

一、Redis 哨兵集群搭建

(一)架构说明

  • Redis 主从节点:1 主 2 从,端口分别为 6379、6380、6381。

  • 哨兵节点:3 个哨兵,端口分别为 26379、26380、26381。

  • 目标:实现自动故障转移和高可用。

(二)配置主从节点

主节点(6379)配置(redis-6379.conf)
bind 0.0.0.0
port 6379
daemonize yes
requirepass 123456          # 主节点密码
masterauth 123456           # 从节点同步时使用的密码
appendonly yes
从节点 1(6380)配置(redis-6380.conf)
bind 0.0.0.0
port 6380
daemonize yes
slaveof 127.0.0.1 6379     # 主节点 IP 和端口
masterauth 123456
requirepass 123456
从节点 2(6381)配置(redis-6381.conf)
bind 0.0.0.0
port 6381
daemonize yes
slaveof 127.0.0.1 6379
masterauth 123456
requirepass 123456

(三)配置哨兵节点

哨兵 1(26379)配置(sentinel-26379.conf)
port 26379
daemonize yes
sentinel monitor mymaster 127.0.0.1 6379 2  # 监控主节点,2 为法定人数
sentinel auth-pass mymaster 123456          # 主节点密码
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
哨兵 2(26380)配置(sentinel-26380.conf)        `
port 26380
daemonize yes
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
哨兵 3(26381)配置(sentinel-26381.conf)
port 26381
daemonize yes
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

(四)启动服务

# 启动 Redis 节点
redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf

# 启动哨兵节点
redis-sentinel sentinel-26379.conf
redis-sentinel sentinel-26380.conf
redis-sentinel sentinel-26381.conf

(五)验证哨兵集群

# 查看哨兵监控信息
redis-cli -p 26379 sentinel masters
redis-cli -p 26379 sentinel slaves mymaster

# 模拟主节点宕机
redis-cli -h 127.0.0.1 -p 6379 -a 123456 DEBUG sleep 30

# 观察哨兵日志,确认自动故障转移
tail -f sentinel-26379.log

二、Spring Boot 整合哨兵模式(YAML 配置)

(一)添加依赖(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

(二)配置 YAML(application.yml)

spring:
  redis:
    password: 123456            # Redis 密码(主从节点需一致)
    sentinel:
      master: mymaster           # 哨兵配置的主节点名称
      nodes:                     # 哨兵节点列表
        - 127.0.0.1:26379
        - 127.0.0.1:26380
        - 127.0.0.1:26381
    lettuce:
      pool:
        max-active: 100          # 连接池配置
        max-idle: 50
        min-idle: 10
        max-wait: 5000ms
      shutdown-timeout: 100ms

(三)配置 RedisTemplate

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

(四)使用 RedisTemplate

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void writeData(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);  // 写操作自动路由到主节点
    }

    public Object readData(String key) {
        return redisTemplate.opsForValue().get(key);  // 读操作默认跟随哨兵策略
    }
}

三、验证高可用性

(一)写入测试

@SpringBootTest
public class SentinelTest {

    @Autowired
    private RedisService redisService;

    @Test
    void testWrite() {
        redisService.writeData("sentinel_test", "Hello Sentinel!");
        System.out.println("写入成功");
    }
}

(二)故障转移测试

  • 手动关闭主节点

redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
  • 观察日志

tail -f /var/log/redis/sentinel.log  # 查看故障转移日志
  • 验证新主节点

redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

四、注意事项

(一)密码一致性

  • 所有 Redis 节点和哨兵节点需使用相同密码。

  • Spring Boot 配置中需明确指定密码。

(二)哨兵节点发现

  • 至少配置 3 个哨兵节点以确保高可用。

  • 确保哨兵节点之间网络互通。

(三)客户端行为

  • Lettuce 客户端默认自动发现主从节点变化。

  • 若使用 Jedis,需配置 spring.redis.jedis.pool... 并启用自动刷新。

(四)连接池优化

lettuce:
  pool:
    max-active: 200       # 根据并发量调整
    max-wait: 3000ms      # 获取连接超时时间
    test-on-borrow: true  # 借出连接时校验

(五)日志监控

logging:
  level:
    org.springframework.data.redis: DEBUG  # 开启 Redis 操作日志

通过以上配置,Spring Boot 项目即可实现:

  • ✅ 自动连接哨兵集群

  • ✅ 主节点故障自动切换

  • ✅ 读写分离(默认跟随哨兵策略)

  • ✅ 连接池优化管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值