redis主从复制

概述

主从复制读写分离,info replicaiton查看信息,Master以写为主,
slave以读为主,主要是读写分离和容灾恢复,注意一般配从不配主。

  • 1.从库配置slaveof主库IP 主库端口
  • 2.每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
  • 3.一般一主2从

一主二从

  • 1.拷贝多个redis.conf文件
    redis6379.conf
    redis6380.conf
    redis6381.conf

  • 2.修改各个文件的配置:
    开启daemonize yes
    修改pid文件名
    指定port
    修改log文件名
    修改dump.rdb文件名

  • 3.配置启动
    进入6380 6381
    redis-server /myredis/redis6380.conf
    redis-cli –p 6380
    slaveof 127.0.0.1 6379
    即可开启主从复制

  • 4.获取主从表信息
    info replication

问题

  • 1.当配置主从复制后,slaveof,主表之前的数据从表能获得吗?能!
  • 2.在进行主从复制时,从表会清空,然后复制主表
  • 3.从表不能进行修改set
  • 4.从表shutdown之后,重新登录需要重新进行主从复制,否则该从表就不再是从表
  • 5.主表shutdown之后,从表会原地等待,主表重新连回之后,依然是主从关系

薪火相传

火车结构,从表连从表,上一个是下一个的主表。

  • 1.1个主表多个从表,从表都从主表拿数据,主表压力很大。
  • 2.去中心化:减轻master的负担
  • 3.上一个是下一个的主表,像链表一样相连。但是传递有失真延时

反客为主

  • 当第一个主表宕机可以使用slaveof no one使当前的数据库停止与主表同步,转成主数据库
    薪火相传后面的库不用变
    一主一从就需要改变别的从库跟随新的主库

哨兵模式(sentinel)最重要

反客为主的自动版(反客为主需要手动修改slave)
能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

步骤

  • 1.调整结构为一主二从

  • 2.自定义/myredis目录下新建sentinel.conf文件,名字绝对不能错

  • 3.配置哨兵sentinel填写内容

    1
    2
    3
    4
    sentinel monitor被监控数据库名字(自己起名字)127.0.0.1 6379 1
    上面最后一个数字1,表示主机挂了后slave投票看让谁接替成为主机,得票多少后成为主机
    vim sentinel.conf
    sentinel monitor host6379 127.0.0.1 6379 1
  • 4.启动哨兵
    redis-sentinel /myredis/sentinel.conf

  • 5.检测哨兵

    • 1.挂掉6379 shutdown exit
    • 2.检查6380 6381和哨兵info replicaiton
    • 3.投票选举这时候在6380 6381中选出了一个master
    • 4.重启6379,发现6379被哨兵检测到后变成小弟slave
  • 5.一组sentinel可以监控多个master

  • 6.开启多个sentinel可以发现自动会形成一个sentinel组合

复制原理

  • 1.从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,
    当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接
  • 2.发送 ping 命令,连接建立成功后从节点发送 ping 请求进行首次通信
  • 3.slave发送一个sync命令,并建立一个 socket 套接字,从节点建立了一个端口为51234的套接字,
    专门用于接受主节点发送的复制命令
  • 5.master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后
  • 6.master将传送整个文件到slave,以完成一次完全同步
  • 7.master继续将新的所有收集到的修改命令依次传给slave

    全量复制

    slave服务在接收到数据库文件数据后,将其存盘并加载到内存中

    增量复制

    master继续将新的所有收集到的修改命令依次传给slave,完成同步但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

主从复制的缺点

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

分享到