资讯专栏INFORMATION COLUMN

docker搭建redis哨兵集群并且整合springboot的实现

3119555200 / 458人阅读


一   创建redis和sentinel


因为我们要存放docker-compose.yml文件,所以需要创建redis和sentinel两个文件夹


二   创建docker-compose.yml


docker-compose.yml


version: "3"
services:
master:
image: redis:latest
container_name: my_redis_master
command: redis-server --requirepass root
ports:
- 6379:6379
slave1:
image: redis:latest
depends_on:
- master
container_name: my_redis_slave1
command: redis-server --slaveof my_redis_master 6379 --requirepass root --masterauth root
ports:
- 6380:6379
slave2:
image: redis:latest
depends_on:
- master
container_name: my_redis_slave2
ports:
- 6381:6379
command: redis-server --slaveof my_redis_master 6379 --requirepass root --masterauth root
networks:
name: redis_net


三   sdocker-compose.yml文件、sentinel.conf配置文件


sdocker-compose.yml文件


version: '3'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
networks:
- redis_net
ports:
- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
sentinel2:
image: redis
container_name: redis-sentinel-2
networks:
- redis_net
ports:
- 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
sentinel3:
image: redis
container_name: redis-sentinel-3
networks:
- redis_net
ports:
- 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
redis_net:
external:
name: redis_net


sentinel配置文件


port 26379
dir /tmp
sentinel monitor mymaster 192.168.16.2 6379 2
sentinel auth-pass mymaster root 
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes


四   整合redis哨兵


依赖


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 排除lettuce包,使用jedis代替-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.1</version>
</dependency>


配置


spring:
redis:
sentinel:
master: mymaster
nodes: 192.168.16.5:26379,192.168.16.6:26380,192.168.16.7:26381
max-idle: 8
min-idle: 0
max-wait: -1
max-active: 8
password: root


配置bean


@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}


五   使用哨兵工作


5.1  哨兵的特点


· 哨兵每秒一次会向集群中的所有redis发送ping命令


· 如果ping命令的时间超过了 down-after-milliseconds设置的时间,哨兵会将其标记为主观下线


· 当Master被标记为了主观下线时,哨兵会以每秒一次的频率确认Master是否进入了主观下线状态


· 当大部分哨兵确认Master进入主观下线,那么Master就会被改为客观下线


· 如果哨兵不同意Master主服务器下线,master就不会进入客观下线状态


5.2  转移故障


·  选择优先级最高的


·  复制偏移量大的从节点


·  runid最小的


六   Redis-Cluster


6.1  特点


·  使用二进制连接


·  精密的检测


·  客户端只需要连接集群中任何一个节点即可


6.2  工作方式


redis-cluster引入了主从模式,一个主节点对应多个从节点,当超过半数的从节点ping主节点超时时,就会认为主节点宕机了



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127641.html

相关文章

  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    BicycleWarrior 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    Mr_houzi 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    tommego 评论0 收藏0
  • Linux_基于Docker搭建Redis集群

    摘要:时间年月日星期二说明基于,开始本教程前,请确保您的系统已安装。为了保证集群的高可用,下面开始配置哨兵模式。 时间:2017年07月11日星期二 说明:基于Ubuntu16.04-64bit,开始本教程前,请确保您的Linux系统已安装Docker。 步骤一:Redis镜像安装 1、下载Redis镜像 镜像中心 推荐使用网易蜂巢的镜像中心 地址:https://c.163.com/hub...

    txgcwm 评论0 收藏0
  • Linux_基于Docker搭建Redis集群

    摘要:时间年月日星期二说明基于,开始本教程前,请确保您的系统已安装。为了保证集群的高可用,下面开始配置哨兵模式。 时间:2017年07月11日星期二 说明:基于Ubuntu16.04-64bit,开始本教程前,请确保您的Linux系统已安装Docker。 步骤一:Redis镜像安装 1、下载Redis镜像 镜像中心 推荐使用网易蜂巢的镜像中心 地址:https://c.163.com/hub...

    hoohack 评论0 收藏0

发表评论

0条评论

3119555200

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<