1.简介
主从复制(replication):从数据库(slave)是主数据库(master)的数据备份,实时从master获取数据。
master,主要用来写,slave,主要用来读。
slave可以分担master的读写压力,可实现读写分离。
2.设置slave
master不用做任何改变。在slave执行命令或者配置即可设置。
2.1.客户端命令设置
语法:slaveof 主的ip:主的端口
[redis@localhost ~]$ redis-cli -p 6381
127.0.0.1:6381> slaveof 127.0.0.1 6380
OK
127.0.0.1:6381>
以上就将6381设置为6380的从数据库。
2.2.配置文件启动设置
从数据库配置文件添加内容: slaveof 主的ip:主的端口
port 6381
dir /home/redis/software/redis/redis-4.0.0/data/
dbfilename 6381.rdb
#设置为6380的从数据库
slaveof 127.0.0.1 6380
通过配置文件启动6381后,其就会成为6380的从数据库。
从数据库6381可读,默认为不可写:
127.0.0.1:6381> set name 123
(error) READONLY You can't write against a read only slave.
2.3.取消slave(将slave提升为master)
在slave客户端执行命令:
slaveof no one
3.主从复制的流程(原理)
主从复制过程:建立连接、数据同步(全量复制、部分复制)、命令传播
3.1.阶段一:建立连接
slave向master发送连接请求,成功则保存master的ip和端口信息,建立通信通道socket。
3.2.阶段二:数据同步(全量复制、部分复制)
数据同步阶段,slave请求同步master的数据。
全量复制是将master的全部数据通过socket将rdb文件传输给slave,且slave将其还原。
部分复制是将master在全量复制过程存入复制缓冲区的命令以aof的方式发送给slave,且slave将其还原。
3.2.阶段四:命令传播
复制缓冲区:将master接收的命令存入。
偏移量offset:通过记录offset来确定缓冲区的命令被同步的程度,以便后续继续同步,可以解决网络断续而命令未传播的问题。
【END】