目录
一、简介
- 概念:主从复制,即master-slave模式,指的是主机数据发生变化的时候根据配置的策略,自动将数据同步到从机上,master主机以写操作为主,slave从机以读操作为主。
- 主从复制作用:
- 可以实现读写分离,master写,slave读;
- 可以有效降低master的压力,可以将读操作分发到多个slave从节点上;
- 可以实现数据的备份;
- 配置方式:
- 从库配置:slaveof + 主库IP + 主库redis服务端口;
- 注意:每次与主节点master断开之后,都需要重新连接,除非你配置进redis.conf文件;
- 查看主从关系:
info replication
二、主从复制配置
下面将详细介绍redis主从复制的配置过程,这里以一主两从为例:
【a】首先准备三个redis服务:端口分别为6379、6380、6381
192.168.8.130:6379
192.168.8.130:6380
192.168.8.130:6381
【b】修改对应的配置文件redis.conf
首先需要将6379端口对应的redis.conf拷贝多三份: redis6379.conf、redis6380.conf和redis6381.conf。
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
【c】分别修改每个配置文件
以redis6379.conf为例,其他两份配置文件也一样跟着修改成对应的名字即可。
vim redis6379.conf
(1) 修改rdb持久化文件名称:
(2) 修改日志文件名称:
(3) 修改对应的端口,当然其他两个配置文件要分别修改为6380和6381:
(4) 修改进程管道文件名称:
(5)修改aof持久化文件名称
以此类推,6380和6381也对应着修改一下。
【d】分别启动三个redis服务,并进入客户端
然后使用下面的命令查看三台redis服务的状态
info replication
可见,目前三台redis都是master主节点角色。
【e】配置主从关系
分别在6380和6381两个redis服务中执行下面命令:
SLAVEOF 127.0.0.1 6379
指定master服务为6379的那一个服务,然后使用info replication查看主从信息,如下图:
可见,6379为主节点,其下面有两个从节点6380和6381。
【f】接着我们测试一下,在master主节点上进行写操作,看下两台从节点能否获得数据:
可见,从节点成功同步数据过来。
下面我们尝试在从节点进行写操作:
我们可以发现,从节点slave不能进行写操作,它是只读的。如果硬是要写,可以修改配置文件redis.conf文件中的的值。
【g】下面我们模拟主节点master发生宕机现象,观察主从关系是否还存在。
可见,两个从节点并没有接替主节点master的任务,还是继续在原地待命,角色都还是slave从节点,并且数据还是存在的,并不会丢失。
那么,假如主节点突然又好了,继续观察主从关系是否会恢复正常。
可见,当主节点重新恢复正常,那么之前的主从关系又重新恢复正常了。
【h】下面我们模拟其中一个从节点发生宕机现象:
可见,其中一个从节点发生故障,不会影响另一个从节点的正常工作。
那么,假如宕机的从节点又重新恢复正常了,它能否继续与主节点继续之前的主从关系呢?
答案就是:假如从机出现宕机之后,因为此时从机恢复正常之后是master角色,那么需要与主机重新建立主从复制联系,除非写进redis.conf配置文件中。
【i】注意点
- 如果master主节点已经运行了一段时间,slave此时才建立主从关系,此时slave会对master的所有数据进行同步(全量复制),而不是从连接上的时间点同步;
- 一般master主节点都是以写为主,slave从节点以读操作为主;
- 如果master主节点发生宕机,那么从节点并不会接替主节点继续工作,原地待命,直到master重新恢复正常,主从关系又重新恢复;
- 如果slave从节点发生宕机,那么其他从节点不会受此影响,还是正常工作,当该从节点恢复正常后,角色变为master主节点,之前的主从关系并不保留,需要重新建立;
- 只要是slave重新连接master都会自动执行一个全量复制;
- 上一个Slave可以是下一个slave的Master,slave同样可以接受其他slaves的连接和同步请求,那么该slave作为链条中下一个的master,可以有效减轻master的写压力;
【j】雷区
如果遇到master_link_status:down 一直是down,首先确定你的主节点master有没有配置redis密码,如果主节点有密码的话需要配置master的密码才能建立主从关系。(以上示例都没配置redis密码,小伙伴们千万记得这一点)
以下可能的原因:
- 确定slaveof 和masterauth 两个选项配置是否正确;
- 后台进程的选项是否关闭:daemonize no;
- 防火墙的原因,6379端口那些是不是开放;
【k】取消主从关系
如果想使当前从节点停止与其他节点的同步,转成master主节点,可以使用下面的命令:
SLAVEOF no one
三、主从复制原理
redis复制主要分为两种:
- 全量复制: 指的是将主节点上的所有数据全部都同步到从节点上,一般发生在slave初始化的时候,具体步骤大体如下:
1. 从服务器连接主服务器,发送SYNC命令;
2. 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令
3. 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
4. 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
5. 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
6. 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
7. 完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。
- 增量复制: 指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。
四、总结
以上就是关于redis主从复制的详细配置过程,希望能对大家的学习有所帮助,文中如有不对之处,麻烦指正,相互学习,共同进步。