Redis | 主从模式

Redis | 主从模式

1. 简介

Redis主从模式(Replication)是Redis提供的一种数据备份和高可用性解决方案。通过主从复制,可以将一个Redis服务器的数据复制到其他多个从服务器,从而实现数据的备份和读写分离,提高系统的性能和可用性。

主从模式的工作原理如下:

  1. 主节点(Master):主节点是主要的数据写入节点,负责接收客户端的写入操作(写操作包括SET、INCR等),并将写入的数据同步到从节点。
  2. 从节点(Slave):从节点负责复制主节点的数据。它接收主节点发送过来的写操作命令,并执行相同的写操作,以保持数据的一致性。
  3. 数据同步:主节点会将写操作的命令发送给所有连接的从节点,从节点执行相同的写操作,从而保持数据同步。
  4. 只读操作:客户端的只读操作(例如GET等)可以由从节点处理,从而减轻主节点的压力,提高读取性能。

主从模式的优势在于数据备份和读写分离:

  • 数据备份:通过复制数据到从节点,即使主节点发生故障,数据仍然可用,并且可以通过从节点恢复数据。
  • 读写分离:通过从节点处理只读操作,可以减轻主节点的负担,提高读取性能。

2. 配置

2.1. 配置主节点

注意:不配置默认也是主节点

启动参数方式

在主节点的redis-server执行程序启动时添加--replicaof no one启动参数,表示当前节点为主节点。

redis-server --replicaof no one

配置文件方式

在主节点的redis.conf文件中设置replicaof选项为no one,表示当前节点为主节点。

replicaof no one

2.2. 配置从节点

启动参数方式

在主节点的redis-server执行程序启动时添加--replicaof <master_ip> <master_port>启动参数,设置当前节点的主节点。

如果主节点有密码还需要添加--masterauth <master_password>

配置文件方式

在从节点的redis.conf文件中设置replicaof选项为主节点的地址和端口。

replicaof <master_ip> <master_port>

如果主节点有密码还需要添加masterauthredis.conf

masterauth <master_password>

3. 演示

docker-compose.yaml

yaml 复制代码
version: "3.8"
services:
  redis1:
    container_name: redis1
    image: redis:7.0
    command:
      - redis-server
      - --requirepass 123456
      - --bind * -::*
  redis2:
    container_name: redis2
    image: redis:7.0
    command:
      - redis-server
      - --requirepass 123456
      - --bind * -::*
      - --masterauth 123456
      - --replicaof redis1 6379
    depends_on:
      - redis1
  redis3:
    container_name: redis3
    image: redis:7.0
    command:
      - redis-server
      - --requirepass 123456
      - --bind * -::*
      - --masterauth 123456
      - --replicaof redis1 6379
    depends_on:
      - redis1
  1. 进入窗口控制台:docker exec -it redis1 bash

  2. 控制台内部操作:

    root@1c0cccc0d756:/data# redis-cli
    127.0.0.1:6379> AUTH 123456
    OK
    127.0.0.1:6379> INFO replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=172.18.0.3,port=6379,state=online,offset=1694,lag=0
    slave1:ip=172.18.0.4,port=6379,state=online,offset=1694,lag=0
    master_failover_state:no-failover
    master_replid:0158f9bf36c9db3b95829e29139fa71b1ecd2b84
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:1694
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:1694
    

4. 注意

主从复制是异步的,从节点可能会有一定的延迟。如果主节点故障,可以将一个从节点提升为主节点,继续提供服务。但在进行主从切换时,需要考虑数据一致性和可能丢失的写操作。

相关推荐
微刻时光42 分钟前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
丁总学Java1 小时前
如何使用 maxwell 同步到 redis?
数据库·redis·缓存
蘑菇蘑菇不会开花~1 小时前
分布式Redis(14)哈希槽
redis·分布式·哈希算法
爱吃南瓜的北瓜1 小时前
Redis的Key的过期策略是怎样实现的?
数据库·redis·bootstrap
小菜yh2 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
小安运维日记5 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
码农郁郁久居人下10 小时前
Redis的配置与优化
数据库·redis·缓存
Hsu_kk11 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK11 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
SAO&asuna1 天前
redis基本数据结构-sorted set
数据结构·数据库·redis