简介
本文基于 Redis 5.0+ 版本,手把手教大家在同一台服务器 上搭建一主二从 架构(主节点:6379,从节点:6380、6381)。全程包含配置文件拷贝、分步配置、启动、状态校验、数据同步测试,同时结合实操中遇到的典型问题做避坑讲解,适合新手学习参考。
文章目录
-
- 简介
- 一、环境说明
- [二、前期准备:目录创建 & 配置文件拷贝](#二、前期准备:目录创建 & 配置文件拷贝)
-
- [2.1 查找原始配置文件](#2.1 查找原始配置文件)
- [2.2 创建独立实例目录](#2.2 创建独立实例目录)
- [2.3 拷贝原始配置文件](#2.3 拷贝原始配置文件)
- [三、主节点 6379 配置与启动](#三、主节点 6379 配置与启动)
-
- [3.1 编辑主节点配置文件](#3.1 编辑主节点配置文件)
- [3.2 核心配置项 + 修改目的](#3.2 核心配置项 + 修改目的)
- [3.3 启动主节点](#3.3 启动主节点)
- [四、从节点 6380 配置与启动](#四、从节点 6380 配置与启动)
-
- [4.1 编辑从节点配置文件](#4.1 编辑从节点配置文件)
- [4.2 核心配置项 + 修改目的](#4.2 核心配置项 + 修改目的)
- [4.3 启动从节点 6380](#4.3 启动从节点 6380)
- [五、从节点 6381 配置与启动](#五、从节点 6381 配置与启动)
-
- [5.1 编辑从节点配置文件](#5.1 编辑从节点配置文件)
- [5.2 核心配置项 + 修改目的](#5.2 核心配置项 + 修改目的)
- [5.3 启动从节点 6381](#5.3 启动从节点 6381)
- 六、主从状态校验(带完整输出)
-
- [6.1 查看主节点 6379 状态](#6.1 查看主节点 6379 状态)
- [6.2 查看从节点 6380 状态](#6.2 查看从节点 6380 状态)
- [6.3 查看从节点 6381 状态](#6.3 查看从节点 6381 状态)
- 七、数据同步功能测试(直观验证)
-
- [7.1 主节点写入测试数据](#7.1 主节点写入测试数据)
- [7.2 从节点 6380 读取数据](#7.2 从节点 6380 读取数据)
- [7.3 从节点 6381 读取数据](#7.3 从节点 6381 读取数据)
- [7.4 从节点写入权限测试(只读校验)](#7.4 从节点写入权限测试(只读校验))
- 八、实操高频坑点总结(重点)
- 九、常用运维命令备查
- 十、核心规则速记
一、环境说明
- 部署架构:单机多实例(1主2从)
- 主节点端口:
6379 - 从节点端口:
6380、6381 - 核心指令:Redis 5.0+ 使用
replicaof配置主从关系 - 配置文件来源:使用 Redis 原生
redis.conf模板修改
二、前期准备:目录创建 & 配置文件拷贝
2.1 查找原始配置文件
先找到 Redis 原生 redis.conf 所在路径,执行搜索命令:
bash
find / -name redis.conf 2>/dev/null
常规默认路径:/usr/local/redis/redis.conf
2.2 创建独立实例目录
为三个 Redis 实例分别创建专属目录,目的:实现日志、持久化数据、配置文件物理隔离,避免多实例文件互相覆盖、冲突。
bash
mkdir -p /usr/local/redis/replication/6379
mkdir -p /usr/local/redis/replication/6380
mkdir -p /usr/local/redis/replication/6381
2.3 拷贝原始配置文件
将统一的 redis.conf 分别拷贝到三个实例目录中,目的:基于官方标准配置修改,保证服务稳定性。
bash
# 拷贝至主节点 6379
cp /usr/local/redis/redis.conf /usr/local/redis/replication/6379/
# 拷贝至从节点 6380
cp /usr/local/redis/redis.conf /usr/local/redis/replication/6380/
# 拷贝至从节点 6381
cp /usr/local/redis/redis.conf /usr/local/redis/replication/6381/
三、主节点 6379 配置与启动
3.1 编辑主节点配置文件
bash
vim /usr/local/redis/replication/6379/redis.conf
3.2 核心配置项 + 修改目的
逐一修改以下配置,主节点无需配置主从关联指令:
conf
# 1. 设置服务端口
port 6379
# 目的:指定当前实例为 6379 主节点端口
# 2. 绑定访问IP
bind 127.0.0.1
# 目的:仅允许本机访问,测试环境提升安全性
# 3. 开启后台运行
daemonize yes
# 目的:Redis 以守护进程后台启动,不占用终端窗口
# 4. 独立进程PID文件
pidfile /var/run/redis_6379.pid
# 目的:每个实例独有PID文件,防止多实例启动冲突、重复运行
# 5. 独立日志文件
logfile "/usr/local/redis/replication/6379/redis.log"
# 目的:日志单独存放,方便后续排查问题
# 6. 数据持久化目录
dir /usr/local/redis/replication/6379
# 目的:指定RDB/AOF等数据文件存放目录,实现数据隔离
# 7. RDB快照文件名
dbfilename dump6379.rdb
# 目的:自定义数据快照文件名,和其他实例区分
# ========== 重要提醒 ==========
# 主节点【禁止】配置 replicaof
# 目的:主节点是数据源头,不需要追随其他节点
3.3 启动主节点
bash
redis-server /usr/local/redis/replication/6379/redis.conf
四、从节点 6380 配置与启动
4.1 编辑从节点配置文件
bash
vim /usr/local/redis/replication/6380/redis.conf
4.2 核心配置项 + 修改目的
conf
# 1. 设置从节点端口(与主节点不同)
port 6380
# 目的:多实例端口必须唯一,避免端口占用
bind 127.0.0.1
daemonize yes
# 2. 独立PID文件
pidfile /var/run/redis_6380.pid
# 目的:与主节点、其他从节点PID文件隔离
# 3. 独立日志文件
logfile "/usr/local/redis/replication/6380/redis.log"
# 4. 独立数据目录
dir /usr/local/redis/replication/6380
# 5. 独立RDB文件名
dbfilename dump6380.rdb
# 6. 主从复制核心配置
replicaof 127.0.0.1 6379
# 目的:声明当前 6380 为从节点,指定追随本机 6379 主节点
# 踩坑提醒:此处严禁填写自身端口,否则连接失败、无法同步数据
4.3 启动从节点 6380
bash
redis-server /usr/local/redis/replication/6380/redis.conf
五、从节点 6381 配置与启动
5.1 编辑从节点配置文件
bash
vim /usr/local/redis/replication/6381/redis.conf
5.2 核心配置项 + 修改目的
配置逻辑与 6380 完全一致,仅修改端口、路径等唯一标识:
conf
port 6381
bind 127.0.0.1
daemonize yes
pidfile /var/run/redis_6381.pid
logfile "/usr/local/redis/replication/6381/redis.log"
dir /usr/local/redis/replication/6381
dbfilename dump6381.rdb
# 主从复制核心配置
replicaof 127.0.0.1 6379
# 目的:声明当前 6381 为从节点,关联 6379 主节点
5.3 启动从节点 6381
bash
redis-server /usr/local/redis/replication/6381/redis.conf
六、主从状态校验(带完整输出)
所有实例启动完成后,通过 info replication 命令查看主从角色、连接状态。
6.1 查看主节点 6379 状态
执行命令:
bash
redis-cli -p 6379 info replication
预期输出:
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online
slave1:ip=127.0.0.1,port=6381,state=online
解读:当前节点为主节点,已成功连接 2 个从节点,所有从节点在线正常。
6.2 查看从节点 6380 状态
执行命令:
bash
redis-cli -p 6380 info replication
预期输出:
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
解读:当前节点为从节点,已成功连接 127.0.0.1:6379 主节点,连接状态正常。
6.3 查看从节点 6381 状态
执行命令:
bash
redis-cli -p 6381 info replication
预期输出:
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
七、数据同步功能测试(直观验证)
主从架构核心特性:主节点可读写,从节点默认只读,主节点数据自动同步至所有从节点。
7.1 主节点写入测试数据
执行命令:
bash
redis-cli -p 6379 set k1 "hello_redis_master"
输出结果:
OK
7.2 从节点 6380 读取数据
执行命令:
bash
redis-cli -p 6380 get k1
输出结果:
"hello_redis_master"
7.3 从节点 6381 读取数据
执行命令:
bash
redis-cli -p 6381 get k1
输出结果:
"hello_redis_master"
7.4 从节点写入权限测试(只读校验)
从节点默认禁止写入,执行写入命令:
bash
redis-cli -p 6380 set k2 123456
输出结果:
(error) READONLY You can't write against a read only replica.
解读:报错代表从节点只读属性生效,主从架构角色完全正常。
八、实操高频坑点总结(重点)
结合本次搭建过程中遇到的问题,整理最容易出错的场景:
-
replicaof 配置错误
- 错误写法:
replicaof 127.0.0.1 6380(指向自身端口) - 现象:
master_link_status:down,从节点无法同步数据,读取键返回空 - 正确写法:
replicaof 127.0.0.1 6379(固定指向主节点端口)
- 错误写法:
-
多实例文件未隔离
- 问题:所有实例共用同一个
pidfile、dir、dbfilename - 现象:实例启动失败、数据文件互相覆盖
- 解决方案:每个实例配置独立的 PID 文件、日志、数据目录、RDB 文件。
- 问题:所有实例共用同一个
-
启动命令不指定配置文件
- 错误操作:直接执行
redis-server - 现象:加载默认配置,自定义的主从规则全部失效
- 正确操作:
redis-server 完整路径/redis.conf
- 错误操作:直接执行
-
主节点配置 replicaof
- 问题:主节点添加
replicaof配置 - 现象:主节点降级为从节点,架构完全混乱
- 规则:仅从节点配置 replicaof,主节点禁止配置
- 问题:主节点添加
-
补充说明
pidfile、logfile、dir、dbfilename仅作用于实例启动、文件存储,不会影响主从复制连接与数据同步,配置错误只会导致启动异常,不会出现"能启动但读不到数据"的问题。
九、常用运维命令备查
bash
# 1. 优雅停止指定Redis实例
redis-cli -p 端口 shutdown
# 2. 查看所有Redis运行进程
ps -ef | grep redis
# 3. 强制杀死进程(优雅停止失败时使用)
kill -9 进程PID
# 4. 动态修改主从关系(临时生效,重启失效)
redis-cli -p 从节点端口 REPLICAOF 主IP 主端口
# 5. 取消从节点身份,升级为独立主节点
redis-cli -p 端口 REPLICAOF NO ONE
十、核心规则速记
- 端口、PID、日志、数据目录、RDB 文件,一实例一配置,全部独立;
- 主节点:不配置
replicaof,负责读写、下发数据; - 从节点:必须配置
replicaof 主IP 主端口,默认只读、同步主节点数据; - 校验标准:从节点
master_link_status:up代表主从连接成功。