数据库是应用系统的核心资产之一,其稳定性和可靠性至关重要。在诸多数据库与中间件中,Redis 凭借其高性能的内存读写能力被广泛使用。为了提升数据的可用性和读性能,搭建主从复制集群是一种常见的解决方案。本文将详细介绍如何基于两台服务器,从临时测试到永久配置,一步步搭建并验证一个 Redis 主从集群。

临时测试搭建
首先,我们准备两台已独立运行 Redis 服务的服务器。搭建的第一步是确保网络连通性,修改 Redis 配置文件,使其监听正确的接口。
- 分别修改两台服务器上的 Redis 配置文件:
vi /etc/redis.conf
找到 bind 配置项,将其修改为 0.0.0.0 或本机的具体 IP 地址,以确保可以接受来自其他服务器的连接。
bind 0.0.0.0
- 修改配置后,重启两台服务器的 Redis 服务使配置生效。
此时,两台 Redis 实例均处于独立运行状态。我们可以通过 redis-cli 连接后执行 info replication 命令查看复制状态,初始状态下,所有节点默认都是 master 角色,即可读可写。
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
接下来,选定其中一台作为从节点(Slave)。在其 redis-cli 命令行中,执行 SLAVEOF 命令,指定主节点(Master)的 IP 地址和端口。
SLAVEOF <master-ip> <master-port>
命令执行成功后,再次在从节点查询复制状态,可以发现其角色已从 master 转变为 slave,并且显示了主节点的连接信息。
# Replication
role:slave
master_host:192.168.31.195
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:99
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
同时,在主节点查询状态,可以看到已成功连接一个从节点。
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.31.196,port=6379,state=online,offset=141,lag=0
master_repl_offset:141
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:140
至此,一个临时的主从关系已经建立。但这种方式在服务重启后会失效,适用于快速测试场景。
永久性配置搭建
为了实现稳定的主从架构,我们需要通过修改配置文件的方式,使主从关系在服务重启后依然保持。
主节点 (Master) 配置
在主服务器的 redis.conf 配置文件中,确保以下核心配置项正确设置。以下是一个参考配置片段:
# 网络绑定 - 允许所有IP或指定IP
bind 0.0.0.0
# 端口
port 6379
# 关闭保护模式(允许外部连接)
protected-mode no
# 启用守护进程
daemonize yes
# 密码设置(可选但建议)
requirepass RedisMaster@2024
# 持久化设置
save 900 1
save 300 10
save 60 10000
# 日志文件
logfile "/var/log/redis/redis-server.log"
# 数据目录
dir /var/lib/redis
# 最大内存
maxmemory 1gb
maxmemory-policy allkeys-lru
# 主从相关优化
repl-backlog-size 256mb
repl-timeout 60
min-slaves-to-write 1
从节点 (Slave) 配置
在从服务器的 redis.conf 配置文件中,除了常规配置,关键是指定主节点的信息。注意不同 Redis 版本的命令差异:
# 网络绑定
bind 0.0.0.0
# 端口(可以相同或不同)
port 6379
# 关闭保护模式
protected-mode no
# 守护进程
daemonize yes
# ========== 主从配置核心部分 ==========
# Redis 5.0+ 使用 replicaof
#replicaof 192.168.31.195 6379
# Redis 4.0及以下使用 slaveof
slaveof 192.168.31.195 6379
# 如果主节点设置了密码,此处需配置
masterauth RedisMaster@2024
# 从节点只读
slave-read-only yes
# 从节点数据目录
dir /var/lib/redis
# 日志
logfile "/var/log/redis/redis-server.log"
# 复制相关优化
repl-diskless-sync no
repl-backlog-size 256mb
repl-timeout 60
配置完成后,分别重启主从节点的 Redis 服务。服务启动后,主从集群即永久生效,除非手动修改配置变更主从关系。
功能验证
配置永久生效后,可以验证主从读写分离的特性。在从节点尝试执行写操作,将会收到错误提示,这说明从节点已成功设置为只读模式。
[root@localhost ~]# redis-cli
127.0.0.1:6379> set a 1
(error) READONLY You can't write against a read only slave.
127.0.0.1:6379>
通过以上步骤,我们完成了一个基于两台服务器的 Redis 主从集群搭建。这种架构不仅实现了数据的冗余备份,还通过读写分离提升了系统的整体读吞吐量,是构建高可用服务的基础。在实际生产环境中,还可以在此基础上进一步配置哨兵(Sentinel)来实现自动故障转移。如果你想深入探讨更多关于分布式系统与高可用架构的话题,欢迎在 云栈社区 交流分享。