【docker】性能优化-redis之【主从复制】,第一次准备

主从复制说明

 面临问题

在实际的场景当中单一节点的redis容易面临风险。

比如:

1、机器故障。我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的。而数据是最重要的,如果你不在乎,基本上也就不会使用 Redis 了。

2、容量瓶颈。当我们有需求需要扩容 Redis 内存时,从 16G 的内存升到 64G,单机肯定是满足不了。当然,你可以重新买个 128G 的新机器。

要实现分布式数据库的更大的存储容量和承受高并发访问量,我们会将原来集中式数据库的数据分别存储到其他多个网络节点上。

Redis 为了解决这个单一节点的问题,也会把数据复制多个副本部署到其他节点上进行复制,实现 Redis的高可用,实现对数据的冗余备份,从而保证数据和服务的高可用。

什么是主从复制 ?

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。

 

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的作用 ?

主从复制的作用主要包括:

1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

  1. 读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;

5、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

 

主从复制启用

从节点开启主从复制,有3种方式:

(1)配置文件

在从服务器的配置文件中加入:slaveof <masterip> <masterport>

(2)启动命令

redis-server启动命令后加入 --slaveof <masterip> <masterport>

(3)客户端命令

Redis服务器启动后,直接通过客户端执行命令:slaveof <masterip> <masterport>,则该Redis实例成为从节点。

通过  info replication 命令可以看到复制的一些信息

Log 文件位置

vi /var/log/redis/redis.log

保护模式

https://www.jianshu.com/p/b36923e65d01

 

主从复制原理

主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。

在从节点执行 slaveof 命令后,复制过程便开始运作,下面图示大概可以看到,

从图中可以看出复制过程大致分为6个过程

保存主节点(master)信息。

执行 slaveof 后 Redis 会打印如下日志:

  1. 从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接。
  2. 从节点与主节点建立网络连接

    从节点会建立一个 socket 套接字,从节点建立了一个端口为51234的套接字,专门用于接受主节点发送的复制命令。从节点连接成功后打印如下日志:

  3. 如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行 slaveof no one 取消复制

    关于连接失败,可以在从节点执行 info replication 查看 master_link_down_since_seconds 指标,它会记录与主节点连接失败的系统时间。从节点连接主节点失败时也会每秒打印如下日志,方便发现问题:

    # Error condition on socket for SYNC: {socket_error_reason}

  4. 权限验证。如果主节点设置了 requirepass 参数,则需要密码验证,从节点必须配置 masterauth 参数保证与主节点相同的密码才能通过验证;如果验证失败复制将终止,从节点重新发起复制流程。

  5. 同步数据集。主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持有的数据全部发送给从节点,这部分操作是耗时最长的步骤。
  6. 命令持续复制。当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。

  7. https://gitbook.cn/gitchat/geekbook/5af939544b544674331bce2e/topic/5afa57ae15da5a21f3419db0

    https://juejin.im/entry/5b39c05df265da596e4cf399

### Redis 主从复制的知识点与学习目标 Redis 主从复制是一种用于实现高可用性和数据冗余的技术方案,其核心目的是通过多个副本提高系统的可靠性和性能。以下是关于 Redis 主从复制的主要知识点和学习目标: --- ### 一、主从复制的核心知识点 #### 1. **主从复制的基本概念** - Redis 支持单向复制功能,即一个 Master(主节点)可以有多个 Slave(从节点)。Slave 节点会自动同步 Master 的数据变化[^1]。 - 复制过程中,Master 不会被阻塞,从而保持对外提供服务的能力。 #### 2. **主从复制的工作机制** - **全量同步**:当 Slave 第一次连接到 Master 或者发生断线重连时,Master 会生成一份 RDB 快照并将其发送给 Slave[^3]。 ```bash # 查看当前主从状态 redis-cli info replication ``` - **部分重同步**:如果网络中断时间较短,Slave 可以基于之前接收到的缓冲区数据继续同步,而无需重新执行全量同步[^5]。 #### 3. **配置方法** - 手动配置:编辑 `redis.conf` 文件,添加如下内容来指定 Master 地址和端口[^2]。 ```conf replicaof <master-ip> <master-port> ``` - 动态配置:通过 CLI 命令实时设置主从关系。 ```bash redis-cli SLAVEOF <master-ip> <master-port> ``` #### 4. **应用场景** - **读写分离**:将大部分读请求分配给 Slave 节点,减轻 Master 的负载压力[^1]。 - **数据备份**:利用 Slave 定期保存数据快照,增强灾难恢复能力。 - **故障转移**:配合 Sentinel 或 Cluster 实现自动化故障切换[^3]。 #### 5. **延迟检测与化** - 使用脚本监测主从之间的偏移差值,及时发现潜在问题。 ```bash #! /bin/bash MASTER_OFFSET=$(redis-cli -h master-host -p 6379 info replication | grep master_repl_offset | cut -d: -f2) SLAVE_OFFSET=$(redis-cli -h slave-host -p 6380 info replication | grep master_repl_offset | cut -d: -f2) DELAY=$((MASTER_OFFSET - SLAVE_OFFSET)) if [ "$DELAY" -gt 100000 ]; then echo "ALERT: Replication delay exceeds 100,000 bytes" fi ``` #### 6. **故障切换流程** - 模拟主节点宕机: ```bash redis-cli -h master-host -p 6379 DEBUG SEGFAULT ``` - 观察从节点的状态变化: ```bash redis-cli -h slave-host -p 6380 info replication | grep master_link_status ``` - 如果启用了 Sentinel,系统会自动选举新的 Master 并通知客户端更新地址。 --- ### 二、学习目标 1. **理论层面** - 理解主从复制的作用及其在分布式架构中的重要性[^1]。 - 掌握 Redis 中全量同步与增量同步的具体实现细节[^5]。 2. **实践技能** - 能够独立完成 Redis 主从复制的手动配置及动态整[^2]。 - 编写脚本来监控主从延迟,并针对异常情况进行排查和修复。 3. **高级应用** - 结合 Sentinel 或 Cluster 技术构建更复杂的高可用解决方案[^5]。 - 对比分析不同部署方式(如 Docker、源码编译等)的势与局限性[^2]。 4. **性能** - 学习如何平衡主从数量以降低对 Master 的影响[^1]。 - 设计合理的拓扑结构满足特定业务需求的同时兼顾成本控制。 --- ### 三、操作指南 #### 1. **环境准备** - 下载并安装 Redis,确保版本兼容性。 - 配置防火墙规则开放必要的通信端口。 #### 2. **基础配置** - 修改 Master 和 Slave 的 `redis.conf` 文件,分别定义监听地址和其他必要参数。 - 在 Slave 配置中加入以下指令指向对应的 Master: ```conf replicaof <master-ip> <master-port> ``` #### 3. **启动服务** - 分别启动 Master 和 Slave 进程: ```bash redis-server /path/to/master/redis.conf redis-server /path/to/slave/redis.conf ``` #### 4. **验证效果** - 登录任意一个实例检查主从状态是否正常: ```bash redis-cli info replication ``` #### 5. **测试稳定性** - 断开网络观察 Slave 是否能够快速恢复同步。 - 测试极端条件下(如 Master 宕机)的整体表现。 --- ### 四、总结 通过对 Redis 主从复制的学习,不仅可以加深对内存数据库工作机制的理解,还能为后续探索更高阶的功能打下坚实的基础。无论是日常运维还是项目开发阶段,熟练运用这一特性都将极大提升工作效率和服务质量。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值