Redis主从复制、哨兵模式、集群模式的搭建与springboot集成

这篇具有很好参考价值的文章主要介绍了Redis主从复制、哨兵模式、集群模式的搭建与springboot集成。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

Redis有三种模式:分别是主从同步/复制、哨兵模式、Cluster

主从复制:主从复制是高可用Redis的基础,哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单故障恢复。

缺陷:故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制。

哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。

缺陷:写操作无法负载均衡,存储能力受到单机的限制,哨兵无法对从节点进行自动故障转移;在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

redis安装这里不在赘述,有需要的同学参考之前的文章【Centos7下安装与配置 Redis】

一、Redis主从复制(读写分离)

环境准备

HOSTNAME IP
redis(主) 192.168.92.100
redis(备) 192.168.92.101
redis(备) 192.168.92.102

1.主从复制概述

  主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

  默认情况下,每台 Redis 服务器都是主节点;且一个主节点可以有多个从节点 (或没有从节点),但一个从节点只能有一个主节点。

2.主从复制

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即写 Redis 数据时应用连接主节点,读 Redis 数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

3.Redis主从复制流程

  若启动一个Slave机器进程,则它会向Master机器发送一个“sync command" 命令,请求同步连接。

  无论是第一次连接还是重新连接,Master机器 都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作) ,同时 Master 还会记录修改数据的所有命令并缓存在数据文件中。

  后台进程完成缓存操作之后,Master 机器就会向 Slave 机器发送数据文件,Slave 端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着 Master 机器就会将修改数据的所有操作一并发送给 Slave 端机器。若 Slave 出现故障导致宕机,则恢复正常后会自动重新连接。

  Master机器收到 Slave 端机器的连接后,将其完整的数据文件发送给 Slave 端机器,如果 Mater 同时收到多个 Slave 发来的同步请求,则 Master 会在后台启动一个进程以保存数据文件,然后将其发送给所有的 Slave 端机器,确保所有的 Slave 端机器都正常。

4.搭建Redis主从复制

1. 三台虚拟机都进入Redis服务器
springboot redis哨兵连接配置,spring boot,redis,java

  • info replication 查看主从复制信息

role:master #当前机器的角色主还是从
connected)salaces:0 #代表从节点目前为0

springboot redis哨兵连接配置,spring boot,redis,java
2. 进入我们的从节点(101/102)修改配置
PS: 这是对从节点的配置, Master主节点中只需要开启以下配置中的主从配置的密码, masterauth XXX, 为后面哨兵搭建提前准备.

  1. 搜索Rep找到replicaof
    . springboot redis哨兵连接配置,spring boot,redis,java

  2. 修改replocaofimasterauth

    springboot redis哨兵连接配置,spring boot,redis,java

  3. 从节点replica-read-only读操作改为yes.从而实现读写分离

    springboot redis哨兵连接配置,spring boot,redis,java

  4. 保存退出, 删除从节点机器上的备份文件,同上步骤配置我们的第二台从节点102

springboot redis哨兵连接配置,spring boot,redis,java

  1. 重新启动redis服务,同上步骤配置我们的第二台从节点102

springboot redis哨兵连接配置,spring boot,redis,java

  1. 查看101从节点的info replication
    springboot redis哨兵连接配置,spring boot,redis,java

  2. 查看100主节点的info replication
    springboot redis哨兵连接配置,spring boot,redis,java
    PS: 当主节点宕机后, 从节点不会变成主节点

二、Redis哨兵模式 (Sentinel)

  主从复制存在的问题:主节点挂了,如何保证可用性,实现继续读写?

  在Redis主从复制中, 由于我们的Redis Master节点宕机之后, 从节点Slave无法自动的变为主节点, 从而无法为用户提供写的请求, 只能进行读. 为了解决这个问题, 我们引入了Redis 哨兵机制.
  通过哨兵哨兵机制, 哨兵会监控所有节点, 当主节点宕机之后, 哨兵就会让其中的一个从节点来代替主节点, 接手它的写操作, 从而成为一个新的主从模式.
