redis之主从复制

master-slave 主从复制
1 作用

​ 为了分担压力提高性能,redis支持master-slave模式,进行读写分离,以及很强的容灾恢复,master支持写,slave支持读.

2 配置(只在从库中配置)
# 复制选项,slave复制对应的master
# replicaof  

#如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来配置master的密码,这样可以在连上master后进行认证。
# masterauth 

#当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。2) 如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress”。
replica-serve-stale-data yes

#作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)。
replica-read-only yes
3 一主二从
  • 修改配置(三份,分别对应三个端口6379\6380\6381)
daemonize yes
port 6379
pidfile /var/run/redis_6379.pid
logfile "/myredis/6379.log"             
dbfilename dump6379.rdb                
  • 启动后查看信息,如图所示
127.0.0.1:6379> info replication //查看信息

redis之主从复制_第1张图片

  • 形成一主二从

    现在将6379作为主机,6380和6381作为从机,在6380 6381执行如下命令

//slaveof host port: 让6380和6381跟随6379,即6380 6381成为slave,6379成为master
// 对应配置文件: replicaof  
slaveof 127.0.0.1 6379

执行之后,如图
redis之主从复制_第2张图片

  • 主写从读
    在这里插入图片描述
    复制原理:

全量复制:而slave服务在第一次接收到数据库文件数据后,将其存盘并加载到内存中.

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步.

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行.

  • 问题:

当从机过多时,同步的压力过大,甚至会造成有时都无法读取到值(从机还没有同步成功).

当主机死掉过后,两个从机仍然是无法进行写操作,这在生产上是无法避免且不允许的.

4 反客为主
//在从机上执行
SLAVEOF no one

redis之主从复制_第3张图片
但是这种方式需要人工执行命令SLAVEOF no one修改.

5 哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库.

  • 创建sentinel.conf 文件
# 指定监听的Redis Master地址,sentinel连接到master之后可以自行获取
# 语法:sentinel monitor    
# quorum是当master无法访问的时候,需要几台sentinel确认才同意master是不可用的
sentinel monitor mymaster 127.0.0.1 6379 1

# 在 60s内,sentinel一直无法ping通mymaster的时候,认为mymaster是不可用的
sentinel down-after-milliseconds mymaster 60000

# 指定当故障发生的时候,进行恢复的超时时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel 将会认为此次failoer失败
sentinel failover-timeout mymaster 180000

# 在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1

# 日志文件
logfile /myredis/redis-sentinel.log
#是否在后台执行,yes:后台运行;no:不是后台运行
daemonize yes
#是否开启保护模式,默认开启。开启后,只能根据配置的bind地址和密码进行访问。
protected-mode no

redis之主从复制_第4张图片

  • 启动 sentinel 监控
redis-sentinel /myredis/sentinel.conf 

redis之主从复制_第5张图片

  • 中断主库
    redis之主从复制_第6张图片
  • 选举日志
    redis之主从复制_第7张图片
  • 当重连主库后
    redis之主从复制_第8张图片

你可能感兴趣的:(Redis)