Redis主从复制集群搭建详解

Redis主从复制集群搭建详解


一、主从复制简介

主从复制原理

主从复制是一种常见的数据同步技术,用于实现Redis集群的高可用和读写分离。

工作流程

  1. 当从节点(Slave)第一次连接主节点(Master)时,主节点会启动一个后台进程,将数据库保存到rdb文件中
  2. 同时主节点会记录后续执行的所有写操作命令
  3. 后台进程完成rdb文件生成后,主节点将rdb文件发送给从节点
  4. 从节点收到rdb文件后,先存入磁盘,再加载到内存中
  5. 之后主节点通过命令传播方式,实时将写命令同步到从节点

主从复制特点

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速故障恢复
  • 负载均衡:在主从复制的基础上,可以实现读写分离,分担主节点的压力
  • 高可用基石:主从复制是哨兵模式和集群模式的基础

二、环境准备

服务器规划

IP地址 主机名 角色 操作系统
192.168.194.11 master 主节点 RedHat 10.1
192.168.194.12 slave1 从节点1 RedHat 10.1
192.168.194.13 slave2 从节点2 RedHat 10.1

初始化设置

bash 复制代码
# 配置主机名称
hostnamectl set-hostname master && bash
hostnamectl set-hostname slave1 && bash
hostnamectl set-hostname slave2 && bash

# 配置IP
nmcli c m ens160 ipv4.addresses 192.168.194.11/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 ipv4.method manual connection.autoconnect yes
nmcli c m ens160 ipv4.addresses 192.168.194.12/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 ipv4.method manual connection.autoconnect yes
nmcli c m ens160 ipv4.addresses 192.168.194.13/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 ipv4.method manual connection.autoconnect yes
nmcli c up ens160

# 关闭防火墙
systemctl stop firewalld

# 关闭selinux
setenforce 0

三、安装Redis

1. 下载源码包

bash 复制代码
# 下载地址:https://redis.io/downloads/
wget http://download.redis.io/releases/redis-8.6.2.tar.gz

2. 编译安装

bash 复制代码
# 安装C/C++编译工具链
dnf install -y gcc tcl gcc-c++ make

# 解压到/opt目录
tar -xvf redis-8.6.2.tar.gz -C /opt

# 编译安装
cd /opt/redis-8.6.2/
make && make install

3. 分发到其他节点

bash 复制代码
# 从Master节点复制到其他节点
scp -rp /opt/redis-8.6.2/ root@192.168.194.12:/opt
scp -rp /opt/redis-8.6.2/ root@192.168.194.13:/opt

编译完成后,主要文件位于src目录下:

  • redis-server:Redis服务器
  • redis-cli:Redis客户端

四、配置主从复制

1. 配置主节点(Master)

bash 复制代码
# 编辑配置文件
vim /etc/redis/master.conf

主要配置项:

conf 复制代码
# 第70行:绑定地址(取消注释并修改为0.0.0.0)
bind 0.0.0.0

# 第137行:守护进程模式
daemonize yes

# 第172行:指定日志文件目录
logfile /var/log/redis_master.log

# 第264行:指定数据目录
dir /var/lib/redis

# 第700行:开启AOF持久化
appendonly yes

# 关闭保护模式
protected-mode no

启动主节点Redis:

bash 复制代码
redis-server /etc/redis/master.conf

2. 配置从节点(Slave)

bash 复制代码
# 编辑slave节点的配置文件
vim /etc/redis/slave1.conf

主要配置项:

conf 复制代码
# 绑定地址
bind 0.0.0.0

# 守护进程模式
daemonize yes

# 日志文件
logfile /var/log/redis_slave1.log

# 数据目录
dir /var/lib/redis

# 第287行:指定主节点的IP和端口(取消注释)
replicaof 192.168.194.11 6379

# 开启AOF持久化
appendonly yes

# 关闭保护模式
protected-mode no

启动从节点Redis:

bash 复制代码
redis-server /etc/redis/slave1.conf

注意:slave1和slave2配置相同,只需要修改对应的日志文件。

bash 复制代码
# slave1的日志配置
logfile /var/log/redis_slave1.log

# slave2的日志配置
logfile /var/log/redis_slave2.log

五、验证主从复制

1. 查看主节点日志

bash 复制代码
# 在Master节点上查看日志
tail -f /var/log/redis_master.log

2. 查看复制状态

bash 复制代码
# 连接主节点
redis-cli

# 查看复制信息
127.0.0.1:6379> info replication

3. 测试数据同步

bash 复制代码
# 在主节点写入数据
127.0.0.1:6379> set name jock
OK

# 在从节点查看数据(自动同步)
127.0.0.1:6379> get name
"jock"

如果从节点能获取到主节点写入的数据,说明主从复制搭建成功!


六、常见问题

1. 从节点无法连接主节点

检查项:

  • 防火墙是否关闭
  • protected-mode 是否设置为 no
  • replicaof 配置是否正确
  • 网络是否互通

2. 数据不同步

检查项:

  • 主从节点的 requirepassmasterauth 是否匹配
  • AOF/RDB配置是否一致
  • 磁盘空间是否充足

3. 从节点只读

从节点默认是只读的,如需写入可使用:

bash 复制代码
127.0.0.1:6379> config set replica-read-only no
相关推荐
Dovis(誓平步青云)31 分钟前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
城管不管8 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头1068 小时前
向量数据库从相似度检索走向融合数据底座
数据库
今天AI了吗9 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
阿里巴巴P8资深技术专家10 小时前
Redis连接工具 —— Redis Manager
redis
CDN36010 小时前
CDN 缓存策略优化实操:出海业务提升缓存命中率,TTL、缓存 Key、刷新配置与踩坑总结
缓存·cdn加速·cdn防护·360cdn
lilian23311 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更11 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
保卫大狮兄12 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察12 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库