springboot redis哨兵连接配置,spring boot,redis,java

环境准备

HOSTNAME IP
redis(主) 192.168.92.100
redis(备) 192.168.92.101
redis(备) 192.168.92.102

1.配置Redis 哨兵机制

1.进入 Redis 安装目录
cd /usr/local/redis/redis-5.0.0
sentinel.conf 就是我们哨兵机制的核心配置文件.
springboot redis哨兵连接配置,spring boot,redis,java
2.将sentinel核心配置文件拷贝到我们的/usr/local/redis
cp sentinel.conf /usr/local/redis
springboot redis哨兵连接配置,spring boot,redis,java
3.编辑我们的哨兵核心配置文件
vim sentinel.conf
springboot redis哨兵连接配置,spring boot,redis,java
springboot redis哨兵连接配置,spring boot,redis,javaspringboot redis哨兵连接配置,spring boot,redis,java

具体配置信息如下:

  • 直接复制修改参数即可
# Base
#开启,方便其他节点器访问
protected-mode no  
#哨兵默认端口号
port 26379
#后台启动模式
daemonize yes
#哨兵机制默认进程号
pidfile /var/run/redis-sentinel.pid
#设置哨兵模式的日志文件路劲
logfile /usr/local/redis/sentinel/redis-sentinel.log
#哨兵模式的工作目录
dir /usr/local/redis/sentinel

# core  核心配置
# my-master:自定义名称           192.168.92.100 6379:主节点ip+端口    2:哨兵数量
sentinel monitor my-master 192.168.92.100 6379 2
#设置主节点密码
sentinel auth-pass my-master 123456
#被哨兵任务失效的毫秒时间段,默认为30秒,单位毫秒
sentinel down-after-milliseconds my-master 30000
#当从节点后变为主节点后,进行配置其他的,多少个从节点进行并行复制     1:一次接一个复制     2:一次复制2个
sentinel parallel-syncs my-master 1
#主备的切换时间,哨兵进行故障转移如果超时,则会交给哨兵集群的另一个节点处理进行故障转移
sentinel failover-timeout my-master 180000

2. 由于是哨兵集群, 所以3台redis节点的哨兵配置文件一模一样.

可以直接拷贝一份, 也可使用如下方式远程拷贝

PS: 将配置文件进行远程传输
scp sentinel.conf root@192.168.92.101:/usr/local/redis
scp sentinel.conf root@192.168.92.102:/usr/local/redis
springboot redis哨兵连接配置,spring boot,redis,java

3. 启动哨兵

启动命令:redis-sentinel sentinel.conf
其中sentinel.conf是哨兵核心配置文件路径
springboot redis哨兵连接配置,spring boot,redis,java

PS: 没有文件夹及文件, 因为我们是事先定义好的目录, 我们去创建即可, 然后再次启动
mkdir /usr/local/redis/sentinel -p
springboot redis哨兵连接配置,spring boot,redis,java
ps -ef|grep redis 查看redis进程
springboot redis哨兵连接配置,spring boot,redis,java
tail -f redis-sentinel.log 动态查看哨兵日志文件末尾
springboot redis哨兵连接配置,spring boot,redis,java
当出现这个说明配置成功了,,,
随后从节点服务器也都需要启动哨兵配置文件

4. 测试哨兵机制

  1. 开启所有的主从复制架构节点,当前100为主节点
    springboot redis哨兵连接配置,spring boot,redis,java
  2. 关闭主节点,查看日志
    springboot redis哨兵连接配置,spring boot,redis,java
    springboot redis哨兵连接配置,spring boot,redis,java
    可以看到101已经变味master,宕机的100节点也已经被剔除
    springboot redis哨兵连接配置,spring boot,redis,java
    3.启动原来的100 master节点
    springboot redis哨兵连接配置,spring boot,redis,java
    查看日志,100变成存活状态后,并不会恢复之前的master节点
    springboot redis哨兵连接配置,spring boot,redis,java
    springboot redis哨兵连接配置,spring boot,redis,java

