redis的主从复制 和 它的哨兵模式sentinel)

介绍

主从复制 :也就是我们所说的主从复制,主机数据更新后根据配置和策略,
自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主,主从复制可以做:

  1. 读写分离
  2. 容灾恢复

redis主从复制配置(Master/Slave)

配从(库)不配主(库)

命令配置:slaveof 主库IP 主库端口 (在从库执行命令)

每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
配置参数:slaveof <主库ip> <主库端口>
redis的主从复制 和 它的哨兵模式sentinel)

查看主从库信息命令:info replication

配置实例

一主二从
主库:192.168.72.129:6379
从库:192.168.72.130:6379
从库:192.168.72.131:6379

一个master2个slave
130机器执行:slaveof 192.168.72.129 6379
redis的主从复制 和 它的哨兵模式sentinel)
131执行:slaveof 192.168.72.129 6379
redis的主从复制 和 它的哨兵模式sentinel)

执行:info replication 查看当前库状态
129:
redis的主从复制 和 它的哨兵模式sentinel)
130和131:
redis的主从复制 和 它的哨兵模式sentinel)
一主二从注意事项:

  1. 只有主机能写,从机只能读不能写
    redis的主从复制 和 它的哨兵模式sentinel)
  2. 主机宕机,从机保持原样不会取代主机,等待主机连接后,又恢复原来的样子
  3. 主机有的数据,从机初始化的时候,会完全复制一份,当主机有数据写入,从机也会同步一份该数据
  4. 从机宕机,剩下的2台保持原样,也就是一主一从模式

薪火相传(上一个Slave是下一个slave的Master)

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

如:129是130的master,而130又是131的master

反客为主(从机取代主机成master)
当主机宕机挂掉,其中一台从机可以使用命令:
SLAVEOF no one:使当前数据库停止与其他数据库的同步,转成主数据库

其他的从库也要重新执行命令:slaveof 主机ip 端口,指向主机。

复制原理

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

主从复制缺点

redis的主从复制 和 它的哨兵模式sentinel)

哨兵模式(sentinel)

哨兵模式简介

  1. 在主从模型下,从服务器能监控主机是否故障,如果主服务器出现故障,从服务器根据投票数自动将从库转换为主库
  2. 如果宕机的那台主服务器又恢复正常工作,那么此主服务器(宕机的那台服务器)会从主服务器变为从服务器

哨兵模式配置与启动

  • 配置哨兵模式
  1. 选择你要当做master(主机)的redis服务,在安装目录下创建sentinel.conf文件(哨兵配置文件,注意:在redis的解压目录也有一个sentinel.conf文件)

  2. 在sentinel.conf文件里面添加内容格式:sentinel monitor [master-group-name] [ip] [port] [quorum]
    如:sentinel monitor mySentinel 127.0.0.1 6379 1

    • 其中sentinel monitor为固定写法;
    • [master-group-name] 为自己给哨兵取的名字;
    • [ip] 为所要连接的主机ip;
    • [port] 为redis的端口号;
    • [quorum]是哨兵用来判断某个 Redis 服务器是否下线的参数,表示投票需要的"最少法定人数",比如有10个sentinal哨兵都在监控某一个master节点,如果需要至少6个哨兵发现master挂掉后,才认为master真正down掉,那么这里就配置为6,最小配置1台master,1台 slave。

    创建sentinel.conf文件,bin编辑

    redis的主从复制 和 它的哨兵模式sentinel)

  • 启动哨兵模式

    在安装的bin目录下启动哨兵:redis-sentinel /xxxx/sentinel.conf

    redis的主从复制 和 它的哨兵模式sentinel)
    注意:哨兵是另外一个线程,他是监控主redis

哨兵模式示例

一主二从
主库:192.168.72.129:6379
从库:192.168.72.130:6379
从库:192.168.72.131:6379

哨兵监控 主机 192.168.72.129:6379

主机没挂之前,info replication 状态如下:
redis的主从复制 和 它的哨兵模式sentinel)
从机状态:
redis的主从复制 和 它的哨兵模式sentinel)

当主机挂掉,退出,看哨兵日志如下:
redis的主从复制 和 它的哨兵模式sentinel)
从日志可以看出,主机挂掉后,从机131被选为新的主机,

看131 info replication输出:
redis的主从复制 和 它的哨兵模式sentinel)
131 已经自动变为主机。
130 的master已经变为131:
redis的主从复制 和 它的哨兵模式sentinel)

注意:当原来的主机宕机后,然后又恢复正常,那么原来的主机(宕掉的那台)master会变成slave,如:当129恢复正常,info replication状态如下:
redis的主从复制 和 它的哨兵模式sentinel)

哨兵模式缺点

哨兵选举需要时间,如果此时有数据写入,那么就会丢掉数据