Linux 部署 Redis:一主一从 + Sentinel 完整实战

Linux 部署 Redis:一主一从 + Sentinel 完整实战

一、前言

本文记录 Linux 环境下 Redis 一主一从 + Sentinel 的完整部署过程,适合以下场景:

  • 学习 Redis 主从复制
  • 搭建 Redis 读写分离环境
  • 验证 Sentinel 自动故障切换
  • 作为线上部署前的基础演练文档

本文主要内容包括:

  • Linux 安装 Redis
  • 一主一从部署
  • 主从复制验证
  • Sentinel 部署
  • Sentinel 参数说明
  • 故障切换验证
  • 常见问题排查

二、环境说明

本文示例采用 5 台 Linux 机器,分别如下:

  • Redis Master:192.168.1.10
  • Redis Slave:192.168.1.11
  • Sentinel1:192.168.1.20
  • Sentinel2:192.168.1.21
  • Sentinel3:192.168.1.22

Redis 端口统一使用:

  • Redis:6379
  • Sentinel:26379

如果你机器数量不够,也可以把 Sentinel 部署到 Redis 节点上测试,但正式生产环境建议分开部署。


三、Redis 读写分离原理简介

Redis 的读写分离,本质上就是:

  • 写请求发到主节点
  • 读请求发到从节点
  • 主从之间通过复制保持数据同步

需要注意两点:

1)Redis 不会自动做业务读写路由

Redis 主从复制负责数据同步,但不会自动把你的读请求转发到从节点。

真正的"读主还是读从",通常由客户端代码、连接池或中间件实现。

2)主从复制不等于高可用

只有主从复制的话,主节点挂了以后,客户端仍然会连旧主。

Sentinel 才负责监控、故障发现和自动切主。


四、安装 Redis

这里以常见 Linux 环境为例,演示源码安装方式。

如果你已经通过包管理器安装好 Redis,可以跳过本节。

4.1 下载 Redis

bash 复制代码
cd /usr/local/src
wget https://download.redis.io/releases/redis-7.2.5.tar.gz
tar -zxvf redis-7.2.5.tar.gz
cd redis-7.2.5

4.2 编译安装

bash 复制代码
make
make install

安装完成后,常用命令一般会在 /usr/local/bin/ 下:

  • redis-server
  • redis-cli
  • redis-sentinel

验证:

bash 复制代码
redis-server -v
redis-cli -v

五、目录规划

建议先创建 Redis 运行所需目录。

5.1 主节点目录

在主节点机器 192.168.1.10 上执行:

bash 复制代码
mkdir -p /data/redis/6379
mkdir -p /etc/redis
mkdir -p /var/log/redis

5.2 从节点目录

在从节点机器 192.168.1.11 上执行:

bash 复制代码
mkdir -p /data/redis/6379
mkdir -p /etc/redis
mkdir -p /var/log/redis

5.3 Sentinel 目录

在三台 Sentinel 机器上都执行:

bash 复制代码
mkdir -p /etc/redis
mkdir -p /var/log/redis

六、部署 Redis 主节点

主节点机器:192.168.1.10

6.1 主节点配置文件

文件路径:

text 复制代码
/etc/redis/redis-6379.conf

配置内容如下:

conf 复制代码
bind 192.168.1.10 127.0.0.1
protected-mode yes
port 6379

daemonize yes
pidfile /var/run/redis_6379.pid

loglevel notice
logfile /var/log/redis/redis-6379.log

dir /data/redis/6379
dbfilename dump.rdb

appendonly no

save 900 1
save 300 10
save 60 10000

rdbcompression yes
rdbchecksum yes

6.2 参数说明

bind 192.168.1.10 127.0.0.1

绑定主节点内网 IP 和本地回环地址。

protected-mode yes

开启保护模式。生产环境建议保持开启。

port 6379

Redis 监听端口。

daemonize yes

后台运行。

pidfile /var/run/redis_6379.pid

保存进程 PID 文件。

loglevel notice

日志级别。

logfile /var/log/redis/redis-6379.log

Redis 日志文件。

dir /data/redis/6379

RDB 工作目录。

dbfilename dump.rdb

RDB 快照文件名。

appendonly no

关闭 AOF,仅使用 RDB。

save 900 1

900 秒内至少 1 次写入触发快照。

