Redis如何搭建搭建一主多从?

建一个测试目录

修改 redis.conf

  • 确认其中的配置项为 daemonize = yes

并且仅开启 RDB 备份持久化策略

  • 关闭混合持久化策略 aof-user-rdb-preamble 设置为 no
  • 关闭 AOF 持久化策略 appendonly 设置为 no

分别创建三个配置文件

示例: redis6379.confredis6380.confredis6381.conf

并且分别添加如下配置

css 复制代码
include [放置配置文件的目录路径]/redis.conf
pidfile /var/run/redis_6379.pid
port [基于文件后缀,比如 6379 端口]
dbfilename dump[端口].rdb

参考配置

分别启动三台 redis 服务器

连接查看相关信息

  • 指令 info replication 用于打印主从复制的相关信息

配置主从关系

将 6380 和 6381 配置成为 Slave ; 而 6379 作为主机 Master 借助如下指令,配置某个实例的从服务器

  • 指令 slaveof <master_ip> <master_port>
makefile 复制代码
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:6635dfe974961f6624785748ea2ed035bc670b99
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0

查看主机信息

配置了两个从节点

  • 一个为端口 6380 的服务
  • 一个为端口 6381 的服务

测试: 主机支持读写,但是从机仅支持读

主机 Master 支持读写

从机 Slave 仅支持读

尝试写报错: READONLY You can't write against a read only replice.

测试主从复制 之 全量复制

流程简述:

  1. Slave 启动成功会连接到 master 后会发送一个 sync 指令
  2. Master 接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据的指令,在后台进程执行完毕之后,Master 将传送整个数据文件到 slave, 完成一次完全同步
  3. Slave 服务在接收到数据库文件数据之后,将其存盘并且加载到内存之中,即 全量复制

Slave down 后重启仍然获取到 Master 最新数据

Master 添加数据

  • 推荐这个好用的 Redis 可视化工具 Another Redis Desktop Manager 查看从库

  • 已经自动同步

停止从库

主库继续添加新的数据

当前还存活: 6379 主(Master), 6380 从(Slave)

重启从库 6381 从库启动之后,默认仍然是 master

再次将其绑定 Master, 设置为从库

获取从库内的所有 key

  • 进行全量复制,6381从库仍然可以得到最新的数据

主库 Master 内此时的最新数据

Master 意外 down 后重启自动恢复 Master 地位

现象: 当 master 恢复之后,从服务器 Slave 仍然指向原来的主服务器

6379 主 Master 服务器内执行

复制代码
SHUTDOWN

确认 Master 已经 Down

此时从服务器

重启端口为 6379 的 Master

查看当前各个服务节点是否启动

ini 复制代码
[root@xxx]# redis-server redis6379.conf
[root@xxx]# ps -ef | grep redis
root      372752       1  0 06:30 ?        00:00:10 redis-server *:6380
root      374411       1  0 06:50 ?        00:00:03 redis-server *:6381
root      374416  366219  0 06:50 pts/1    00:00:00 redis-cli -p 6381
root      375125       1  5 06:58 ?        00:00:00 redis-server *:6379
root      375135  374917  0 06:58 pts/2    00:00:00 grep --color=auto redis

6379主服务器启动之后仍然是 master

查询从服务器 Slave 信息

可以监控到主服务器已经启动

相关推荐
永远不会的CC38 分钟前
浙江华昱欣实习(4月23日~ 4月19日)
后端·学习
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
直奔標竿1 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
嘟嘟MD1 小时前
程序员副业 | 2026年4月复盘
后端·创业
时空系1 小时前
认识Rust——我的第一个程序 Rust中文编程
开发语言·后端·rust
DevilSeagull2 小时前
Windows 批处理 (Batch) 编程: 从入门到入土. (一) 基础概念与环境配置
开发语言·windows·后端·batch·语言
CAE虚拟与现实2 小时前
五一假期闲来无事,来个前段、后端的说明吧
前端·后端·vtk·three.js·前后端
0xDevNull2 小时前
Java泛型详解
java·开发语言·后端
yeeanna2 小时前
GO函数的特殊性
开发语言·后端·golang
时空系2 小时前
第6篇:数据容器——管理大量数据 Rust中文编程
开发语言·后端·rust