redis 主从复制(replica)
一主俩从搭建主从复制
配置
配置文件
master 配置
text
# 1守护进程 后台启动
daemonize yes
# 2可以外网链接
bind 0.0.0.0
# 3关闭保护模式
protected-mode no
# 4端口 (默认6379)
port 6379
# 5指定工作目录
dir ./
# 6pid 可以不更改
pidfile "./redis.pid"
# 7日志
logfile "./redis.log"
# 8为了安全配置密码
requirepass 123456
# 9 dump文件
dbfilename dump.rdb
# 10 aof 开启 文件
appendonly yes
appendfilename "appendonly.aof"
从库配置
text
# 1守护进程 后台启动
daemonize yes
# 2可以外网链接
bind 0.0.0.0
# 3关闭保护模式
protected-mode no
# 4端口 (默认6379)
port 6379
# 5指定工作目录
dir ./
# 6pid 可以不更改
pidfile "./redis.pid"
# 7日志
logfile "./redis.log"
# 8为了安全配置密码
requirepass 123456
# 9 dump文件
dbfilename dump.rdb
# 10 aof 开启 文件
appendonly yes
appendfilename "appendonly.aof"
# 11 配置主机连接和密码
replicaof 192.168.152.150 6379
masterauth 123456
查看
master节点查看
bash
info replication
从机节点查看
bash
info replication
写入
bash
# master执行
set k1 v1
get k1
# salve执行
get k1
可以正常复制
bash
# salve 执行
set k1 v1
########error#########
从机不可以写!!!
主机宕机测试
bash
# master
shutdown
# salve
info replication
手动指定主机
text
# 手动建立从属关系
REPLICAOF 192.168.152.1 6379
等待一会
slave 可以是下一台的主机
bash
info replication
slave 重新成为主节点
bash
SLAVEOF no one
重新成为主节点
原理
slave启动,同步初请
- slave 首次链接master会发送同步命令
- slave 首次链接master会全量复制 slave数据库原数据会被清空
首次链接,全量复制
- master 收到同步请求后会RDB保存
- slave 接收到数据库文件后 存盘并加载到内存中从而完成初始化
心跳持续,保持通讯
- maser发送ping 命令 默认10s
进入平稳,增量复制
- master继续将收到的修改命令自动依次传给slave 完成同步
从机下线,重传续传
- master 检查 backlog中的offset 类似断点续传