1. Redis 7 + ACL 部署方案全解析
Redis作为当前最流行的内存数据库之一,其7.0版本带来了诸多重要改进。本文将基于Redis 7.4.7版本,详细讲解四种典型部署模式的搭建方法与核心配置要点,包括单节点、主从复制、哨兵模式和集群模式。每种方案都经过生产环境验证,可直接用于实际项目部署。
特别说明:本文所有配置示例均基于CentOS 7环境,但核心原理适用于所有Linux发行版。实操时请根据实际网络环境和硬件配置调整参数。
2. 基础环境准备
2.1 Redis 7.4.7 源码安装
Redis官方推荐通过源码编译安装,确保获得最佳性能。以下是完整安装流程:
bash复制# 创建软件目录
mkdir -p /usr/local/soft
cd /usr/local/soft
# 下载并解压源码包
wget https://download.redis.io/releases/redis-7.4.7.tar.gz
tar -zxvf redis-7.4.7.tar.gz
cd redis-7.4.7
# 安装编译依赖
sudo yum install -y gcc gcc-c++ systemd-devel
# 编译安装(建议使用jemalloc内存分配器)
make BUILD_TLS=yes USE_SYSTEMD=yes MALLOC=libc
make install PREFIX=$(pwd)/build_dir
关键编译选项说明:
BUILD_TLS=yes:启用TLS支持USE_SYSTEMD=yes:集成systemd管理MALLOC=libc:使用系统默认内存分配器(生产环境建议用jemalloc)
2.2 环境变量配置
将Redis命令添加到系统PATH:
bash复制echo 'export PATH=$PATH:/usr/local/soft/redis-7.4.7/build_dir/bin' >> /etc/bashrc
source /etc/bashrc
验证安装:
bash复制redis-cli --version
# 预期输出:redis-cli 7.4.7
3. 单节点部署方案
3.1 核心配置文件解析
创建自定义配置文件redis-6379.conf,关键配置如下:
conf复制# 网络配置
port 6379
daemonize yes
protected-mode yes
tcp-keepalive 60
# 持久化配置
dir /data/redis/6379
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
# 内存管理
maxmemory 4gb
maxmemory-policy allkeys-lru
# 性能优化
io-threads 4
io-threads-do-reads yes
# ACL安全
aclfile /etc/redis/users.acl
3.2 ACL访问控制
创建/etc/redis/users.acl文件:
conf复制user default off
user admin on ~* &* +@all >${ADMIN_PASSWORD}
user appuser on ~app:* +@read +@write >${APP_PASSWORD}
安全建议:
- 禁用默认用户
- 为不同应用创建独立账户
- 使用强密码(建议16位以上混合字符)
3.3 服务管理命令
启动服务:
bash复制redis-server /path/to/redis-6379.conf
连接客户端:
bash复制redis-cli -u redis://admin:password@127.0.0.1:6379
安全关闭:
bash复制redis-cli -u redis://admin:password@127.0.0.1:6379 shutdown nosave
4. 主从复制部署
4.1 主节点配置
主节点无需特殊配置,保持单节点配置即可。确保以下参数正确:
conf复制# 主节点需开启持久化
appendonly yes
4.2 从节点配置
在从节点的redis-6379.conf中添加:
conf复制replicaof 10.250.0.235 6379
replica-read-only yes
masteruser admin
masterauth ${MASTER_PASSWORD}
4.3 主从状态验证
在主节点执行:
bash复制redis-cli info replication
# 查看connected_slaves计数
关键指标说明:
master_link_status:up:连接正常slave_repl_offset:与主节点的同步偏移量master_repl_offset:主节点写入偏移量
5. 哨兵模式部署
5.1 哨兵节点配置
创建sentinel.conf:
conf复制port 26379
daemonize yes
sentinel monitor mymaster 10.250.0.235 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster ${MASTER_PASSWORD}
5.2 仲裁节点数量计算
推荐公式:
code复制法定人数 = floor(哨兵总数/2) + 1
例如3个哨兵时设置为2,确保脑裂时能做出决策。
5.3 故障转移过程
- 主观下线:单个哨兵检测到主节点不可用
- 客观下线:多个哨兵确认主节点故障
- 选举领导者:Raft协议选主
- 故障转移:提升从节点为新主节点
6. 集群模式部署
6.1 集群节点配置
每个节点的redis-6379.conf需包含:
conf复制cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
6.2 集群创建命令
bash复制redis-cli --cluster create \
10.250.0.235:6379 \
10.250.0.58:6379 \
10.250.0.36:6379 \
10.250.0.71:6379 \
10.250.0.131:6379 \
10.250.0.63:6379 \
--cluster-replicas 1 \
--cluster-yes
6.3 集群运维命令
查看集群状态:
bash复制redis-cli --cluster check 10.250.0.235:6379
槽位迁移:
bash复制redis-cli --cluster reshard 10.250.0.235:6379
节点扩容:
bash复制redis-cli --cluster add-node \
新节点IP:端口 现有节点IP:端口 \
--cluster-slave --cluster-master-id 主节点ID
7. 性能优化建议
7.1 内存管理
- 使用
OBJECT ENCODING key检查数据编码 - 小数据使用ziplist编码
- 设置合理的maxmemory和淘汰策略
7.2 网络优化
conf复制# 内核参数
net.core.somaxconn = 1024
vm.overcommit_memory = 1
# Redis配置
tcp-backlog 511
repl-backlog-size 128mb
7.3 持久化权衡
| 方案 | RDB | AOF | 混合 |
|---|---|---|---|
| 恢复速度 | 快 | 慢 | 快 |
| 数据安全 | 差 | 好 | 好 |
| 性能影响 | 高 | 中 | 中 |
8. 常见问题排查
8.1 启动失败排查
- 检查日志文件:
bash复制grep -i error /var/log/redis/6379.log
- 常见错误:
Can't bind to address:端口冲突NOAUTH Authentication required:ACL配置错误MISCONF Redis is configured to save RDB snapshots:磁盘空间不足
8.2 性能问题诊断
慢查询分析:
bash复制redis-cli slowlog get 10
内存分析:
bash复制redis-cli --bigkeys
redis-cli memory stats
8.3 集群脑裂处理
- 检测方法:
bash复制redis-cli info replication | grep master_link_status
- 解决方案:
- 设置
min-replicas-to-write 1 - 配置合理的
cluster-node-timeout - 人工介入确认数据一致性
9. 部署方案选型指南
| 场景 | 单节点 | 主从 | 哨兵 | 集群 |
|---|---|---|---|---|
| 数据量 | <5GB | <10GB | <50GB | >50GB |
| QPS需求 | <5万 | <10万 | <20万 | >20万 |
| 可用性要求 | 低 | 中 | 高 | 极高 |
| 运维复杂度 | 低 | 中 | 中 | 高 |
生产环境建议:中小规模应用使用哨兵模式,大规模服务采用集群方案。测试环境可使用单节点或主从复制。