5.解决原Master恢复后不同步问题

  相信细心的同学会发现原来的Master(100)恢复成Slave)后,他的同步状态不OK,状态为master_link_status:dowm,这是为什么呢?
修改redis.conf中的masterauth为自己密码即可,我的是123456。
springboot redis哨兵连接配置,spring boot,redis,java

一般master数据无法同步给slave的方案检查为如下:

  1. 网络通信问题,要保证互相ping通,内网互通。
  2. 关闭防火墙,对应的端口开发(虚拟机中建议永久关闭防火墙,云服务器的话需要保证内网互通)。
  3. 统一所有的密码,不要漏了某个节点没有设置。

6.SpringBoot集成 Redis哨兵

1.配置信息

springboot redis哨兵连接配置,spring boot,redis,java

server:
  port: 8088

spring:
  datasource:  # 数据源的相关配置
    url: jdbc:mysql://127.0.0.1:3306/smart?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    password: 123456
  redis:
    # Redis 单机单实例
 #   database: 0
 #   host: 192.168.92.100
 #   port: 6379
 #   password: 123456
    # Redis 哨兵模式
    database: 1
    password: 123456
    sentinel:
      master: my-master
      nodes: 192.168.92.100:26379,192.168.92.101:26379,192.168.92.102:26379

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.测试结果:

springboot redis哨兵连接配置,spring boot,redis,java

三、Redis 集群模式 (Redis-Cluster)

  前面我们一起学习了主从复制以及哨兵,他们可以提高读的并发,但是单个master容量有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave成为集群。
  那么这一节开始我们就一起来学习redis-cluster:他可以支撑多个master-.slave,支持海量数据,实现高可用与高并发。
  哨兵模式其实也是一种集群,他能够提高读请求的并发,但是容错方面可能会有一些问题,比如masterf同步数据给slave的时候,这其实是异步复制吧,这个时候masterf挂了,那么slave.上的数据就没有master新,数据同步需要时i间的,1-2秒的数据会丢失。master恢复并转换成slavel后,新数据则丢失。

特点

  1. 每个节点知道彼此之间的关系,也会知道自己的角色,当然他们也会知道自己存在与一个集群环境中,他们彼此之间可以交互和通信,比如ping pong。那么这些关系都会保存到某个配置文件中,每个节点都有,这个我们在搭建的时候会做配置的。
  2. 客户端要和集群建立连接的话,只需要和其中一个建立关系就行。
  3. 某个节点挂了,也是通过超过半数的节点来进行的检测,客观下线后主从切换,和我们之前在哨兵模式中提到的是一个道理。
  4. Redis中存在很多的插槽,又可以称之为槽节点,用于存储数据,这个先不管,后面再说。

集群容错
  构建Redis集群,需要至少3个节点作为master,以此组成一个高可用的集群,此外每个masteri都需要配备一个slave,所以整个集群需要6个节点,这也是最经典的Redis集群,也可以称之为三主三从,容错性更佳。所以在搭建的时候需要有6台虚拟机。请各自准备6台虚拟机,可以通过克隆去构建,使用单实例的Redis去克隆即可。

  • 集群也可以在单服务器构建,称之为伪集群,但是生产环境肯定是真的,所以建议用6台。
  • 克隆后务必关闭Redis。

springboot redis哨兵连接配置,spring boot,redis,java

环境准备

这里最好找一个没有配置过的redis,进行重头配置,不要复用前两节的配置文件
Vmware配置完一台后可以进行系统克隆

HOSTNAME IP
103 redis 192.168.92.103
104 redis 192.168.92.104
105 redis 192.168.92.105
106 redis 192.168.92.106
107 redis 192.168.92.107
108 redis 192.168.92.108

