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