save 300 10

300 秒内至少 10 次写入触发快照。

save 60 10000

60 秒内至少 10000 次写入触发快照。

rdbcompression yes

开启 RDB 压缩。

rdbchecksum yes

开启 RDB 校验。


七、部署 Redis 从节点

从节点机器:192.168.1.11

7.1 从节点配置文件

文件路径:

text 复制代码
/etc/redis/redis-6379.conf

配置内容如下:

conf 复制代码
bind 192.168.1.11 127.0.0.1
protected-mode yes
port 6379

daemonize yes
pidfile /var/run/redis_6379.pid

loglevel notice
logfile /var/log/redis/redis-6379.log

dir /data/redis/6379
dbfilename dump.rdb

appendonly no

save 900 1
save 300 10
save 60 10000

rdbcompression yes
rdbchecksum yes

replicaof 192.168.1.10 6379
replica-read-only yes

7.2 关键参数说明

replicaof 192.168.1.10 6379

把当前 Redis 实例配置为 192.168.1.10:6379 的从节点。

replica-read-only yes

从节点只读,避免误写。


八、启动 Redis 主从

8.1 启动主节点

在主节点机器执行:

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

8.2 启动从节点

在从节点机器执行:

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

8.3 查看进程

分别在主从机器上执行:

bash 复制代码
ps -ef | grep redis

正常情况下可以看到 Redis 进程监听 6379 端口。


九、验证主从复制

9.1 查看主节点复制状态

在主节点机器执行:

bash 复制代码
redis-cli -h 192.168.1.10 -p 6379 INFO replication

正常时一般能看到:

text 复制代码
role:master
connected_slaves:1
slave0:ip=192.168.1.11,port=6379,state=online,offset=...

9.2 查看从节点复制状态

在从节点机器执行:

bash 复制代码
redis-cli -h 192.168.1.11 -p 6379 INFO replication

正常时一般能看到:

text 复制代码
role:slave
master_host:192.168.1.10
master_port:6379
master_link_status:up

9.3 测试数据同步

在主节点写入数据:

bash 复制代码
redis-cli -h 192.168.1.10 -p 6379

执行:

redis 复制代码
set user:name redis_test
get user:name

然后到从节点读取:

bash 复制代码
redis-cli -h 192.168.1.11 -p 6379

执行:

redis 复制代码
get user:name

如果能读到相同值,说明主从同步正常。


十、配置密码认证(可选但推荐)

如果你线上要提升安全性,建议配置密码认证。

10.1 主节点加密码

主节点配置增加:

conf 复制代码
requirepass 123456

10.2 从节点增加复制认证

从节点配置增加:

conf 复制代码
masterauth 123456

从节点完整关键部分如下:

conf 复制代码
replicaof 192.168.1.10 6379
masterauth 123456
replica-read-only yes

10.3 连接时带密码

连接主节点:

bash 复制代码
redis-cli -h 192.168.1.10 -p 6379 -a 123456

连接从节点:

bash 复制代码
redis-cli -h 192.168.1.11 -p 6379 -a 123456

十一、Sentinel 是什么

Redis 主从复制只能同步数据,不能自动切主。

当主节点挂掉时,没有 Sentinel 的情况下,你通常需要手动做这些事:

  1. 找到从节点
  2. 提升从节点为新主
  3. 修改应用连接地址
  4. 修改其他从节点的复制关系

而 Sentinel 的作用就是:

  • 监控主从实例
  • 发现主节点故障
  • 自动选举新主
  • 自动故障转移
  • 向客户端提供当前主节点地址

十二、Sentinel 部署规划

这里使用 3 个 Sentinel:

  • 192.168.1.20:26379
  • 192.168.1.21:26379
  • 192.168.1.22:26379

原因很简单:

  • Sentinel 是分布式投票机制
  • 至少 3 个才有多数派意义
  • 一个或两个 Sentinel 都不够稳妥

十三、Sentinel 配置文件

三台 Sentinel 的配置内容基本一致,只需要分别放到各自机器即可。

文件路径:

text 复制代码
/etc/redis/sentinel-26379.conf

配置内容如下:

conf 复制代码
port 26379
bind 0.0.0.0
protected-mode yes

daemonize yes
pidfile /var/run/redis-sentinel-26379.pid
logfile /var/log/redis/sentinel-26379.log

