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,一次完全同步(全量复制)将被自动执行。
浙公网安备 33010602011771号