zoukankan      html  css  js  c++  java
  • redis学习5--redis主从复制,读写分离

      1 一个主节点可以有多个从节点,一个从节点只能有一个主节点,数据只能从主节点流向从节点,是单向的。默认下从节点是只读模式的,但也通过配置修改从节点写操作(一般不会这样,容易造成主从数据不一致)。以下是三种复制实现方式

      1:在配置文件中加入slaveof  {masterHost}  {masterPort}

      2:   启动redis服务器的时候 加参数 redis-server --slaveof  {masterHost}  {masterPort}

      3    直接在客户端执行slaveof  {masterHost}  {masterPort}

      可以使用info replication 查看复制相关状态

      可以使用slaveof no one来断开复制,断开复制后从节点原来的数据不会删除, 当原来从节点切换主节点(做一个新的主节点的从节点)的时候 会清空原来的数据

      一主一从复制结构,主节点不开启持久化 ,从节点开启持久化,这样即保证了主节点的性能 又避免了持久化对主节点性能的影响,但是 当主节点脱机 自动重启时,需要注意的是因为主节点未开启持久化 重启后主节点数据为空,这时从节点也会跟着清空数据,所以主节点脱机前 因该先将从节点断开,避免数据丢失。

      一主多从复制结构,主节点用于写场景,从节点用于读场景,对于一些阻塞性的命令 可以放在从节点上进行。

      树状主从: 这个太复杂 太强了 以后再说吧。

      2 复制原理

      

      数据同步:第一次复制一般使用全量复制,后面的复制使用部分复制,从节点每秒上报自己的复制偏移量给主节点,通过对比主从节点的复制偏移量,可以判断主从节点数据是否一致 。     

      每次redis主节点重启后 都会被分配一个40位的16进制的run-id,这个id 被当作识别唯一redis节点,比如从节点保存主节点的run-id 可以识别自己正在复制的是哪个主节点。那么当主节点重启了 变更了整体数据文件(rdb/aof) 此时再去复制是不安全的。所以当 主节点的run-id变化后 从节点需要重新一次全量复制。需要注意的是 每次重启 run-id都会改变, 当然也可以通过配置文件达到重启后 run-id 不变,这样就避免了不必要的全量复制。

      心跳:主从关系建立后,他们之间的关系维护通过心跳命令来维持, 主节点每隔10秒向从节点发送ping命令,从节点每隔1秒发送replconf ack {offset} 上报自己的偏移量。

      

  • 相关阅读:
    一.django初识
    解决Centos7下中文显示乱码
    宿主机ping不通虚拟机,虚拟机能ping通宿主机问题
    Win7查看某个端口被占用的解决方法
    改变securecrt背景色
    一.1搭建跨平台的统一python开发环境
    第二部分用户交互程序开发,通过paramiko记录ssh会话记录
    【VUE+Django】天坑》》 模板语法与VUE语法的冲突
    【vue_django】成功登录后,保存用户
    【Vue+django】 配合rest_framework的惊天大坑
  • 原文地址:https://www.cnblogs.com/tjqBlog/p/9599477.html
Copyright © 2011-2022 走看看