Redis主从复制
最后更新于:2022-04-01 21:50:03
# Redis主从复制
## 目标
1. 容灾
2. 负载均衡,读写分离
## 特点
1. master/slave结构,master可读写,slave只能读。
2. master宕机,slave不会自动完成切换
3. master宕机后恢复,slave会自动与master再次建立复制关系
## 实现
* 超级简单,在redis.conf里面配置加入
```
slaveof
masterauth <密码>
#如果主节点配置了requirepass,这里要与主节点保持一致。
```
重启redis实例
* 其他方式
1. 在用redis-server启动命令后,执行slaveof
2. 命令行执行`slaveof `
这两种都是动态的指定。
## 验证(使用redis的info命令)
* master实例
```
# Replication
role:master
connected_slaves:1
slave0:ip=,port=6379,state=online,offset=183,lag=1
master_repl_offset:197
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:196
```
* slave实例
```
# Replication
role:slave
master_host:
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:799
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
```
## 主从拓扑结构
#### 一主一从
当主节点出现故障,从节点提供服务
从节点可以开启AOF,保证数据安全,减轻持久化对主节点造成的压力
问题:但是在重启时因为主节点没有做持久化操作,导致主节点数据为空,导致子节点数据也被清空,所以再重启之前进行 slaveof no one断开与主节点的复制关系。
#### 一主多从
读写分离,适用读较多的场景,可以把读命令发送给从节点来分担主节点的压力。如keys、sort命令这种消耗性能的查询命令,可以交给一台从节点执行,防止对主节点造成阻塞。
问题:在高并发写入时,多个节点数据的同步会造成主节点性能的低下。
#### 树状主从
树形结构,一个节点既可以作为主节点又可以作为从节点。
通过数据复制中间层,数据向下传递,减少了主节点的压力,弥补了一主多从的缺憾。
缺点:占用了更多的服务器资源
';