环境规划

  • 主节点 (Master):192.168.1.2 (端口 6379)
  • 从节点 (Slave):192.168.1.3 (端口 6379)
  • 系统版本:CentOS 7.9
  • Redis 版本:3.2.12

第一步:两台机器都安装 Redis

192.168.1.2192.168.1.3 上分别执行:

# 1. 安装 EPEL 源(Redis 在 EPEL 仓库中)
yum install -y epel-release

# 2. 安装 Redis
yum install -y redis

# 3. 确认版本(应输出 Redis server v=3.2.12)
redis-server --version

第二步:配置主节点 (192.168.1.2)

编辑主节点配置文件:

vi /etc/redis.conf

修改或确认以下配置项:

# 1. 允许外部 IP 连接(生产环境建议绑定内网IP,如 bind 192.168.1.2)
bind 0.0.0.0

# 2. 端口
port 6379

# 3. 后台运行
daemonize yes

# 4. 设置密码(强烈建议,假设密码为 Admin@123456)
requirepass Admin@123456

# 5. 开启 AOF 持久化(防止主节点宕机丢数据)
appendonly yes
appendfsync everysec

保存退出后,重启主节点服务:

systemctl restart redis
systemctl enable redis

第三步:配置从节点 (192.168.1.3)

编辑从节点配置文件:

vi /etc/redis.conf

修改或确认以下配置项:

# 1. 允许外部 IP 连接
bind 0.0.0.0

# 2. 端口
port 6379

# 3. 后台运行
daemonize yes

# 4. 【核心】指定主节点 IP 和端口(Redis 3.x 使用 slaveof)
slaveof 192.168.1.2 6379

# 5. 【核心】主节点密码(必须与主节点 requirepass 一致)
masterauth Admin@123456

# 6. 从节点只读(默认开启,防止误写入)
slave-read-only yes

保存退出后,重启从节点服务:

systemctl restart redis
systemctl enable redis

第四步:配置防火墙

由于主从复制是从节点主动连接主节点,所以只需要在主节点开放 6379 端口

192.168.1.2 (主) 上执行:

# 仅允许从节点访问 6379 端口(更安全)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.3" port port="6379" protocol="tcp" accept'
firewall-cmd --reload

(注:192.168.1.3 从节点不需要开放 6379 入站端口)


第五步:验证主从状态

1. 检查主节点状态

192.168.1.2 上执行:

redis-cli -a Admin@123456 info replication

正常输出应包含:

role:master
connected_slaves:1
slave0:ip=192.168.1.3,port=6379,state=online,offset=xxx,lag=0

2. 检查从节点状态

192.168.1.3 上执行:

redis-cli info replication

正常输出应包含:

role:slave
master_host:192.168.1.2
master_port:6379
master_link_status:up

第六步:测试数据同步

主节点 (192.168.1.2) 写入数据:

redis-cli -a Admin@123456 set test_key "Hello Master"

从节点 (192.168.1.3) 读取数据:

redis-cli get test_key

如果返回 "Hello Master",说明主从配置完全成功!


常见排错指南

如果 master_link_status:down,请依次检查:

  1. 主节点防火墙是否放行了从节点 IP。
  2. masterauth 密码是否与主节点的 requirepass 完全一致。
  3. 主节点的 bind 是否写成了 127.0.0.1(必须改为 0.0.0.0 或具体内网 IP)。
  4. 查看从节点日志:tail -f /var/log/redis/redis.log,通常会有明确的连接拒绝或密码错误提示。