# x-docker-compose-redis-sentinel **Repository Path**: BenCRL/x-docker-compose-redis-sentinel ## Basic Information - **Project Name**: x-docker-compose-redis-sentinel - **Description**: docker-compose搭建redis-sentinel集群 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-01-23 - **Last Updated**: 2025-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # docker -compose 搭建redis-sentinel集群(1主2从,哨兵模式) ## 1.下载安装docker ``` docker version ``` ## 2.下载安装docker-compose ``` curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.6/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` ## 3.下载安装docker-redis ``` docker pull redis ``` ## 4.创建文件,目录 ``` #目录结构 |--etc |--redis |----docker-compose.yml |--sentinel |----docker-compose.yml |----sentinel.conf |----sentinel1.conf |----sentinel2.conf |----sentinel3.conf ``` ### 4.1 docker-compose-redis.yml **文件名:docker-compose.yml** ```yml version: '3.4' services: master: image: redis container_name: redis-master restart: always command: redis-server --port 6379 --requirepass 1234 ports: - 6379:6379 slave1: image: redis container_name: redis-slave-1 restart: always command: redis-server --slaveof 172.24.29.181 6379 --port 6380 --requirepass 1234 --masterauth 1234 ports: - 6380:6379 slave2: image: redis container_name: redis-slave-2 restart: always command: redis-server --slaveof 172.24.29.181 6379 --port 6381 --requirepass 1234 --masterauth 1234 ports: - 6381:6379 ``` ### 4.2 docker-compose-sentinel.yml **文件名:docker-compose.yml** ```yml version: '3.4' services: sentinel1: image: redis container_name: redis-sentinel-1 command: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always ports: - 26379:26379 volumes: - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf sentinel2: image: redis container_name: redis-sentinel-2 command: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always ports: - 26380:26379 volumes: - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf sentinel3: image: redis container_name: redis-sentinel-3 command: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always ports: - 26381:26379 volumes: - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf ``` ### 4.3 sentinel.conf **文件名:sentinel.conf** ```yml port 26379 dir /tmp # 自定义集群名,其中 127.0.0.1 为 redis-master 的 ip,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2) sentinel monitor mymaster 172.24.29.181 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel auth-pass mymaster 1234 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes ``` ## 5.启动redis ``` # 进入redis目录 cd /usr/local/etc/redis docker-compose up -d ``` ## 6.启动sentinel ``` # 进入sentinel目录 cd /usr/local/etc/sentinel docker-compose up -d ``` ## 7.查询当前运行中程序 ``` # 查询运行中 docker ps # 查询所有 docker ps -a ``` ![输入图片说明](https://images.gitee.com/uploads/images/2021/0401/172443_23cfa180_8909663.png "image-20210401170851357.png") ## 8. springboot ### 8.1 application.properties ```properties spring.redis.sentinel.nodes=172.24.29.181:26379,172.24.29.181:26380,172.24.29.181:26381 spring.redis.sentinel.master=mymaster spring.redis.password=1234 spring.redis.timeout=5000 spring.redis.lettuce.pool.max-active=50 spring.redis.lettuce.pool.max-idle=10 spring.redis.lettuce.pool.min-idle=5 spring.redis.lettuce.pool.max-wait=10000 ``` ### 8.2 RedisConfig.class ```java package cn.xdf.uc.datacruise.core.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { @Bean @SuppressWarnings("all") public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); // 禁用后保存空对象不报错 // objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有(包括private和public) objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会抛出异常 objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key采用String的序列化方式 redisTemplate.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 redisTemplate.setHashKeySerializer(stringRedisSerializer); // value采用jackson序列化方式 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // hash的value采用jackson序列化方式 redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } } ```