-
获取配置
#---------------------------------------------------------- 拉取镜像 docker pull redis:latest #---------------------------------------------------------- 创建容器 docker run --name redis -d redis:latest #---------------------------------------------------------- 获取版本 docker exec redis redis-server --version #---------------------------------------------------------- 删除容器 docker rm -f redis #---------------------------------------------------------- 获取配置 http://download.redis.io/releases 解压获取 redis.conf sentinel.conf 注意事项 redis.conf sentinel.conf 同镜像中Redis版本必须一致 否则容器启动异常 #---------------------------------------------------------- -
编辑配置
#---------------------------------------------------------- /opt/redis/conf/redis_6380.conf |# bind 127.0.0.1 -::1|protected-mode no|appendonly yes|appendfsync always|# appendfsync everysec|port 6380| /opt/redis/conf/redis_6381.conf |# bind 127.0.0.1 -::1|protected-mode no|appendonly yes|appendfsync always|# appendfsync everysec|port 6381| /opt/redis/conf/redis_6382.conf |# bind 127.0.0.1 -::1|protected-mode no|appendonly yes|appendfsync always|# appendfsync everysec|port 6382| #-------------------------主从模式------------------------- /opt/redis/conf/redis_6381.conf |replicaof <host-ip> 6380| /opt/redis/conf/redis_6382.conf |replicaof <host-ip> 6380| #-------------------------哨兵模式------------------------- /opt/redis/conf/sentinel_26380.conf |# bind 127.0.0.1 192.168.1.1|protected-mode no|sentinel monitor mymaster <host-ip> 6380 1|sentinel down-after-milliseconds mymaster 5000|sentinel failover-timeout mymaster 10000|port 26380| /opt/redis/conf/sentinel_26381.conf |# bind 127.0.0.1 192.168.1.1|protected-mode no|sentinel monitor mymaster <host-ip> 6380 1|sentinel down-after-milliseconds mymaster 5000|sentinel failover-timeout mymaster 10000|port 26381| /opt/redis/conf/sentinel_26382.conf |# bind 127.0.0.1 192.168.1.1|protected-mode no|sentinel monitor mymaster <host-ip> 6380 1|sentinel down-after-milliseconds mymaster 5000|sentinel failover-timeout mymaster 10000|port 26382| #---------------------------------------------------------- -
一主二从
#-------------------------一主二从------------------------- docker rm -f redis_6380 redis_6381 redis_6382 #---------------------------------------------------------- docker run --name redis_6380 \ --restart=always \ --network host \ -v /opt/redis/conf/redis_6380.conf:/etc/redis/redis.conf \ -v /opt/redis/data/6380:/data \ -d redis:latest \ redis-server /etc/redis/redis.conf #---------------------------------------------------------- docker run --name redis_6381 \ --restart=always \ --network host \ -v /opt/redis/conf/redis_6381.conf:/etc/redis/redis.conf \ -v /opt/redis/data/6381:/data \ -d redis:latest \ redis-server /etc/redis/redis.conf #---------------------------------------------------------- docker run --name redis_6382 \ --restart=always \ --network host \ -v /opt/redis/conf/redis_6382.conf:/etc/redis/redis.conf \ -v /opt/redis/data/6382:/data \ -d redis:latest \ redis-server /etc/redis/redis.conf #---------------------------------------------------------- firewall-cmd --zone=public --add-port=6380/tcp --permanent && firewall-cmd --reload firewall-cmd --zone=public --add-port=6381/tcp --permanent && firewall-cmd --reload firewall-cmd --zone=public --add-port=6382/tcp --permanent && firewall-cmd --reload #---------------------------------------------------------- # 主从模式下 主节点可以增删改查 从节点只能查 主节点宕机则集群只能查 主节点恢复则集群自动恢复 #---------------------------------------------------------- -
三个哨兵
#-------------------------三个哨兵------------------------- docker rm -f sentinel_26380 sentinel_26381 sentinel_26382 #---------------------------------------------------------- docker run --name sentinel_26380 \ --restart=always \ --network host \ -v /opt/redis/conf/sentinel_26380.conf:/etc/redis/sentinel.conf \ -d redis:latest \ redis-sentinel /etc/redis/sentinel.conf #---------------------------------------------------------- docker run --name sentinel_26381 \ --restart=always \ --network host \ -v /opt/redis/conf/sentinel_26381.conf:/etc/redis/sentinel.conf \ -d redis:latest \ redis-sentinel /etc/redis/sentinel.conf #---------------------------------------------------------- docker run --name sentinel_26382 \ --restart=always \ --network host \ -v /opt/redis/conf/sentinel_26382.conf:/etc/redis/sentinel.conf \ -d redis:latest \ redis-sentinel /etc/redis/sentinel.conf #---------------------------------------------------------- firewall-cmd --zone=public --add-port=26380/tcp --permanent && firewall-cmd --reload firewall-cmd --zone=public --add-port=26381/tcp --permanent && firewall-cmd --reload firewall-cmd --zone=public --add-port=26382/tcp --permanent && firewall-cmd --reload #---------------------------------------------------------- # 哨兵模式下 主节点宕机 从节点被切换为主节点 主节点恢复后变为从节点 哨兵数量至少2个 否则无法执行切换 #---------------------------------------------------------- -
项目配置
#---------------------------------------------------------- spring: redis: sentinel: master: mymaster # 哨兵模式下的主节点名称 nodes: <host-ip>:26380,<host-ip>:26381,<host-ip>:26382 # 哨兵节点的地址列表 password: '' # 设置哨兵节点的密码 lettuce: pool: max-active: 8 # 最大连接数据库连接数,设 0 为没有限制 max-idle: 8 # 最大等待连接中的数量,设 0 为没有限制 max-wait: -1ms # 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 min-idle: 0 # 最小等待连接中的数量,设 0 为没有限制 shutdown-timeout: 100ms #---------------------------------------------------------- @Value("${spring.redis.sentinel.nodes}") private String sentinelNodes; @Value("${spring.redis.sentinel.master}") private String sentinelMaster; @Value("${spring.redis.sentinel.password}") private String sentinelPassword; public RedisCacheManager redisCacheManager() { log.info("===============(1)创建缓存管理器RedisCacheManager"); RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(redisManager()); //redis中针对不同用户缓存(此处的id需要对应user实体中的id字段,用于唯一标识) redisCacheManager.setPrincipalIdFieldName("id"); //用户权限信息缓存时间 redisCacheManager.setExpire(200000); return redisCacheManager; } @Bean public RedisManager redisManager() { log.info("===============(2)创建RedisManager,连接Redis..URL= " + sentinelNodes + ", masterName=" + sentinelMaster); RedisManager redisManager = new RedisManager(); redisManager.setHost(sentinelNodes); if (!StringUtils.isEmpty(sentinelPassword)) { redisManager.setPassword(sentinelPassword); } return redisManager; } #----------------------------------------------------------
Redis哨兵模式(Docker)
童心同萌2023-11-21 13:34
相关推荐
想用offer打牌31 分钟前
面试官问Redis主从延迟导致脏数据读怎么解决?墨白曦煜2 小时前
深入剖析 Redis 客户端:Sentinel 模式下的“寻址”与“感知”艺术遇见火星2 小时前
Redis高可用-哨兵模式(Sentinel)卡布叻_星星2 小时前
Docker之Windows与Linux不同架构部署理解weixin_462446233 小时前
【实战原创】Docker 清理指南:以 Coze Studio 为例的资源保留与清理实践(非万能方案)hkNaruto3 小时前
【docker】docker exec -it 报错 open /dev/pts/0: operation not permitted米花町的小侦探3 小时前
WSL创建pgsql容器脚本鸽鸽程序猿3 小时前
【Redis】Java客户端使用Redis一个想打拳的程序员3 小时前
无需复杂配置!用%20docker-webtop%20打造跨设备通用%20Linux%20桌面,加载cpolar远程访问就这么简单北城以北88883 小时前
SpringBoot--Redis基础知识