1.介绍
一句话,就是master以写为主,slave 以读为主。
当master 有数据变化时,自动将新数据异步同步到slave数据库中
2.目的
-
- 读写分离,提高并发
-
- 容灾恢复
-
- 数据备份
-
- 水平扩容,支持高并发
3.使用
3.1简要记录
- 配从库,不配主库
- 主要命令
2.1 info replication :可以查看主从节点的主从关系
2.2 slaveof 主库和端口: 设为从库 改换门庭
2.3 slave no one: 停止与其他数据库同步,设为主库,自立为王 - 主要配置
replicaof 主库IP 和端口: 设为从库,主从复制
3.2 细节实现
主机配置
- 开启 daemonize yes.
- 可选 注释掉 bind 127.0.0.1
- protected-mode no 允许别的主机 redis-cli
- 指定端口
- 指定当前工作目录,dir
- pid文件名称,pidfile
- log文件名称,logfile
- requirepass
reqeirepass 111111
则 redis-cli 需要验证 auth 111111 - dump.rdb
- aof文件
这一步可选:
appendfilename “appendonly.aof”
appenddirname “appendonlydir”
从机配置
- replicaof 主机IP 端口
- masterauth: 对应主机的 requiredpass
从机访问主机的通行密码 masterauth,必须。
配置完后 使用命令可查看以下信息
4.主从复制的问题
4.1 主机可写可读,从机可写吗?
不可以,从机只可以读取,不可以写入。
4.2 slave 从头开始复制还是从切入点开始复制?
master 写入了 k1,k2,k3
如果 slave1 与master 同时启动,则跟着master 写到k3
如果 slave2 在master 写到了k3才启动,那么首次master 回创建其所有数据的快照,发送给slavel,
然后继续发送命令流
4.3 主从复制的3大复制机制
- 当主服务器和副本实例连接良好时,主服务器通过向副本发送命令流来复制主服务器端对数据集的影响来保持副本的更新,发送时机是:客户端写入、密钥过期或被驱逐,任何其他更改主数据集的操作。
- 当主服务器和副本之间的链接断开时,由于网络问题或由于主服务器或副本中感觉到超时,副本重新连接并尝试进行部分重新同步:这意味着它将尝试获取断开连接期间错过的部分命令流。
- 当无法进行部分重新同步时,副本将要求完全重新同步。这将涉及一个更复杂的过程,其中主服务器需要创建其所有数据的快照,将其发送到副本,然后在数据集更改时继续发送命令流。
4.4 主机或从机异常下线的影响
1.主机下线后,从机不会自动上位
2.等待主机归来,主机归来后,一切照旧
3.从集下线后,在上线,期间错过的数据依然可以同步
4.5 如果从库配置文件中没有指定主库,还有什么办法让其称为从库
可以用slaveof host port 命令来设置(改换门庭)
但是要注意,用手动命令 slaveof , 如果从机宕机重启后,它的主从关系将不存在。需要重新
slave
所以推荐写在配置文件中
配置文件:持久稳定
命令:本次生效