springboot redis哨兵连接配置,spring boot,redis,java

1. 操作我们第一台Cluster服务器 103

  1. 进入redis.conf目录下, 编辑该文件
cd /usr/local/redis/
vim redis.conf 
  1. 修改配置如下:
    springboot redis哨兵连接配置,spring boot,redis,java
    springboot redis哨兵连接配置,spring boot,redis,java
#开启集群模式
cluster-enabled yes
#每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由ris自己维护,我们不要处理
cluster-config-file nodes-6379.conf
#超时时间,超时则认为master?宕机,随后主备切换
cluster-node-timeout 15000
#开启AOF
appendonly yes
  1. 保存配置文件,重新启动redis,查看服务出现cluster说明配置成功
    /etc/init.d/redis_init_script start
    springboot redis哨兵连接配置,spring boot,redis,java

2.启动6个redis实例

  1. 启动其他5台台,按上述步骤依次进行
  2. 如果启动过程出错,把rdb等文件删除清空
    cd working/
    rm dump.rdb
  • 这里可以使用xhell多窗口同时操作
    springboot redis哨兵连接配置,spring boot,redis,java

3. 创建集群

(旧版本redis需要使用redis安装目录下的redis-trib.rb 脚本进行搭建)

1.操作我们的103(主)节点

#####
#集群命令说明
redis-cli --cluster help
#注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意
#注意2:以下为新版的redis构建方式
#####
#创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4,2和5,3和6分别对应为主从关系,这也是最经典用的最多的集群模式
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1


##我的集群供参考---------------------------------------------------------------------------------------
#-a 为当前redis服务密码
redis-cli -a 123456 --cluster create 192.168.92.103:6379 192.168.92.104:6379 192.168.92.105:6379 192.168.92.106:6379 192.168.92.107:6379 192.168.92.108:6379 --cluster-replicas 1

##查看集群信息,任意一个节点都行 a 为当前redis服务密码
redis-cli -a 123456 --cluster 192.168.19.108:6379

springboot redis哨兵连接配置,spring boot,redis,java
当出现绿色区域部分,说明我们的三主三从搭建完成了。

Sots:槽,用于装数据,主节点有,从节点没有

2.查看集群信息

任意节点执行:
redis-cli -a 123456 --cluster 192.168.19.108:6379
springboot redis哨兵连接配置,spring boot,redis,java

4.slot槽节点 (遵循一致性hash原则)

slot 槽节点是存在于Redis集群的master节点中的, 而在slave从节点中是没有槽节点的.

  1. slot 槽节点是平均分配在master节点上的
    springboot redis哨兵连接配置,spring boot,redis,java
  2. slot 槽节点是用来保存数据的
    springboot redis哨兵连接配置,spring boot,redis,java

查看集群信息
在任意一台集群服务器节点上都可以查看.
redis-cli -c -a xxxx密码 -h 192.168.92.142 -p 6379
cluster info 查看集群配置信息
cluster nodes 查看节点信息
springboot redis哨兵连接配置,spring boot,redis,java
测试
springboot redis哨兵连接配置,spring boot,redis,java

5.springboot集成redis集群

1.配置信息

springboot redis哨兵连接配置,spring boot,redis,java

server:
  port: 8088

spring:
  datasource:                                           # 数据源的相关配置
    url: jdbc:mysql://127.0.0.1:3306/smart?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    password: 123456
  redis:
    # Redis 单机单实例
    #database: 0
    #host: 192.168.92.100
    #port: 6379
    #password: 123456

    # Redis 哨兵模式
    #database: 1
    #password: 123456
    #sentinel:
    #  master: my-master
    #  nodes: 192.168.92.100:26379,192.168.92.101:26379,192.168.92.102:26379

    # Redis 集群模式
    password: 123456
    cluster:
      nodes: 192.168.92.103:6379,192.168.92.104:6379,192.168.92.105:6379,192.168.92.106:6379,192.168.92.107:6379,192.168.92.108:6379

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.测试结果

