Redis复制(replica)

是什么

官网地址Redis replication | Docs

就是主从复制,master以写为主,Slave以读为主当,master数据变化的时候,自动将新的数据异步同步到其它slave数据库。

能干嘛

  • 读写分离
  • 容灾恢复
  • 数据备份
  • 水平扩容支撑高并发

怎么玩

  • 配从(库)不配主(库)
  • 权限细节,重要
    • master如果配置了requirepass参数,需要密码登陆那么slave就要配置masterauth来设置校验密码,否则的话master会拒绝slave的访问请求
  • 基本操作命令
    • info replication:可以查看复制节点的主从关系和配置信息
    • replicaof:主库IP 主库端口(一般写入进redis.conf配置文件内)
    • slaveof:主库IP 主库端口(每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件,在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头
    • slaveof no one:使当前数据库停止与其他数据库的同步,转成主数据库,自立为王

案例演示

一主二仆

  1. cp两份redis6380.conf,redis6381.conf
  2. 修改端口、pid、log
  3. 连接主库,查看主从库信息

薪火相传

  1. 上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主master的写压力

  2. 中途变更转向:会清除之前的数据,重新建立拷贝最新的

  3. slaveof 新主库IP 新主库端口 

反客为主

SLAVEOF no one:使当前数据库停止与其他数据库的同步,转成主数据库

复制原理和工作流程

  • slave启动,同步初请
    1. slave启动成功连接到master后会发送一个sync命令
    2. slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除
  • 首次连接,全量复制
    1. master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
    2. 而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
  • 心跳持续,保持通信
    • repl-ping-replica-period 10
  • 进入平稳,增量复制
    • Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步
  • 从机下线,重连续传
    • master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传

复制的缺点

复制延时,信号衰减,由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

master挂了默认情况下,不会在slave节点中自动重选一个master ,每次都要人工干预。

### 如何停止或禁用 Redis 主从复制 在某些场景下,如果不再需要 Redis 的主从复制功能,可以通过以下方法来停止或禁用它。 #### 方法一:修改从库配置文件 在从库的 `redis.conf` 文件中找到并删除或注释掉与主从复制相关的配置项。具体操作如下: 1. 找到 `slaveof` 或 `replicaof` 配置项,并将其注释掉或移除。 ```conf # slaveof <masterip> <masterport> # replicaof <masterip> <masterport> ``` 2. 如果设置了只读模式 (`replica-read-only`),也可以选择保留该选项以防止意外写入。 3. 保存配置文件后,重启 Redis 服务使更改生效。 ```bash systemctl restart redis ``` 此方法会永久禁用主从复制功能,直到重新启用相关配置[^2]。 --- #### 方法二:动态取消主从关系 如果不希望修改配置文件,可以直接通过 Redis 命令行工具动态取消主从关系。 1. 使用 `SLAVEOF NO ONE`(适用于 Redis 版本低于 5.0)或 `REPLICAOF NO ONE`(适用于 Redis 5.0 及以上版本)命令让从库脱离当前主库。 ```bash redis-cli REPLICAOF NO ONE ``` 此命令执行后,从库将立即停止同步主库的数据,并成为独立运行的实例[^4]。 2. 如果需要进一步确认状态,可以查看从库的信息: ```bash redis-cli info replication ``` 输出中的 `role` 字段应显示为 `master`,表示已成功退出从属角色。 --- #### 方法三:清空复制偏移量和槽位映射 为了彻底清除主从复制的历史记录,还可以手动重置复制偏移量和槽位映射。 1. 清理主库上的从库连接信息: ```bash redis-cli CLIENT KILL TYPE SLAVE ``` 2. 对于集群环境下的分片副本组,可使用以下命令清理槽位分配: ```bash redis-cli CLUSTER RESET SOFT ``` 这些操作有助于避免残留数据影响后续部署或其他维护工作[^3]。 --- #### 注意事项 - **数据一致性**:在解除主从关系之前,请确保所有重要数据已被妥善备份。 - **网络稳定性**:即使暂时关闭主从复制,也建议保持良好的网络条件以防误操作引发异常。 - **应用层适配**:对于依赖主从架构的应用程序来说,务必更新其逻辑以便适应单机模式下的访问需求[^4]。 ```php // 示例 PHP 脚本调整为主库直连模式 $redis_master = new Redis(); $redis_master->connect('192.168.0.180', 6379); $redis_master->auth('123456'); print_r($redis_master->get('k')); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值