Docker 搭建Redis Sentinel 测试环境

docker-compose.yml

创建docker-compose.yml文件:

version: '3.8'

networks:
  app-tier:
    driver: bridge

services:
  redis-master:
    image: bitnami/redis:latest
    container_name: redis-master
    networks:
      - app-tier
    environment:
      - REDIS_PASSWORD=123
      - ALLOW_EMPTY_PASSWORD=no
    ports:
      - "6379:6379"

  redis-slave:
    image: bitnami/redis:latest
    container_name: redis-slave
    networks:
      - app-tier
    depends_on:
      - redis-master
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=123
      - REDIS_PASSWORD=123
      - ALLOW_EMPTY_PASSWORD=no
    ports:
      - "6380:6379"

  redis-sentinel-1:
    image: bitnami/redis-sentinel:latest
    container_name: redis-sentinel-1
    networks:
      - app-tier
    depends_on:
      - redis-master
      - redis-slave
    environment:
      - REDIS_MASTER_NAME=mymaster
      - REDIS_MASTER_HOST=127.0.0.1
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=123
      - REDIS_SENTINEL_QUORUM=2
      - ALLOW_EMPTY_PASSWORD=no
    ports:
      - "26379:26379"

  redis-sentinel-2:
    image: bitnami/redis-sentinel:latest
    container_name: redis-sentinel-2
    networks:
      - app-tier
    depends_on:
      - redis-master
      - redis-slave
    environment:
      - REDIS_MASTER_NAME=mymaster
      - REDIS_MASTER_HOST=127.0.0.1
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=123
      - REDIS_SENTINEL_QUORUM=2
      - ALLOW_EMPTY_PASSWORD=no
    ports:
      - "26380:26379"

  redis-sentinel-3:
    image: bitnami/redis-sentinel:latest
    container_name: redis-sentinel-3
    networks:
      - app-tier
    depends_on:
      - redis-master
      - redis-slave
    environment:
      - REDIS_MASTER_NAME=mymaster
      - REDIS_MASTER_HOST=127.0.0.1
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=123
      - REDIS_SENTINEL_QUORUM=2
      - ALLOW_EMPTY_PASSWORD=no
    ports:
      - "26381:26379"

启动Docker Compose服务

确保你在正确的目录中,并运行以下命令启动所有服务:

docker-compose up -d

验证服务状态

使用以下命令查看所有容器的状态:

docker-compose ps

从宿主机连接到Redis哨兵

使用Redis CLI从宿主机连接到Redis哨兵:

redis-cli -p 26379 -a 123

在Redis CLI中执行命令

在连接到哨兵CLI后,执行以下命令以查询主节点地址:

127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6379"
127.0.0.1:26379> 

在这里插入图片描述

在代码中使用哨兵

package com.github.xiaolyuh.config;

import com.github.xiaolyuh.redis.clinet.RedisClient;
import com.github.xiaolyuh.redis.clinet.RedisProperties;
import com.github.xiaolyuh.redis.clinet.SentinelRedisClient;
import com.github.xiaolyuh.redis.serializer.FastJsonRedisSerializer;
import com.github.xiaolyuh.redis.serializer.JacksonRedisSerializer;
import com.github.xiaolyuh.redis.serializer.JdkRedisSerializer;
import com.github.xiaolyuh.redis.serializer.KryoRedisSerializer;
import com.github.xiaolyuh.redis.serializer.ProtostuffRedisSerializer;
import com.github.xiaolyuh.redis.serializer.StringRedisSerializer;
import com.github.xiaolyuh.util.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource({"classpath:application.properties"})
public class RedisSentinelConfig {

    @Value("${layering-cache.redis.nodes:127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381}")
    private String nodes;

    @Value("${spring.redis.password:123}")
    private String password;

    @Bean
    public RedisClient layeringCacheRedisClient() {
        RedisProperties redisProperties = new RedisProperties();
        redisProperties.setSentinelNodes(nodes);
        redisProperties.setPassword(StringUtils.isBlank(password) ? null : password);

        KryoRedisSerializer kryoRedisSerializer = new KryoRedisSerializer();
        FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer();
        JacksonRedisSerializer jacksonRedisSerializer = new JacksonRedisSerializer();
        JdkRedisSerializer jdkRedisSerializer = new JdkRedisSerializer();
        ProtostuffRedisSerializer protostuffRedisSerializer = new ProtostuffRedisSerializer();

        StringRedisSerializer keyRedisSerializer = new StringRedisSerializer();

        SentinelRedisClient redisClient = new SentinelRedisClient(redisProperties);

        redisClient.setKeySerializer(keyRedisSerializer);
        redisClient.setValueSerializer(protostuffRedisSerializer);
        return redisClient;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值