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 主从复制哨兵集群模式的主要内容,如果未能解决你的问题,请参考以下文章
NoSQL 之Redis主从复制哨兵和集群介绍及详细搭建步骤