Redis主从复制(详解)

文章目录

  • 一、初识主从复制
      • 1、概念
      • 2、作用
      • 3、为什么使用集群
  • 二、环境配置
  • 三、启动集群
  • 四、一主二从配置
  • 五、使用规则

一、初识主从复制

1、概念

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

默认情况下,每台Redis服务器都是主节点,一个主节点可以有0个或者多个从节点,但每个从节点只能由一个主节点

2、作用

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
  • 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
  • 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
  • 高可用基石:主从复制还是哨兵和集群能够实施的基础。

3、为什么使用集群

  1. 单台服务器难以负载大量的请求
  2. 单台服务器故障率高,系统崩坏概率大
  3. 单台服务器内存容量有限。

二、环境配置

这里使用了单机多服务集群!

既然需要启动多个服务,就需要多个配置文件。每个配置文件对应修改以下信息:

  • 复制多个配置文件
# 作为主机配置文件
cp  redis.conf  redis79.conf
# 作为从机1配置文件
cp  redis.conf  redis80.conf 
# 作为从机2配置文件
cp  redis.conf  redis81.conf
  • 端口号
# 主
port 6379

# 从1
port 6380

# 从2
port 6381
  • 开启守护进程
# 开启守护进程
daemonize yes
  • pid文件名
# 主
pidfile /var/run/redis_6379.pid
# 从1
pidfile /var/run/redis_6380.pid
# 从2
pidfile /var/run/redis_6381.pid
  • 日志文件名
# 主
logfile "6379.log"
# 从1
logfile "6380.log"
# 从2
logfile "6381.log"
  • rdb文件名
# 主
dbfilename dump6379.rdb
# 从1
dbfilename dump6380.rdb
# 从2
dbfilename dump6381.rdb

三、启动集群

Redis主从复制(详解)_第1张图片
Redis主从复制(详解)_第2张图片

四、一主二从配置

==默认情况下,每台Redis服务器都是主节点;==我们一般情况下只用配置从机就好了!

认老大!一主(79)二从(80,81)

从机配置

# 两个从机都是这么一个命令 (认老大)
# SLAVEOF host port 
slaveof 127.0.0.1 6379
# 主从复制
info replication

Redis主从复制(详解)_第3张图片

记录一下操作中遇到的异常:

问题详述:
之前在主机配置文件中配置了密码requirepass,后来把密码注销了后发现还是要输入密码,这时两个从机虽然显示认了这个主机为老大,但是在主机中却没有这两个从机的信息。

异常原因:redis中有个存放临时文件的区域,由于你设置了密码,则需要把这个密码取消掉!

解决问题

# 查看密码
config get requirepass
# 取消密码
config set requirepass ""

五、使用规则

  • 从机只能读不能写,主机可读可写,但是多用于写。

  • 当主机断电宕机后,默认情况下从机的角色不会发生变化 ,集群中只是失去了写操作,当主机恢复以后,又会连接上从机恢复原状。

  • 当从机断电宕机后,若不是使用配置文件配置的从机,再次启动后作为主机是无法获取之前主机的数据的,若此时重新配置称为从机,又可以获取到主机的所有数据。这里就要提到一个同步原理。

  • 第二条中提到,默认情况下,主机故障后,不会出现新的主机,有两种方式可以产生新的主机:

    • 从机手动执行命令slaveof no one,这样执行以后从机会独立出来成为一个主机
    • 使用哨兵模式(自动选举)

如果没有老大了,这个时候能不能选择出来一个老大呢?手动!

如果主机断开了连接,我们可以使用SLAVEOF no one让自己变成主机!其他的节点就可以手动连接到最新的主节点(手动)!如果这个时候老大修复了,那么就重新连接!

你可能感兴趣的:(Redis,redis,数据库,服务器)