redis 主从复制具体操作(单机)

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添加数据

注意:keys命令在生产环境中最好禁止使用,耗时太长
[图片上传失败...(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.主从复制的特性:

  1. 一旦转成从机,主机之前的所有数据也将会被备份
  2. 如果主机与从机都执行set方法,那么从机失败,从机没有权限写入操作,在从机短都会设置来禁止从机修改数据
slave-read-only yes
  1. 如果主机shutdown(死了),那么从机依然是slave原地待命,连接状态变成down,此时如果主机重启,主机再存储,从机以来可以获取,即连接不变
  2. 如果从机死了,若再次重启,则变成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

你可能感兴趣的:(redis 主从复制具体操作(单机))