CentOS 7 部署 Redis 6 哨兵高可用集群
环境准备与 Redis 安装
在 CentOS 7 系统上,Redis 6 的编译需要较高版本的 GCC 支持。首先确保构建工具已安装:
yum -y install gcc gcc-c++ make tcl centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 启用新版本编译器
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
下载 Redis 源码包并进行编译安装:
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make && make install
为了便于管理,建议将 Redis 核心二进制文件移动至自定义目录,并设置 redis.conf 中的 daemonize yes 以支持后台运行。
主从架构搭建
主从复制通过在从节点配置中添加 replicaof <master-ip> <master-port> 实现。当从节点启动时,会与主节点建立连接:
- 全量同步: 首次连接时,主节点执行 BGSAVE 生成 RDB,并利用复制缓冲区记录同步期间的新增命令。
- 增量同步: 从节点断开重连后,利用
repl_backlog_buffer中的偏移量 (offset) 进行数据补齐。
哨兵机制 (Sentinel)
哨兵集群负责监控主节点状态,并在故障时执行自动切换:
- 主观下线 (sdown): 单个哨兵监测到节点心跳超时。
- 客观下线 (odown): 超过 quorum 配置数量的哨兵认定节点故障。
哨兵配置文件示例 (sentinel.conf):
port 27001
sentinel monitor my-redis-cluster 192.168.1.10 6379 2
sentinel down-after-milliseconds my-redis-cluster 5000
sentinel failover-timeout my-redis-cluster 60000
Spring Boot 集成
使用 Spring Data Redis 连接哨兵集群,需在配置类中定义读取偏好策略:
@Configuration
public class RedisConfig {
@Bean
public LettuceClientConfigurationBuilderCustomizer clientCustomizer() {
// 配置优先从从节点读取,实现读写分离
return builder -> builder.readFrom(ReadFrom.REPLICA_PREFERRED);
}
}
应用配置文件 (application.yml):
spring:
redis:
sentinel:
master: my-redis-cluster
nodes: 192.168.1.10:27001,192.168.1.10:27002,192.168.1.10:27003
数据一致性优化
为了缓解脑裂导致的数据丢失,可以在主节点配置文件中添加限制策略:
min-replicas-to-write 1:当从节点同步数小于 1 时,禁止写入。min-slaves-max-lag 10:限制主从同步 ACK 延迟,超时则拒绝写入请求。