Redis 主从复制

介绍

主从复制可以在一定程度上扩展 redis 性能,redis 的主从复制和关系型数据库的主从复制类似,从机能够精确的复制主机上的内容。实现了主从复制之后,一方面能够实现数据的读写分离,降低 master 的压力,另一方面也能实现数据的备份。

怎么玩?

1.配置redis.conf文件

port 端口号
pidfile /var/run/redis_端口号.pid
logfile "端口号.log"
dbfilename dump端口号.rdb
appendfilename "appendonly端口号.aof"

2.从库配置对应主库:slaveof 主库IP 主库端口

也可以将slaveof 主库IP 主库端口配置进redis.conf文件中

举例

玩之前要准备环境,我这里是在一台Linux机器上以不同的端口启动redis以模拟不同的机器上的redis。

  • 复制三个对应的配置文件,为了区分文件名以端口号结尾。

  • 配置redis6379.conf文件,其他两个类比配置。

port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
appendfilename "appendonly6379.aof"
  • 打开三个终端分别启动redis
[root@dpf redis-5.0.7]# redis-server redis6379.conf
[root@dpf redis-5.0.7]# redis-server redis6380.conf
[root@dpf redis-5.0.7]# redis-server redis6381.conf

常用三种玩法

一主二仆

在这里插入图片描述
一主二仆即一台主机两台从机,结构如上图所示。

示例
  • 分别用启动了redis终端连接到redis客户端
[root@dpf redis-5.0.7]# redis-cli -p 6379
[root@dpf redis-5.0.7]# redis-cli -p 6380
[root@dpf redis-5.0.7]# redis-cli -p 6381
  • 从库配置主库(slaveof 主库IP 主库端口):在6380和6381对应终端执行如下命令
slaveof 127.0.0.1 6379

执行命令后6379便成了主机。在主机上添加对应数据,可以在两个从机上查询到(注意从机只可读不可写)。

  • 查询机器相关信息info replication
    查询主机信息
    在这里插入图片描述
    查询从机信息
    在这里插入图片描述

薪火相传

在这里插入图片描述
薪火相传即一台从机有对应主机也有对应从机。薪火相传的目的是为了减轻主机的读写压力。要实现薪火相传很简单,只需要将6381客户端对应的主机改为6380就可以了。

  • 执行这条命令:slaveof 127.0.0.1 6380
    查询6380相关信息
    在这里插入图片描述
    查询6379相关信息
    在这里插入图片描述

反客为主

反客为主即把从机变成主机,当主机挂了的时候,我们可能要把从机临时变成主机。

  • 执行命令: SLAVEOF no one
    使当前数据库停止与其他数据库的同步,转成主数据库。但是此时该变成主机的机器没有任何从机。

哨兵模式(sentinel)

哨兵模式是反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库(该主库拥有前主库的从库)。

使用步骤:

  • redis目录下新建sentinel.conf文件,名字绝不能错。
  • 配置哨兵,填写内容。
 sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1

上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机。

  • 启动哨兵
redis-sentinel sentinel.conf 

复制原理

Slave启动成功连接到master后会发送一个sync命令。
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

posted @ 2020-02-11 22:31  麦田的老哥  阅读(7)  评论(0)    收藏  举报