一、序言

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哨兵模式高可用解决方案的更多相关文章

  1. Redis哨兵模式高可用部署和配置

    一.Redis 安装配置 1.下载redis安装包 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 2.解压安装包 tar -zxv ...

  2. Redis高可用解决方案:哨兵(Sentinel)

    哨兵是Redis的高可用解决方案:由多个哨兵组成的系统监视主从服务器,可以将下线的主服务器属下的某个从服 务器升级为新的主服务器,继续保障运行. 启动并初始化Sentinel redis-sentin ...

  3. Redis哨兵模式

    Redis-Sentinel redis的哨兵模式 Redis Sentinel 模式简介 Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案 ...

  4. Redis Sentinel主从高可用方案

    Redis Sentinel主从高可用方案 本文介绍一种通过Jed和Sentinel实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上 ...

  5. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

  6. Redis Sentinel实现高可用配置

    一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...

  7. Mycat高可用解决方案一(mysql安装)

    Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...

  8. mysql高可用解决方案

    浅谈mysql主从复制的高可用解决方案 1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称 ...

  9. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...

随机推荐

  1. 「算法笔记」旋转 Treap

    一.引入 随机数据中,BST 一次操作的期望复杂度为 \(\mathcal{O}(\log n)\). 然而,BST 很容易退化,例如在 BST 中一次插入一个有序序列,将会得到一条链,平均每次操作的 ...

  2. C++判断月份天数(判断闰年)

    题目描述 输入年份和月份,输出这一年的这一月有多少天.需要考虑闰年. 输入格式 无 输出格式 无 输入输出样例 输入 #1 输出 #1 1926 8 31 输入 #2 输出 #2 2000 2 29 ...

  3. Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples

    Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples 目录 概 主要内容 实验 ...

  4. [炼丹术]UNet图像分割模型相关总结

    UNet图像分割模型相关总结 1.制作图像分割数据集 1.1使用labelme进行标注 (注:labelme与labelImg类似,都属于对图像数据集进行标注的软件.但不同的是,labelme更关心对 ...

  5. MySQL基础操作指南

    启动停止MySQL服务 1.Windows服务窗口启动:开始 → 运行 → services.msc → 找到MySQL 56服务 2.MySQL命令启动:开始 → 运行 → 管理员权限运行cmd → ...

  6. 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面

    返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...

  7. django在创建用户时设置一个默认的密码

    1. 在settings.py文件中定义初始密码 2. 在signal.py文件中密码加密时导入settings中的配置 去查看数据库密码已加密 来自为知笔记(Wiz)

  8. Django_模型类详解(七)

    # 定义书籍模型类 class BookInfo(models.Model): btitle = models.CharField(max_length=20) # 书籍名称 bpub_date = ...

  9. webSocket 使用 HttpSession 的数据配置与写法

    1.前言 webSoket 无法获取 HttpSession  ,使用就更谈不上了 !!! 2解决过程 使用   configurator  注入即可 (1) 配置一个类 1 package cn.c ...

  10. 自动化集成:Pipeline整合Docker+K8S

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述流水线集成K8S用法. 一.背景描述 分布式服务的部署 ...