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. 注意

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

相关推荐
痞老板A小安装C43 小时前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
飞升不如收破烂~3 小时前
Redis的String类型和Java中的String类在底层数据结构上有一些异同点
java·数据结构·redis
feilieren3 小时前
DataGrip 连接 Redis、TongRDS
数据库·redis·缓存
液态不合群3 小时前
Redis中常见的数据类型及其应用场景
数据库·redis·wpf
孙克旭_3 小时前
第三章 分布式缓存Redis
redis·分布式·缓存
Allen Bright3 小时前
Jedis存储一个-以String的形式的对象到Redis
数据库·redis·缓存
Allen Bright3 小时前
Jedis连接池的操作
java·redis
Allen Bright5 小时前
Jedis存储一个以byte[]的形式的对象到Redis
数据库·redis·缓存
NiNg_1_2345 小时前
Redis中的zset用法详解
数据库·redis·缓存
jlting1957 小时前
《智慧教育实时数据分析推荐项目》详细分析
大数据·redis·sql·kafka·database