redis分布式

复制

开启两个服务器,下面命令表示,当前访问服务器成为6740的从

SLAVEOF 127.0.0.1 6740

sequenceDiagram
    participant Slave as 从服务器
    participant Master as 主服务器

    %% 初始
        Note over Slave,Master: 初始状态<br>Slave: REPL_STATE_SLAVE_NONE<br>Master: REPL_STATE_MASTER_NONE

    Slave->>Master: CONNECT
    Note over Slave: REPL_STATE_SLAVE_CONNECTING

    Slave->>Master: PING
    Master-->>Slave: PONG

    Note over Slave: REPL_STATE_SLAVE_SEND_REPLCONF
    Slave->>Master: REPLCONF SET listening-port 6379

    Master-->>Slave: OK

    Note over Slave: REPL_STATE_SLAVE_SEND_SYNC
    Slave->>Master: SYNC

    Note over Master: REPL_STATE_MASTER_WAIT_SEND_FULLSYNC
    Note over Master: REPL_STATE_MASTER_SEND_RDB
    Master-->>Slave: FULLRESYNC <RDB DATA>

    Note over Slave: REPL_STATE_SLAVE_TRANSFER
    Note over Slave: REPL_STATE_SLAVE_CONNECTED
    Slave->>Master: REPLCONF ACK

    Note over Master: REPL_STATE_MASTER_CMD_PROPAGATE

    Master-->>Slave: OK
    Note over Slave: REPL_STATE_SLAVE_CMD_PROPAGATE
    
    Master-->>Slave: 写 命令转发
    Master-->>Slave: DEL 命令转发
    Master-->>Slave: SET 命令转发
    

命令传播阶段:每秒发送REPLCONF ACK进行心跳检测

最后一次交互时间 距今 已经超时。 发送这个就是保证一直有交互

从第一次connect开始时候, 就需要定时进行心跳检测,检测失败就会重试 重新进入复制流程。

sentinel

启动

  1. sentinel.conf读取, 与监控主建立联系
  2. 发送INFO命令。 响应内容
run_id:aaaaaaa
role:master #服务器角色
slave0:ip=127.0.0.1,port=11,state=online
  1. 处理INFO响应,更新instances

results matching ""

    No results matching ""