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 信息

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

相关推荐
爱勇宝3 小时前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
IT_陈寒8 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
易协同低代码9 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo9 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志10 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..10 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects10 小时前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰10 小时前
一些基础和问题解决
后端
陈随易10 小时前
前端项目部署只要30秒
前端·后端·程序员
YIAN10 小时前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp