Redis哨兵模式高可用解决方案
一、序言
Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务。
1、目标与收获
一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使用Supervisor监控并管理Redis实例。通过本文将完成如下目标:
- 哨兵模式服务规划与搭建
哨兵模式服务相比于单机版服务更加可靠,适合读写分离、数据量不是很大、要求可靠稳定性的场景。
- 客户端整合与读写分离
通过Spring框架对哨兵模式进行连接,完成生产环境的常见操作。
2、端口规划
端口规划是完成本方案的第一步。

二、单机模拟
单机模拟是指在单台物理机或者虚拟机上模拟操作,最大化还原本方案中间过程,适用于学习或者开发阶段使用。
为了简化操作,Redis服务做如下约定:数据不持久化到磁盘;服务实例以前台进程方式运行;节点的配置文件以默认配置文件为模版;无密码验证。
(一)服务规划
1、Redis实例
服务在第一次启动时明确知道第几个节点是master节点,当服务在长期运行并发生主从切换时,无法显示知道第几个节点是master节点,需要通过命令行间接查询。
| 节点 | 主机 | 端口 | 角色 | 额外配置 |
|---|---|---|---|---|
| node01 | 127.0.0.1 | 6380 | 第一次启动时作为master服务 | |
| node02 | 127.0.0.1 | 6381 | 第一次启动时作为slave服务 | replicaof 127.0.0.1 6380 |
| node03 | 127.0.0.1 | 6382 | 第一次启动时作为slave服务 | replicaof 127.0.0.1 6380 |
额外配置指第一次启动Redis服务实例时,节点配置文件中新增配置。
2、哨兵服务
哨兵服务节点之间没有主从的区别,所有节点处于平等地位。当主服务异常时,哨兵服务之间会唤醒投票策略,从Redis实例从节点选择主服务的候选人。
| 节点 | 主机 | 端口 | 额外配置 |
|---|---|---|---|
| node01 | 127.0.0.1 | 26380 | sentinel monitor mymaster 127.0.0.1 6380 2 |
| node02 | 127.0.0.1 | 26381 | sentinel monitor mymaster 127.0.0.1 6380 2 |
| node03 | 127.0.0.1 | 26382 | sentinel monitor mymaster 127.0.0.1 6380 2 |
(二)服务配置
1、Redis实例
节点的初始配置文件以默认配置文件为模版。
node01、node02初始化配置文件之后,显示指明节点间的主从关系,增加如下配置:
replicaof 127.0.0.1 6380
2、哨兵服务
节点的初始配置文件以默认配置文件为模版。
node01、node02、node03初始化配置文件后,增加如下配置:
sentinel monitor mymaster 127.0.0.1 6381 2
(三)服务管理
测试或者学习时,建议采用前台进程管理服务,便于模拟单点故障、查看日志观察主从切换。
生产条件下建议使用Supervisor管理服务,不仅易于管理而且能够实现服务异常终止后自动重启。高可用场景下使用的是三台物理机。
1、Redis实例
/usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis80.conf --port 6380 --save '' --daemonize no
/usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis81.conf --port 6381 --save '' --daemonize no
/usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis82.conf --port 6382 --save '' --daemonize no
2、哨兵服务
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel280.conf --port 26380 --daemonize no
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel281.conf --port 26381 --daemonize no
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel282.conf --port 26382 --daemonize no
三、客户端整合
客户端实现是指基于SpringBoot的整合分为两步实现:一是完成作为基础的整合;二是结合生产需要补充新特性。
(一)基础整合
基础整合的内容是以Java客户端连接高可用哨兵模式Redis服务,实现单节点故障服务正常运行的要求。
1、全局配置文件
全局配置文件添加的配置信息有:master参数为哨兵服务名,此处为默认值;nodes参数为哨兵服务列表(不是Redis实例服务列表);database参数为数据库。
spring:
redis:
database: 0
sentinel:
nodes: 192.168.181.171:26380,192.168.181.171:26381,192.168.181.171:26382
master: mymaster
2、集成配置
集成进SpringBoot体系,最核心的是创建LettuceConnectionFactory连接工厂,通过Redis连接工厂,能够顺利继承进Spring体系下其他框架。
@Configuration
public class RedisSentinelConfig {
@Autowired
private RedisProperties redisProperties;
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
HashSet<String> nodes = new HashSet<>(sentinel.getNodes());
String master = sentinel.getMaster();
RedisSentinelConfiguration config = new RedisSentinelConfiguration(master, nodes);
config.setDatabase(redisProperties.getDatabase());
return new LettuceConnectionFactory(config);
}
}
(二)读写分离
基础整合仅仅是实现了高可用Redis服务的流程,生产环境下仍需要增加其他配置:修改自定义连接数据库序号;授权连接;连接池配置;读写分离。
在高可用前提下,衍生出读写分离的特性,主库完成写请求;从库完成读请求(从库不允许写)。
@Bean
public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() {
// 配置读写分离
return builder -> builder.readFrom(ReadFrom.REPLICA);
}

Redis哨兵模式高可用解决方案的更多相关文章
- Redis哨兵模式高可用部署和配置
一.Redis 安装配置 1.下载redis安装包 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 2.解压安装包 tar -zxv ...
- Redis高可用解决方案:哨兵(Sentinel)
哨兵是Redis的高可用解决方案:由多个哨兵组成的系统监视主从服务器,可以将下线的主服务器属下的某个从服 务器升级为新的主服务器,继续保障运行. 启动并初始化Sentinel redis-sentin ...
- Redis哨兵模式
Redis-Sentinel redis的哨兵模式 Redis Sentinel 模式简介 Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案 ...
- Redis Sentinel主从高可用方案
Redis Sentinel主从高可用方案 本文介绍一种通过Jed和Sentinel实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上 ...
- Springboot2.x集成Redis哨兵模式
Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...
- Redis Sentinel实现高可用配置
一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...
- Mycat高可用解决方案一(mysql安装)
Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...
- mysql高可用解决方案
浅谈mysql主从复制的高可用解决方案 1.熟悉几个组件(部分摘自网络)1.1.drbd —— DRBD(Distributed Replicated Block Device),DRBD号称 ...
- [Redis] Redis哨兵模式部署 - zz胖的博客
1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...
随机推荐
- 「ARC096C」Everything on It
Solution 容斥,钦定 \(i\) 个数 \(\leq 1\) 次. \[Ans=\sum_{i=0}^n (-1)^i\binom{n}{i}F(i) \] 其中 \(F(i)\) 表示有 \ ...
- Proximal Algorithms 3 Interpretation
目录 Moreau-Yosida regularization 与次梯度的联系 改进的梯度路径 信赖域问题 Proximal Algorithms 这一节,作者总结了一些关于proximal的一些直观 ...
- JWT+SpringBoot实战
往期内容:JWT - 炒焖煎糖板栗 - 博客园 (cnblogs.com) JWT可以理解为一个加密的字符串,里面由三部分组成:头部(Header).负载(Payload).签名(signature) ...
- CS5211替代CH7511B|设计DP转LVDS转接板|替代CH7511B
CH7511B是一款DP转lvds屏转换芯片CH7511B是一款eDP转LVDS转换芯片.CH7511B将嵌入式DisplayPort信号转换为LVDS(低压差分信号).通过CH7511B的高级解码/ ...
- Java程序设计基础笔记 • 【第2章 变量与数据类型】
全部章节 >>>> 本章目录 2.1 变量 2.1.1 变量的概念 2.1.2 变量的使用 2.1.3 实践练习 2.2 数据类型 2.2.1 数据类型的种类 2.2.2 ...
- jboss CVE-2015-7501 反序列化漏洞复现
JBOSS反序列化漏洞 环境: vulfocus jboss CVE-2015-7501 云服务器 kali攻击机 基本原理:JBoss在/invoker/JMXInvokerServlet请求中读取 ...
- Hadoop用户配置免密登陆
Hadoop用户配置免密登陆, 参考其他免密配置方法自己总结的更简洁的步骤. 要实现A免密登陆B,需要把A生成的公钥放到B的对应目录下, 要实现ABC之间免密登陆,把3者的公钥汇总到一个文件中, 然后 ...
- django后台admin页面表单自定义
自定义一个form 表单来替换admin默认的表单 在自定义表单中可以定义字段和验证 https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/ad ...
- 日志收集系统系列(四)之LogAgent优化
实现功能 logagent根据etcd的配置创建多个tailtask logagent实现watch新配置 logagent实现新增收集任务 logagent删除新配置中没有的那个任务 logagen ...
- 谈谈Raft
本文主要参考 极客时间-etcd 实战课 GitChat-分布式锁的最佳实践之:基于 Etcd 的分布式锁 谈到分布式协调组件,我们第一个想到的应该是大名鼎鼎的Zookeeper,像我们常用的Kafk ...