Redis 主从复制

Redis 主从复制

文章目录

  • [Redis 主从复制](#Redis 主从复制)
    • [1. 概念](#1. 概念)
    • [2. 使用方式](#2. 使用方式)
      • [2.1 环境配置](#2.1 环境配置)
      • [2.2 启动服务](#2.2 启动服务)
      • [2.3 建立连接](#2.3 建立连接)
      • [2.5 特性 & 问题](#2.5 特性 & 问题)
    • [3. 哨兵模式](#3. 哨兵模式)
      • [3.1 概念](#3.1 概念)
      • [3.2 使用方式](#3.2 使用方式)

1. 概念

主从复制是指将一台Redis服务器上的数据复制到其它的Redis服务器上。分为主节点 (master)和从节点 (slave),也称一主多从

主从复制具有以下特点

  • 数据的复制是单向的,只能从主节点到从节点
  • 主节点(master)以写为主,从节点(slave)以读为主
  • 默认情况下,每一台Redis服务器都是主节点,且一个主节点可以有多个从节点,但一个从节点只能有一个主节点

主从复制的作用主要包括:

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复
  3. 负载均衡:在主从复制的基础上,配合读写分离,实现由主节点提供写服务,从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),从而分担服务器负载,提供Redis服务器的并发量
  4. 高可用基石:主从复制也是哨兵模式和集群能够实施的基础

在很多时候,我们对于服务器的使用更多是用于读取数据,其次是写入数据,对此使用主从复制可以很大程度上减轻我们服务器的压力!

2. 使用方式

2.1 环境配置

这里我们先开启多个会话来进行模拟,实现一个主节点,两个从节点(第四个用于测试)

之后找到redis.conf文件,并对其进行复制

这里我将redis.conf复制了三份,分别对应后面各自的端口号:

redis79.conf 对应6379端口,主节点

redis80.conf 对应6380端口,从节点

redis81.conf 对应6381端口,从节点

之后对这三个配置文件进行修改,需要修改以下内容:

  • 端口
  • pid名字
  • log文件名字
  • dump.rdb名字

这里以redis80.conf为例:

vim redis80.conf

端口号改为对应端口:

进程文件改为对应端口结尾:

日志文件改为对应端口结尾:

rdb文件改为对应端口结尾:

另外两个文件以同样的方式进行修改!

注:如果自己的redis账号设置有密码的话,也需要在从节点的配置文件里加上密码:找到masterauth并修改

2.2 启动服务

环境配置好后我们就可以来启动redis服务进行测试:

启动成功后,可以通过 info replication 命令查看当前redis节点的状态:

可以看到,最开始三台redis服务器都是主节点(master)!!

2.3 建立连接

启动好服务器后,我们选择准备充当从节点的服务器,这里我们让80端口和81端口充当从节点,79端口作为主节点,并通过命令建立连接:

slaveof host port

建立连接后通过info replication命令查询可以看到,这两个服务器已经成功连接上主节点6379,同时查看主节点,可以发现主节点下也多了两个从节点:

完成上述步骤后就可以进行使用测试了!

在主节点这边写入值

通过从节点读取值

可以看到,从节点能够成功获取到主节点写入的值,但需要注意,从节点无法写入值:

同时通过命令 slaveof no one 可以解除主从复制的连接,重新成为主节点!!

2.5 特性 & 问题

通过上述方式建立的主从复制有以下两个特性:

  • 如果这个时候主节点宕机了,从节点依旧能够获取到主节点中的值,只是没有写操作,如果这个时候主机回来了,从机依旧可以直接获取到主机写入的信息
  • 如果使用命令行进行主从复制的配置,只要当前服务器重启了,主机本身就会立马变为主节点;同时只要成为从机,就能立刻从主节点中获取值

对于上述主从复制的操作,我们是通过命令的方式来进行连接和创建的,这样有一个弊端,那就是一但我们的主机宕机了,之前该建立起来的主从连接就会消失,还需要我们重新配置从机。

有一种方式就是手动来进行配置,实现永久的主从配置,即配置从节点的conf文件,修改以下内容即可将该主机默认设置为从机

还有另一种方式能够实现主从机的高效切换,也是更推荐的方式,那便是哨兵模式!!

3. 哨兵模式

3.1 概念

哨兵模式:当主服务器宕机时,哨兵会通过投票算法将从节点转化为主节点,实现主从节点的自动切换

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例:

当哨兵检测到主服务器宕机时,会自动(投票之后)将从服务器slave切换成master,然后通过发布订阅模式通知其它的从服务器,修改配置文件,让它们切换连接新的主服务器

同时我们也可以引入多个哨兵来对Redis服务器进行监控,哨兵和哨兵之间也可以互相监控,从而形成多哨兵模式

当引入多个哨兵时,主服务器发生宕机后需要等到多个哨兵共同认为主服务器不可用且数量达到一定值时,哨兵之间会进行一次投票,投票结果由一个哨兵发起,进行failover(故障转移)操作,即将一个从服务器本身切换成主服务器,切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机!

3.2 使用方式

  1. 先对哨兵配置文件 sentinel.conf 进行配置(有些reids文件解压后自带该文件内容,则无需修改)

    vim sentinel.conf

    需要配置下面内容:

    sentinel monitor master-name host port 1

    其中:

    • master-name:可自行定义
    • host:主机号,一般为127.0.0.1
    • port:端口号,一般为6379
    • 数字:1表示只要有1个哨兵认为主机存在问题时就进行故障转移操作,2则表示2个哨兵,可自行定义

    注:如果服务器redis设置有密码则需要将下面的注释消掉并修改为自己的密码

  2. 启动哨兵

    通过下述命令来启动哨兵:

    redis-sentinel sentinel.conf

    启动哨兵成功!!

    如果这个时候主服务器(6379)发生宕机,则哨兵会在从服务器中选择服务器作为新的主服务器!

    同时挂掉的主服务器如果重新登录也只能成为新主服务器的从服务器:

    通过命令也能查看到主从服务器之间发生了转换:


以上便是Redis中主从复制和哨兵模式的介绍与使用了!!

相关推荐
码农郁郁久居人下4 小时前
Redis的配置与优化
数据库·redis·缓存
Hsu_kk5 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK5 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
SAO&asuna16 小时前
redis基本数据结构-sorted set
数据结构·数据库·redis
一大颗萝卜16 小时前
【原创 架构设计】多级缓存的应用、常见问题与解决方式
redis·缓存·架构·caffeine·多级缓存
andrew_121917 小时前
腾讯 IEG 游戏前沿技术 一面复盘
java·redis·sql·面试
Java码农杂谈19 小时前
浅谈Tair缓存的三种存储引擎MDB、LDB、RDB
java·redis·分布式·后端·阿里云·缓存
DYS_000011 天前
阿里短信服务+Redis创建定时缓存
数据库·redis·缓存
问道飞鱼1 天前
分布式中间件-redis相关概念介绍
redis·分布式·中间件
酷帅且洋仔2 天前
Redis——常用数据类型hash
数据库·redis