Redis主从复制(八)
前言:之前写到在系统中集成Redis之后,可以减少对数据库的访问量,从而增加系统的并发量,但是单个Redis的性能终究是有限的,在系统业务量不断增大的时候,单节点的Redis的并发量很容易就达到上限,这种时候就需要引入Redis的主从复制模式(读写分离模式,一般搭配哨兵机制一起使用)。
一、主从复制模式
在单节点Redis的基础上,再扩展Redis节点,选择其中一台作为主节点,其余的Redis节点就是从节点,主节点主要负责数据的写入,从节点负责读数据请求,主节点会复制自身的数据到从节点。
主从复制原理:
首先进行全量更新
- slave服务器向master发送psync命令,告诉master我需要同步数据了。
- master接收到psync命令后会进行BGSAVE命令生成RDB文件快照,同时将此刻起的写命令记录在缓存区。
- master生RDB成完后,会将RDB文件发送给slave。
- slave接收到RDB文件后会载入内存,并且将数据库状态变更为master在执行BGSAVE时的状态一致。
- master会发送保存在缓冲区里的所有写命令
- slave执行这些写命令。
运行过程中进行增量更新
在master全量数据同步到slave之后,如果再有写命令进到master,在master执行完该写命令之后,会把这条写命令发送给所有slave节点,增量更新可以把master看作是redis的客户端,slave看作是redis的服务端:
例如:用户先向master发送一条写命令:set name shanxi,master在执行完这条命令之后,会向所有slave发送这条写命令,slave接收到之后,会在本地执行set name shanxi。
主从模式:一主一从、一主二从(常用)、树状模式(当有多个从节点时,这种模式会降低主节点的同步压力)
一般不推荐一个主节点对应多个从节点,一来会占用内网的带宽,二来主节点的同步压力也会很大。
二、主从复制模式配置
首先删除从节点的rdb和aof文件,以防出现影响。
在配置主从复制的时候,只需要配置从节点即可,不需要对主节点进行配置。
修改redis的配置文件:
################################# REPLICATION #################################
# 配置所属主节点的地址与端口
slaveof 192.168.40.41 6379
# 配置所属主节点的认证密码
masterauth 123456
# 配置从节点为只读模式,默认配置,不需要进行修改
slave-read-only yes
注意:使用主从复制模式后,master必须开启持久化,否则master宕机重启以后会把从节点的数据清空
三、查看与测试
1、主从配置好之后,重启redis,然后进入到redis的客户端(redis-cli命令进入),在客户端输入info replication命令可以看到主从相关信息,在主节点输入该命令可以看到如下信息:
从节点输入info replication命令会看到如下信息:
2、测试
- 在主节点执行一些写命令,然后在从节点使用get命令看是否能获取到主节点写入的值。
主节点执行:set name 10087
从节点执行:get name(从节点可以获取到10087)
- 在从节点执行写命令,会报不允许写入错误
- 停掉一台从节点,然后在主节点执行一些写的命令,然后再次启动这台停掉的从节点,会发现在停机(或宕机)期间主节点写入的数据都被同步了进来