Redis哨兵模式(Docker)

  1. 获取配置

    复制代码
    #----------------------------------------------------------
    拉取镜像 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版本必须一致 否则容器启动异常
    #----------------------------------------------------------
  2. 编辑配置

    复制代码
    #----------------------------------------------------------
    /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|
    #----------------------------------------------------------
  3. 一主二从

    复制代码
    #-------------------------一主二从-------------------------
    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
    #----------------------------------------------------------
    # 主从模式下 主节点可以增删改查 从节点只能查 主节点宕机则集群只能查 主节点恢复则集群自动恢复
    #----------------------------------------------------------
  4. 三个哨兵

    复制代码
    #-------------------------三个哨兵-------------------------
    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个 否则无法执行切换
    #----------------------------------------------------------
  5. 项目配置

    复制代码
    #----------------------------------------------------------
    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;
    	}
    #----------------------------------------------------------
相关推荐
啦啦啦小石头1 天前
docker添加用户权限不使用sudo
运维·docker·容器
cuber膜拜1 天前
Weaviate 简介与基本使用
数据库·python·docker·向量数据库·weaviate
代码or搬砖1 天前
ReentranLock中AQS讲解
java·开发语言·redis
xuefuhe1 天前
Docker常用命令
docker
云草桑1 天前
15分钟快速了解 Odoo
数据库·python·docker·postgresql·.net·odoo
春日见1 天前
Autoware使用教程
大数据·人工智能·深度学习·elasticsearch·搜索引擎·docker·容器
源代码•宸1 天前
Redis 攻略(Redis Object)
数据库·redis·后端·缓存·字符串·哈希表·type
·云扬·1 天前
Redis运维实战:大key与热key排查优化、监控指标及内存策略全解析
运维·数据库·redis
heartbeat..1 天前
Redis常见问题及对应解决方案(基础+性能+持久化+高可用全场景)
java·数据库·redis·缓存
阿_焦1 天前
docker部署dify踩坑笔记
docker·ai·dify