Redis 主从复制哨兵集群模式

Posted 爱码代码的喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 主从复制哨兵集群模式相关的知识,希望对你有一定的参考价值。

Redis 主从复制、哨兵、集群模式

单节点模式

SpringBoot整合
@Bean(name = "singleClient")
public RedissonClient singleRedissonClient() 
    try 
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + redisProperties.getUrl() + ":" + redisProperties.getPort()).setDatabase(1);
        // 设置序列化方式
        Codec codec = new JsonJacksonCodec();
        config.setCodec(codec);
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("one").set("one");
        logger.info("==========> singleRedissonClient()配置完成!");
        return redissonClient;
     catch (Exception e) 
        logger.info("==========> singleRedissonClient() 出错:" + e.getMessage());
        return null;
    


主从复制

配置方式

主节点配置不变,从节点配置信息加上slaveof 127.0.0.1 9000服务器地址和端口。

特点
  • 一个master可以有多个slave。
  • slave之间也可以互相同步。简单点说就是备份数据库,防止了数据的丢失等。
  • 可以用于读写分离和恢复丢失的数据。
  • 需要手动去配置主从节点,加入主节点挂了,需要重新定义主节点。
SpringBoot整合
/**
  * 主从模式
  */
@Bean(name = "masterSlaveClient")
@Primary
public RedissonClient masterSlaveClient() 
    try 
        Config config = new Config();
        config.useMasterSlaveServers().setMasterAddress("redis://127.0.0.1:6379")
            .addSlaveAddress("redis://127.0.0.1:6380");
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("masterSlaveClient").set("masterSlaveClient");
        logger.info("==========> masterSlaveClient()配置完成!");
        return redissonClient;
     catch (Exception e) 
        logger.info("==========> masterSlaveClient() 出错:" + e.getMessage());
        return null;
    


哨兵模式

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是**哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。**简单来说,就是替代了人工手动方式切换主节点的操作。

哨兵的作用
  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

/**
  * 哨兵模式
  */
@Bean(name = "sentryClient")
public RedissonClient sentryClient()
    try
        Config config = new Config();
        // 需要启动/redis-sentinel
        config.useSentinelServers().setMasterName("mymaster")
            .addSentinelAddress("redis://127.0.0.1:6379")
            .addSentinelAddress("redis://127.0.0.1:6380");
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("sentryClient").set("sentryClient");
        logger.info("==========> sentryClient()配置完成!");
        return redissonClient;
    catch (Exception e)
        logger.info("==========> sentryClient() 出错:" + e.getMessage());
    
    return null;


集群模式

需要开启Redis的集群模式,不然会报错。采用集群,就是分布式存储。即每台redis存储不同的内容。 集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。通过集群模式提供多个master主节点,每个节点都可以读写,节点之间可以互相通信;整个集群无中心节点。

集群模式特点
  • 自动将数据进行分片,每个 master 上放一部分数据。
  • 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的。
/**
  * 集群模式
  */
@Bean(name = "clustersClient")
public RedissonClient  clustersClient()
    try
        Config config = new Config();
        config.useClusterServers()
            .setScanInterval(2000)
            .addNodeAddress("redis://127.0.0.1:6379")
            .addNodeAddress("redis://127.0.0.1:6382")
            // ..
            // ..
            // ..
            .addNodeAddress("redis://127.0.0.1:6381");
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("clustersClient").set("clustersClient");
        logger.info("==========> clustersClient()配置完成!");
        return redissonClient;
    catch (Exception e)
        logger.info("==========> clustersClient() 出错:" + e.getMessage());
    
    return null;

以上是关于Redis 主从复制哨兵集群模式的主要内容,如果未能解决你的问题,请参考以下文章

缓存加速------Redis主从复制,哨兵模式,集群

缓存加速------Redis主从复制,哨兵模式,集群

Redis 高可用之主从复制哨兵模式集群模式

NoSQL 之Redis主从复制哨兵和集群介绍及详细搭建步骤

Redis数据库——Redis集群模式(主从复制哨兵Cluster)

Redis数据库——(主从复制哨兵模式集群)