1. 介绍
redis中的复制(master/slave)主从复制,主机数据更新后根据配置和策略自动同步到备机的master/slaver机制,master以写为主,slaver以读为主
2. 作用:
读写分离、容灾恢复
一主二仆,顾名思义,这种策略的具体实现就是使用一台机器作为主机,两台(多台)机器作为备机(真正工作可能多台),主机主要是写入,备机主要是读取。需要注意的是,再使用主从复制的时候,是配置备机,主机不动(默认状态是master,从机需要改变master状态到slaver)。
配置命令:slaveof + 主机ip + 主机端口,一下是测试用例(单机版):
主机和从机的结构:
master6379
--- slave6380
--- slave6382
--- slave 6381
3.创建文件
创建redis-6380.conf和redis-6381.conf文件,文件内容基本一致,除了端口
# 后台进程
daemonize yes
# 文件目录
dir /var/run/redis
# 端口
port 6380
pidfile redis-6380.pid
logfile redis-6380.log
rdbchecksum yes
# rdb文件名
dbfilename redis-6380.rdb
# master地址以及端口,因为是单机操作,所以都设置成127.0.0.1
slaveof 127.0.0.1 6379
# 只读模式,不可在slave中修改数据
slave-read-only yes
redis-6382.conf的主机是redis-6380,所以master的地址需要更改下:
daemonize yes
dir /var/run/redis
port 6382
pidfile redis-6382.pid
logfile redis-6382.log
rdbchecksum yes
dbfilename redis-6382.rdb
#修改地址,它的master是 6380
slaveof 127.0.0.1 6380
slave-read-only yes
4.启动redis-server
- 启动master,因为master使用的端口是6379,所以直接使用
redis-server
启动即可 - 启动slave,需要使用配置文件启动方式
redis-server redis-6380.conf
,更改后边的端口号,启动三个slave
5.数据
5.1 给master添加数据
注意:<b>keys命令在生产环境中最好禁止使用,耗时太长</b>
[图片上传失败...(image-4ade0c-1540119780139)]
5.2 查看slave6380和slave6381的数据
启动对应端口客户端的方式:redis-cli -p port(端口号)
6380:
[图片上传失败...(image-6d94d6-1540119780139)]
6381:
[图片上传失败...(image-b499c0-1540119780139)]
端口号是6382的slave的主机不是master6379,而是slave6380,但同样的也复制到了master6379的所有数据:
[图片上传失败...(image-31e173-1540119780139)]
6.信息
在master6379中使用info replication
查看相关信息:
可以看到某些信息,例如它的角色是master,有两个slave,分别是ip=127.0.0.1 port=6380和ip=127.0.0.1 port=6381等
[图片上传失败...(image-486b8d-1540119780139)]
在slave6380中使用命令也可以看到:
[图片上传失败...(image-52f83c-1540119780139)]
7.主从复制的特性:
- 一旦转成从机,主机之前的所有数据也将会被备份
- 如果主机与从机都执行set方法,那么从机失败,从机没有权限写入操作,在从机短都会设置来禁止从机修改数据
slave-read-only yes
- 如果主机shutdown(死了),那么从机依然是slave原地待命,连接状态变成down,此时如果主机重启,主机再存储,从机以来可以获取,即连接不变
- 如果从机死了,若再次重启,则变成master, ,断开连接,即,slaver与master断开连接之后,除非使用配置文件进行配置,要不然需要重新连接
8.复制原理
- Slave启动成功连接到master后会发送一个sync命令;
- Master接到命令启动后的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执- 行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;
- 全量复制:而slave服务在数据库文件数据后,将其存盘并加载到内存中;
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步;
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。
9.操作
https://blog.csdn.net/candy_rainbow/article/details/52826855
https://blog.csdn.net/zhangguanghui002/article/details/78524533
http://blog.51cto.com/13362895/2135469?source=dra
https://www.cnblogs.com/leeSmall/p/8398401.html
https://www.cnblogs.com/think-in-java/p/5123884.html
https://www.cnblogs.com/lukexwang/p/4711977.html