sentinel monitor mymaster 192.168.1.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

如果主节点设置了密码,再额外加入:

conf 复制代码
sentinel auth-pass mymaster 123456

十四、Sentinel 参数说明

14.1 sentinel monitor mymaster 192.168.1.10 6379 2

含义如下:

  • mymaster:主节点逻辑名称
  • 192.168.1.10 6379:当前主节点地址
  • 2:法定票数 quorum

表示至少需要足够多的 Sentinel 共同确认主节点异常,才能继续后续流程。

14.2 sentinel down-after-milliseconds mymaster 5000

表示 Sentinel 连续 5000 毫秒无法正常联系主节点时,将其标记为主观下线。

14.3 sentinel failover-timeout mymaster 60000

故障转移相关的超时时间窗口。

14.4 sentinel parallel-syncs mymaster 1

故障转移后,允许多少个从节点同时重新同步新主。

值越小,对新主冲击越小,但同步完成速度也越慢。

14.5 sentinel auth-pass mymaster 123456

如果 Redis 有密码,Sentinel 连接 Redis 也必须认证。


十五、启动 Sentinel

在 3 台 Sentinel 机器上分别执行:

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

如果你的安装里有单独命令,也可以使用:

bash 复制代码
redis-sentinel /etc/redis/sentinel-26379.conf

十六、验证 Sentinel 是否正常

16.1 查看进程

在 Sentinel 机器上执行:

bash 复制代码
ps -ef | grep redis

16.2 连接 Sentinel

bash 复制代码
redis-cli -p 26379

16.3 查看当前主节点地址

redis 复制代码
SENTINEL get-master-addr-by-name mymaster

16.4 查看所有主节点信息

redis 复制代码
SENTINEL masters

16.5 查看某个主节点下的从节点

redis 复制代码
SENTINEL replicas mymaster

16.6 查看监控当前主节点的 Sentinel

redis 复制代码
SENTINEL sentinels mymaster

十七、故障切换验证

这是整套部署中最重要的一步。

17.1 先确认当前状态正常

确认以下都正常:

  • 主节点运行正常
  • 从节点运行正常
  • 3 个 Sentinel 都在运行
  • SENTINEL masters 能看到主节点

17.2 模拟主节点宕机

在主节点机器执行:

bash 复制代码
redis-cli -h 192.168.1.10 -p 6379 shutdown

或者直接停服务。

17.3 观察 Sentinel 日志

在任一 Sentinel 机器查看日志:

bash 复制代码
tail -f /var/log/redis/sentinel-26379.log

通常会看到类似流程:

  • 标记主节点下线
  • 多个 Sentinel 协同确认
  • 选举 leader Sentinel
  • 提升从节点为新主
  • 修改复制拓扑

17.4 再次查询主节点地址

进入 Sentinel:

bash 复制代码
redis-cli -p 26379

执行:

redis 复制代码
SENTINEL get-master-addr-by-name mymaster

如果返回变成:

text 复制代码
192.168.1.11
6379

说明原从节点已经被提升为新主。

17.5 验证新主角色

在原从节点机器执行:

bash 复制代码
redis-cli -h 192.168.1.11 -p 6379 INFO replication

如果看到:

text 复制代码
role:master

说明故障切换成功。


十八、systemd 配置(可选但推荐)

正式环境建议用 systemd 管理 Redis 服务。

18.1 Redis 服务文件

文件路径:

text 复制代码
/etc/systemd/system/redis-6379.service

内容如下:

ini 复制代码
[Unit]
Description=Redis 6379
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis/redis-6379.conf
ExecStop=/usr/local/bin/redis-cli -p 6379 shutdown
PIDFile=/var/run/redis_6379.pid
Restart=always

[Install]
WantedBy=multi-user.target

18.2 Sentinel 服务文件

文件路径:

text 复制代码
/etc/systemd/system/redis-sentinel-26379.service

内容如下:

ini 复制代码
[Unit]
Description=Redis Sentinel 26379
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis/sentinel-26379.conf --sentinel
ExecStop=/usr/bin/pkill -f "redis-server.*sentinel"
PIDFile=/var/run/redis-sentinel-26379.pid
Restart=always

[Install]
WantedBy=multi-user.target

18.3 重新加载并启动

