当前位置: 首页 > article >正文

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;
    	}
    #----------------------------------------------------------
    

http://www.kler.cn/a/133771.html

相关文章:

  • idea 弹窗 delete remote branch origin/develop-deploy
  • Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍
  • Linux系统编程多线程之条件变量和信号量讲解
  • MySQL的SQL书写顺序和执行顺序
  • Linux 常用操作指令大揭秘(下)
  • 虚幻引擎 CEO 谈元宇宙:发展、策略与布局
  • 抽象工厂模式-C++实现
  • 当小白遇到电脑程序不完全退出怎么办?
  • kubernetes--Pod控制器详解
  • 【Java并发编程六】多线程越界问题
  • nginx 如何根据IP做限流,以及 nginx 直接返回 json 格式数据
  • 深信服AC密码认证(外部认证:LDAP认证)
  • C#中委托和事件的使用总结
  • JDK1.5 新特性【反射】
  • 大数据基础设施搭建 - ZooKeeper
  • 漏洞利用工具的编写
  • kafka 磁盘扩容与数据均衡实在操作讲解
  • K-Means算法进行分类
  • 2342. 数位和相等数对的最大和 --力扣 --JAVA
  • MySQL数据库下的Explain命令深度解析
  • 自动驾驶学习笔记(九)——车辆控制
  • .NET 8 正式 GA 遥遥领先
  • kaggle新赛:SenNet 3D肾脏分割大赛(3D语义分割)
  • windows 安装 Oracle Database 19c
  • WPF如何实现应用程序托盘
  • 【算法日志】图论 并查集及其简单应用