Redis作为当前最流行的开源内存数据库,凭借其超高的读写性能和丰富的数据结构支持,已经成为互联网应用中缓存、会话存储、消息队列等场景的首选方案。在Linux环境下运行Redis具有天然优势——稳定的内核调度、高效的epoll事件机制、以及完善的系统工具链支持,这使得超过90%的生产环境选择将Redis部署在Linux服务器上。
我在过去五年的运维实践中,处理过数百次Redis部署需求,发现不同Linux发行版的包管理机制和系统库版本差异,会导致Redis安装过程中出现各种"坑点"。本文将基于CentOS、Ubuntu两大主流发行版,详解源码编译、软件包安装、容器化部署三种典型方案,并附上实际环境中的性能调优参数。
在安装Redis前需要确认:
df -h检查)bash复制echo never > /sys/kernel/mm/transparent_hugepage/enabled
不同发行版的基础依赖有所差异:
CentOS/RHEL系列:
bash复制yum install -y gcc make tcl systemd-devel
Ubuntu/Debian系列:
bash复制apt-get update && apt-get install -y build-essential tcl libsystemd-dev
注意:生产环境建议禁用SWAP分区以避免内存交换导致的性能下降,可通过
swapoff -a临时关闭
bash复制wget https://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make BUILD_TLS=yes USE_SYSTEMD=yes -j$(nproc)
关键编译参数说明:
BUILD_TLS=yes:启用TLS加密支持USE_SYSTEMD=yes:生成systemd服务文件-j$(nproc):使用全部CPU核心加速编译bash复制make install PREFIX=/usr/local/redis
cp redis.conf /etc/redis.conf
sed -i 's/supervised no/supervised systemd/g' /etc/redis.conf
典型配置调优项:
ini复制# 内存限制(根据实际情况调整)
maxmemory 4gb
maxmemory-policy allkeys-lru
# 持久化策略
appendonly yes
appendfsync everysec
# 安全设置
requirepass YourStrongPassword
CentOS/RHEL 7+:
bash复制yum install -y epel-release
yum install -y redis
Ubuntu 18.04+:
bash复制apt-get install -y redis-server
通过包管理器安装的Redis通常不是最新版,可通过以下方式获取新版:
Ubuntu官方PPA:
bash复制add-apt-repository ppa:redislabs/redis
apt-get update
apt-get install redis
RHEL/CentOS Remi仓库:
bash复制yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum --enablerepo=remi install redis
bash复制docker run --name redis \
-p 6379:6379 \
-v /data/redis:/data \
-d redis:alpine \
redis-server --appendonly yes
yaml复制# docker-compose.yml
version: '3'
services:
redis:
image: redis:6.2
container_name: redis
ports:
- "6379:6379"
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data
command: redis-server /usr/local/etc/redis/redis.conf
restart: always
sysctls:
- net.core.somaxconn=1024
ulimits:
nofile:
soft: 65536
hard: 65536
bash复制# 增加连接队列长度
sysctl -w net.core.somaxconn=2048
# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 内存过量使用(容器环境需要)
sysctl -w vm.overcommit_memory=1
ini复制# 网络配置
tcp-backlog 2048
timeout 0
tcp-keepalive 300
# 内存管理
maxmemory 6gb
maxmemory-policy volatile-lru
# 持久化优化
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
ini复制# 禁用高危命令
rename-command FLUSHDB ""
rename-command CONFIG ""
# 启用ACL(Redis 6+)
aclfile /etc/redis/users.acl
bash复制# 仅监听内网IP
bind 10.0.0.100
# 使用防火墙规则
iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/24 -j ACCEPT
bash复制# 实时状态
redis-cli info
# 内存分析
redis-cli --memkeys
# 慢查询日志
redis-cli slowlog get 10
yaml复制scrape_configs:
- job_name: redis
static_configs:
- targets: ['redis:9121']
metrics_path: /scrape
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: redis_exporter:9121
问题1:启动时报错"Cannot allocate memory"
/proc/sys/vm/overcommit_memory值echo 1 > /proc/sys/vm/overcommit_memory问题2:客户端连接超时
tcp-backlog与net.core.somaxconn的匹配关系问题3:持久化失败
df -hgrep -i "Background saving error" /var/log/redis/redis.logbash复制# 实时监控日志
tail -f /var/log/redis/redis.log | grep -E "error|fail|warn"
# 统计慢查询
awk '/slow log/ {print $NF}' redis.log | sort | uniq -c | sort -nr