1. 是什么
行话: 也就是我们所说的主从复制, 主机数据更新后根据配置和策略自动同步到备机的 master/slave 机制, Master 以写为主, Slave 以读为主
2. 能干嘛
数据冗余: 主从复制实现了数据的热备份, 是持久化之外的一种数据冗余方式
故障恢复: 当主节点出现问题时, 可以由从节点提供服务, 实现快速的故障恢复; 实际上是一种服务的冗余
负载均衡: 在主从复制的基础上, 配合读写分离, 可以由主节点提供写服务, 由从节点提供读服务(即写 Redis 数据时应用连接主节点, 读 Redis 数据时应用连接从节点), 分担服务器负载; 尤其是在写少读多的场景下, 通过多个从节点分担读负载
高可用基石: 由于主从复制是哨兵和集群能够实施的基础, 因此说主从复制是 Redis 高可用的基础
3. 怎么玩
Redis 主从复制讲解
(1). info replication: 查看 目标 Redis 主从情况
(2) . 配从库不配主库
从库配置: slaveof 主库 IP 主库端口
注: slaveof 进行配置的话, 每次断开后都需要重新连接, 除非配置进 Redis.conf 文件中
一旦从库 跟随了 主库, 从库可读不可写, 首次是全量同步 (这里的首次是执行 slaveof 命令时 ) 之后是增量, 若从库同步之前存在 与主库相同的 key 的 数据, 则主库的 数据覆盖从库
(3). 常用策略
1. 一主二从
此一主二从 可以水平扩展为一主多从, 主机主要负责写, 从机主要负责读
主机 down 掉在没有哨兵机制的情况下, 从机只会静默等待 直至主机恢复运行状态
2. 薪火相传
上一个 Slave 可以是下一个 slave 的 Master,Slave 同样可以接收其他 slaves 的连接和同步请求, 那么该 slave 作为了链条中下一个的 master, 可以有效减轻 master 的写压力.
第一个开头的事 master, 其他都是 slave, 只是中间的 slave 是下一个的 master
(4). 复制原理
Slave 启动成功连接到 master 后会发送一个 sync 命令
Master 接到命令启动后台的存盘进程, 同时收集所有接收到的用于修改数据集命令,
在后台进程执行完毕之后, master 将传送整个数据文件到 slave, 以完成一次完全同步
全量复制: 而 slave 服务在接收到数据库文件数据后, 将其存盘并加载到内存中.
增量复制: Master 继续将新的所有收集到的修改命令依次传给 slave, 完成同步
但是只要是重新连接 master, 一次完全同步 (全量复制) 将被自动执行
(5). 重要的哨兵模式
能够后台监控主机是否故障, 如果故障了根据投票数自动将从库转换为主库
以一主二从的策略为例:
自定义的 / myredis 目录下新建 sentinel.conf 文件, 名字绝不能错
配置哨兵, 填写内容
sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
上面最后一个数字 1, 表示主机挂掉后 salve 投票看让谁接替成为主机, 得票数多少后成为主机
3. 启动哨兵
Redis-sentinel /myredis/sentinel.conf
4. 正常主从演示, 原有的 master 挂了
5. 投票新选, 重新主从继续开工, info replication 查查看
6. 原有的 down 掉主机 Master 恢复运转, 则轮为从机 Slave
缺点: 复制延时
由于所有的写操作都是先在 Master 上操作, 然后同步更新到 Slave 上, 所以从 Master 同步到 Slave 机器有一定的延迟, 当系统很繁忙的时候, 延迟问题会更加严重, Slave 机器数量的增加也会使这个问题更加严重.
来源: https://www.cnblogs.com/dwlovelife/p/10964687.html