bash 复制代码
systemctl daemon-reload
systemctl enable redis-6379
systemctl start redis-6379

systemctl enable redis-sentinel-26379
systemctl start redis-sentinel-26379

18.4 查看状态

bash 复制代码
systemctl status redis-6379
systemctl status redis-sentinel-26379

十九、客户端如何实现真正的读写分离

这里必须强调:

19.1 Redis 不会自动转发读请求

Redis 只做复制,不做应用请求路由。

19.2 客户端需要自己区分

一般做法是:

  • 写请求连主节点
  • 读请求连从节点
  • Sentinel 用于发现当前主节点地址

19.3 建议的线上规则

建议至少这样区分:

  • 强一致接口:只读主
  • 普通缓存接口:读从
  • 写后马上读的接口:短时间强制读主
  • 普通写请求:写主

因为 Redis 主从复制默认是异步的,从节点可能存在短暂延迟。


二十、常见问题排查

20.1 从节点一直连不上主节点

检查项:

  • replicaof 地址是否正确
  • 主节点是否已启动
  • 网络是否互通
  • 防火墙是否放行 6379
  • 主节点是否配置了密码而从节点没写 masterauth

20.2 从节点不能写

这是正常现象,因为配置了:

conf 复制代码
replica-read-only yes

20.3 Sentinel 启动了但没有切主

排查以下内容:

  • Sentinel 数量不够
  • monitor 配置错了
  • quorum 设置过大
  • Sentinel 到 Redis 网络不通
  • Redis 有密码但没写 auth-pass
  • 主节点只是短暂抖动,没有达到 down-after-milliseconds

20.4 主从同步慢

常见原因:

  • 网络延迟高
  • 首次全量同步数据量大
  • 主节点压力高
  • 磁盘写入性能不足

20.5 同机部署可不可以

可以,但只适合:

  • 学习
  • 测试
  • 验证配置
  • 本地演练

不适合生产高可用,因为宿主机一挂,主从和 Sentinel 可能一起挂。


二十一、线上部署建议

如果是一主一从 + Sentinel 的最小可用架构,线上建议至少做到:

  • 主从分开机器
  • Sentinel 至少 3 个
  • Redis 开启认证
  • 只开放内网访问
  • 配置日志
  • 做复制监控和延迟监控
  • 业务上区分强一致读和普通读
  • 不要把关键强一致数据完全依赖在从节点读取上

二十二、总结

本文完整整理了 Linux 下 Redis 一主一从 + Sentinel 的部署过程,包含:

  • Redis 安装
  • 主节点配置
  • 从节点配置
  • 主从复制验证
  • Sentinel 配置
  • Sentinel 启动与验证
  • 故障切换测试
  • systemd 服务配置
  • 常见问题排查

最后总结一句:

  • 主从复制 解决读扩展和数据同步
  • Sentinel 解决高可用和自动切主
  • 客户端 负责真正的读写分离路由
  • 异步复制 决定了从节点天然存在短暂延迟

如果后续数据量、写入压力或单机容量继续增加,下一步就应该考虑 Redis Cluster,而不是继续只靠一主一从扩展。

相关推荐
孫治AllenSun2 小时前
【Canal】监听mysql的binlog日志,同步数据到redis和es
redis·mysql·elasticsearch
y = xⁿ2 小时前
【黑马店铺二刷day02】将店铺查询信息添加到Redis中的业务操作
数据库·redis·缓存
从入门到放弃-咖啡豆2 小时前
Alibaba Cloud Linux 部署.NET 8 环境 项目运行
linux·服务器·.net·.net core
wongHome2 小时前
Ubuntu的Anaconda环境如何安装安装rasterio
linux·ubuntu
骆驼10242 小时前
Linux PAM(Pluggable Authentication Modules)完整指南——从入门原理到进阶机制,再到实战配置
linux·安全·pam
圥忈&&丅佽&&扗虖2 小时前
ubuntu 安装git
linux·git·ubuntu
Mr_sun.2 小时前
Mac中通过PD安装Rockly、Centos版本的linux并设置静态ip与安装Docker
linux·macos·centos
爱装代码的小瓶子2 小时前
【c++与Linux进阶】线程篇 -互斥锁
linux·c++·算法
ren049182 小时前
Linux基础
linux·运维·服务器