Redis的复制(Master/Slave)

643 阅读3分钟

简介

主从复制,主机数据更新后根据配置和策略,自动同步到备机的Master/Slaver机制,Master以写为主,Slave以读为主。

功能

  • 读写分离
  • 容灾备份

使用

配从库不配主库

从库配置

salveof 主库IP 主库端口

  • 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
  • info relication

修改配置文件

  1. 拷贝多个redis.conf文件
  2. 开启damemonize yes
  3. 配置pid文件名
  4. 指定端口
  5. 配置log文件名
  6. 配置dump.rdb文件名

主从配置效果

  1. 一主二仆(过于中心化)
  • 使用slaveof 127.0.0.1 6379将80和81两台机器配置为从机,主机支持读写操作,从机只支持读操作
  • 使用info replication查看主从配置信息
  • 主机挂掉之后,从机保持原地待命状态
  • 当主机回来之后,主从模式正常工作
  • 当从机挂掉后重启,不能恢复到原来的从机身份,需要通过命令slaveof 127.0.0.1 6379重新连接
  1. 薪火相传

上一个slave可以是下一个slave的master,slave同样可以接受其他slaves的连接和同步请求,那么该slave作为链条中下一个的master,可以有效的减轻master的写压力。

  • 使用命令slaveof 127.0.0.1 6380将6381挂在6380上
  1. 反客为主
  • 当主机挂掉之后,我们可以通过命令slaveof no one让6380成为新的master(使当前的数据停止与其他数据库的同步,转为主数据库)

复制原理

  • slave启动成功连接到master后悔发送一个sync命令
  • master接到命令启动后台的存盘进程,同事手机所有接受到的用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到slave,以完成一次完全同步
  • 全量复制:而slave服务在接受到数据库文件后,将其存盘并加载到内存中
  • 增量复制:mater继续讲新的所有收集到的修改命令一次传递给slave,完成同步
  • 但是只要是重新连接master,一次完成同步(全量复制)将被自动执行

哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障,根据投票数自动将从库转换为主库。
  • 配置步骤
    • 新建sentinel.conf文件
    • 配置哨兵,在配置文件中增加如下内容sentinel monitor host6379 127.0.0.1 6379 1, 其中host6379表示主机名,1表示主机挂掉后salve投票看让谁来接替成为主机,得票数多少后成为主机
    • 启动哨兵,使用命令./redis-sentinel /myredis/sentinel.conf
    • 原有的master挂了,投票重新选取,原来的master后来之后身份变成了slave
  • 一组sentinel可以监控多个master

复制的缺点

由于所有的写操作都是现在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量增加也会使这个问题更加严重。