广告位联系
返回顶部
分享到

Redis哨兵模式高可用解决方案

Redis 来源:互联网 作者:秩名 发布时间:2022-03-01 15:10:55 人浏览
摘要

一、序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务。 1、目标与收获 一主两从三哨兵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初始化配置文件之后,显示指明节点间的主从关系,增加如下配置:

1

replicaof 127.0.0.1 6380

2、哨兵服务

节点的初始配置文件以默认配置文件为模版。

node01、node02、node03初始化配置文件后,增加如下配置:

1

sentinel monitor mymaster 127.0.0.1 6381 2

(三)服务管理

测试或者学习时,建议采用前台进程管理服务,便于模拟单点故障、查看日志观察主从切换。

生产条件下建议使用Supervisor管理服务,不仅易于管理而且能够实现服务异常终止后自动重启。高可用场景下使用的是三台物理机。

1、Redis实例

1

2

3

/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、哨兵服务

1

2

3

/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参数为数据库。

1

2

3

4

5

6

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体系下其他框架。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@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服务的流程,生产环境下仍需要增加其他配置:修改自定义连接数据库序号;授权连接;连接池配置;读写分离。

在高可用前提下,衍生出读写分离的特性,主库完成写请求;从库完成读请求(从库不允许写)。

1

2

3

4

5

@Bean

public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() {

    // 配置读写分离

    return builder -> builder.readFrom(ReadFrom.REPLICA);

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/javazhishitupu/p/15877771.html
相关文章
  • spring boot集成redis基础入门实例介绍
    redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储。 可以进行master-slave模式的数据备份 更多
  • redis批量操作pipeline管道操作方法

    redis批量操作pipeline管道操作方法
    redis | pipeline(管道) 背景 Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。这意味着通常情况下一个请求会遵循以下步骤: 客户
  • springboot整合使用云服务器上的Redis方法

    springboot整合使用云服务器上的Redis方法
    一、前提条件 修改redis.conf配置文件 1、protected-mode yes(默认的) 修改成 protected-mode no,解除保护模式 2、注释掉绑定ip ,绑定ip的话,使得
  • 阿里云服务器部署Redis并整合Spring Boot的介绍

    阿里云服务器部署Redis并整合Spring Boot的介绍
    一、什么是Redis redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zs
  • 生产redisson延时队列不消费问题排查解决

    生产redisson延时队列不消费问题排查解决
    问题描述 项目使用redisson延时队列功能,实现直播的开播提醒,突然有一天业务爆出问题,未触发开播提醒。 初步排查 首先通过查询生产日
  • Redis主从复制分步讲解使用

    Redis主从复制分步讲解使用
    主服务器(master)启用二进制日志 选择一个唯一的server-id 创建具有复制权限的用户 从服务器(slave)启用中继日志, 选择一个唯一的serv
  • Redis中HyperLogLog的使用介绍
    HyperLogLog,基数统计; 那什么是基数? 比如有两个数组 数组A = [1,2,3,4,5]; 数组B = [3,4,5,6,7]; 这时候基数就是[1,2,3,4,5,6,7],总共有7个数; 就是
  • Redis中的持久化介绍

    Redis中的持久化介绍
    1. 前言 为什么要进行持久化?:持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据
  • Redis源码设计剖析之事件处理示例介绍

    Redis源码设计剖析之事件处理示例介绍
    1. Redis事件介绍 Redis服务器是一个 事件驱动程序 ,所谓事件驱动就是输入一条命令并且按下回车,然后消息被组装成 Redis 协议的格式发送给
  • Mysql应用安装后找不到my.ini文件的解决过程

    Mysql应用安装后找不到my.ini文件的解决过程
    一、背景 我在两台电脑上安装了MySQL Server 8.0,准备继续做主从配置,这时候就需要用到my.ini文件进行配置,但是我找不到my.ini文件。 我的
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计