springboot redis哨兵连接配置,spring boot,redis,java
springboot redis哨兵连接配置,spring boot,redis,java
可以看到bbb没有在104节点,数据存储在了103节点当中文章来源地址https://www.toymoban.com/news/detail-788289.html

到了这里,关于Redis主从复制、哨兵模式、集群模式的搭建与springboot集成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis——主从复制+集群搭建(非哨兵)

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower); 数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。 默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个

    2024年02月12日
    浏览(24)
  • Redis(主从复制、哨兵模式、集群)概述及部署

    目录 一、Redis高可用 二、redis持久化 2.1 持久化的功能 2.2 Redis 提供两种方式进行持久化 2.3 RDB 持久化 2.3.1 触发条件  2.3.2 执行流程 2.3.3 启动时加载 2.4 AOF持久化 2.5 执行流程 2.5.1 命令追加(append)  2.5.2 文件写入(write)和文件同步(sync) 2.5.3 文件重写(rewrite) 2.5.3.1 文件重写的

    2024年02月15日
    浏览(26)
  • Redis 的主从复制、哨兵模式、集群脑裂

    主从复制 主从复制是 Redis 高可用服务最基础的保证,将一台 Redis 主服务器,同步数据到多台 Redis 从服务器上,即一主多从的模式,且主从服务器之间采用的是「读写分离」的方式。 主服务器可以进行读写操作,当发生写操作时,自动将写操作同步给从服务器,而从服务器

    2024年02月10日
    浏览(25)
  • 【Redis】三种集群模式(主从复制、哨兵模式、Cluster)

    redis有三种集群模式,其中主从是最常见的模式。Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。cluster 模式是redis官方提供的集群模

    2024年01月21日
    浏览(52)
  • redis高可用——主从复制、哨兵模式、cluster集群

    目录 1、redis群集有三种模式 2、主从复制 2.1、概述: 2.2、Redis主从复制有以下几个重要作用: 2.3、主从复制流程: 2.4、redis主从复制实验 3、哨兵模式. 3.1、概述: 3.2、 哨兵的核心功能: 3.3、哨兵模式原理: 3.6、 哨兵模式的作用; 3.7、故障转移机制 3.8、主节点的选举: 3.9、主

    2024年02月09日
    浏览(28)
  • Redis高可用(主从复制、哨兵模式和Cluster集群)

    目录 一、Redis高可用 1.持久化 2.主从复制 3.哨兵 4.Cluster集群 二、主从复制 1.概念 2.作用 3.主从复制流程 4.配置主从复制 三、哨兵模式 1.功能 2.作用 3.组成 4.故障转移机制 5.主节点选举依据 6.配置哨兵模式 7.故障模拟 8.恢复故障节点 四、Cluster群集 1.简介 2.作用 (1)数据分区

    2024年02月15日
    浏览(29)
  • 搭建redis主从,哨兵配置,集成到springboot中配置读写分离

    文章介绍Ubuntu系统搭建redis,并完成主从的读写分离配置,为主节点搭建三台哨兵服务,并集成到springboot中。 本篇文章是通过其他优秀博文学习后,用作学习记录使用。 大佬博客: https://blog.csdn.net/Wei_Naijia/article/details/125704197 https://blog.csdn.net/lssqk/article/details/127220990 1.Ubunt

    2024年02月09日
    浏览(32)
  • 从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

    第三阶段基础 时  间:2023年6月15日 参加人:全班人员 内  容: Redis高可用集群 目录 一、redis主从复制原理介绍 主从复制特点: 主从复制实现原理: 二、主从复制实现操作(多机实例实现)   前提配置: 主库操作: 从库一操作: 从库二操作: 主库变化: 验  证: 三、

    2024年02月09日
    浏览(40)
  • Redis 主从复制 哨兵 集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包