Redis复制机制(replication)
概述
Redis复制机制就是主从复制,master数据库以写为主,slave数据库以读为主,当master数据发生变化时,自动的将新的数据异步同步到其他slave数据库。
作用
读写分离
容灾恢复
数据备份
水平扩容支持高并发
怎么用
一般只配置(从)读库,不配置(主)写库(一主多从)。master如果配置了requirepass参数(密码),需要密码登录,那么从数据库就要配置masterauth来设置校验密码,否则的话主机会拒绝从机的访问请求。
基本操作
- info replication: 可以查看复制节点的主从关系和配置信息
- replicaof: 主库IP和端口号,一般写进redis.conf配置文件里面
- slaveof: 主库IP和端口号
- slaveof no one: 使当前数据库停止和其他数据库的数据同步,转为主数据库,自立为王
一个主数据库(端口6379),两个从数据库(端口6380和6381):
-
拷贝多份redis.conf文件,redis6379.conf(主)、redis6380.conf(从)、redis6381.conf(从)
-
修改配置文件redis6379.conf以及其它从机
开启deamonize yes
deamonize yes
注释掉绑定ip
bind 127.0.0.1
关闭保护模式
protected-mode no
指定端口
port 6379
指定当前工作目录dir
dir /myredis
修改文件进程id名字
pidfile /var/run/redis_6379.conf
修改日志文件名字
logfile "/myredis/6379.log"
配置密码
requirepass 123456
配置rdb文件名
dbfilename dump6379.rdb
(可选)是否开启AOF
appendonly no
-
配置从机redos6380.conf和redis.6381.conf
从机访问主机的通行密码masterauto,必须(从机需要配置,主机不用)
masterauth “123456”
replicaof 主机IP 端口号
-
启动主机:
redis-server /myredis/redis6379.conf
redis-cli -a 123456 p 6379
-
从机连接主机:
redis-server /myredis/redis6380.conf
redis-cli -a 123456 p 6380
redis-server /myredis/redis6381.conf
redis-cli -a 123456 p 6381
相关问题
-
从机是否可以执行写命令?--> 不能,从机只能读,不能写(读写分离)
-
主机shutdown后,从机会上位吗? --> 主机挂了,但数据不会丢,从机依旧能访问的到,从机也不会成为主机上位,等到主机回归,主机从新回来后,主机仍然是它
-
注意,上一个从机可以使下一个从机的主机,类似于面向对象语言中的继承概念。从机也可以接收其它从机的连接和同步请求,那么该从机也可以作为链条中的下一个主机,这可以有效减轻主机的写压力。
-
即使是充当主机的从机,仍然不具备写操作权限(徒有虚名,没有实权)。
复制原理和工作流程
- 从机在第一次启动成功后会发送一个sync命令,把主机的所有数据全部同步到自身从机。
- 主机收到从机的同步请求之后,会将自己的RDB快照文件和所有的缓存命令一同发送给从机,以完成一次性同步。而从机收到数据后,将其加载到内存中,从而完成复制初始化。
- 当有从机与主机建立连接之后,主机会每隔10s向从从机发送一个心跳包,以此来保持通信。
- 主机继续将新的所有命令自动依次的传给从机,完成同步。
- 由于主机内部维护着一个日志文件backlog.log,该日志用于记录当前主机与各个从机的数据传输跟踪,当从机下线再次上线后,主机会依据日志文件从断点处重新向从机传输未传输的数据(类似断点传输)。
复制的缺点
-
复制延时,信号衰减:由于所有的写操作是在主机上进行的,然后同步到其下面的各个从机,所有从主机同步到从机会有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,从机数量越多延迟会越严重。
-
当主机挂了,默认情况下从机并不会自动担任主机的角色,此时需要人为的干预委派一个从机充当主机。(比较麻烦)--> 提出redis哨兵和redis集群机制