Files
notes/resource/组件/Anolis 系统 Redis 安装.md
Docker7530 7ab924d668 1774110743
2026-03-22 00:32:26 +08:00

788 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Redis 8.6.1 标准安装文档
适用系统:**Anolis OS 8.6 x86_64**
---
# 1. 安装规划
本安装文档采用如下标准目录:
| 项目 | 路径 |
| ---------- | ------------------------ |
| 安装包目录 | `/usr/local/src` |
| Redis 安装目录 | `/usr/local/redis-8.6.1` |
| 软链接 | `/usr/local/redis` |
| 配置目录 | `/etc/redis` |
| 数据目录 | `/data/redis` |
| 日志目录 | `/var/log/redis` |
| 运行用户 | `redis` |
| 服务名 | `redis` |
| 监听端口 | `6379` |
---
# 2. 前置准备
## 2.1 切换 root 用户
```bash
sudo -i
```
## 2.2 关闭或放通防火墙端口(如有需要)
如果 Redis 仅本机访问,可以不开放 6379。
若需要远程访问:
```bash
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
```
查看:
```bash
firewall-cmd --list-ports
```
---
# 3. 安装编译依赖
Anolis OS 8.6 与 RHEL/CentOS 8 系兼容,可使用 `dnf`
```bash
dnf -y install gcc gcc-c++ make tar wget perl systemd-devel
```
建议再安装常用工具:
```bash
dnf -y install vim net-tools lsof
```
验证 gcc
```bash
gcc --version
make --version
```
---
# 4. 上传并解压安装包
假设你已经将 `redis-8.6.1.tar.gz` 上传到 `/usr/local/src/`
```bash
cd /usr/local/src
ls -lh redis-8.6.1.tar.gz
```
解压:
```bash
tar -xzf redis-8.6.1.tar.gz
cd redis-8.6.1
```
---
# 5. 编译 Redis
执行编译:
```bash
make -j$(nproc)
```
安装到指定目录:
```bash
make PREFIX=/usr/local/redis-8.6.1 install
```
创建软链接:
```bash
ln -sfn /usr/local/redis-8.6.1 /usr/local/redis
```
验证:
```bash
/usr/local/redis/bin/redis-server -v
/usr/local/redis/bin/redis-cli -v
```
---
# 6. 创建运行用户和目录
## 6.1 创建 redis 用户
```bash
id redis >/dev/null 2>&1 || useradd -r -s /sbin/nologin redis
```
## 6.2 创建配置、数据、日志目录
```bash
mkdir -p /etc/redis
mkdir -p /data/redis
mkdir -p /var/log/redis
```
## 6.3 设置权限
```bash
chown -R redis:redis /data/redis
chown -R redis:redis /var/log/redis
```
---
# 7. 生成 Redis 配置文件
从源码目录复制默认配置:
```bash
cp /usr/local/src/redis-8.6.1/redis.conf /etc/redis/redis.conf
```
备份一份:
```bash
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
```
---
# 8. 修改 Redis 配置
编辑配置文件:
```bash
vim /etc/redis/redis.conf
```
建议修改为以下关键项。
---
## 8.1 基础配置
找到并修改:
```conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
```
说明:
- `bind 0.0.0.0`:允许所有地址访问
如果你只允许本机访问,建议改成:
```conf
bind 127.0.0.1
```
- `protected-mode yes`:建议保持开启
- `daemonize no`:使用 systemd 启动时必须为 `no`
- `supervised systemd`:推荐 systemd 管理
---
## 8.2 数据目录配置
修改:
```conf
dir /data/redis
dbfilename dump.rdb
```
---
## 8.3 设置密码
### 方法一:兼容常见方式,使用 `requirepass`
在配置文件中加入或修改:
```conf
requirepass 5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1
```
> 这是你最关心的“设置密码”方式,客户端连接时必须认证。
---
## 8.4 建议配置 master 默认认证密码
有些版本推荐 ACL 方式,生产上也可以同时设置默认用户密码:
```conf
aclfile /etc/redis/users.acl
```
然后创建 ACL 文件:
```bash
cat >/etc/redis/users.acl <<'EOF'
user default on >Redis@2025#Strong ~* &* +@all
EOF
```
设置权限:
```bash
chown redis:redis /etc/redis/users.acl
chmod 640 /etc/redis/users.acl
```
> 如果你使用了 ACL 文件,推荐**不要同时混乱使用多套密码策略**。
> 对于标准简单部署:
> - **只用 `requirepass`** 就够了
> - 如果你明确要 ACL 管理,就用 `aclfile`
---
## 8.5 持久化建议
### RDB 快照
建议保留:
```conf
save 900 1
save 300 10
save 60 10000
```
### AOF
建议开启:
```conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
```
---
## 8.6 内存策略建议
根据你的机器规格(8 vCPU,通常中小型实例),如果 Redis 不是独占整机,建议先限制最大内存。
例如:
```conf
maxmemory 2gb
maxmemory-policy allkeys-lru
```
> 如果这台机器专门跑 Redis,可按实际内存再调整。
> 你没有提供内存大小,所以文档里给一个稳妥示例值。
---
# 9. 配置文件示例(可直接替换)
下面是一份可直接使用的 `/etc/redis/redis.conf` 核心示例:
```conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
dir /data/redis
dbfilename dump.rdb
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
requirepass Redis@2025#Strong
maxmemory 2gb
maxmemory-policy allkeys-lru
```
> 请把密码 `Redis@2025#Strong` 改成你自己的强密码。
---
# 10. 配置 systemd 服务
创建 systemd 服务文件:
```bash
cat >/etc/systemd/system/redis.service <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -a '5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1' shutdown
Type=notify
TimeoutStopSec=30
Restart=always
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
```
> 注意:这里 `ExecStop` 中的密码要和 `redis.conf` 的 `requirepass` 一致。
> 如果你修改了密码,这里也要同步修改。
---
# 11. 系统内核参数优化
生产环境建议设置 `vm.overcommit_memory`。
临时生效:
```bash
sysctl vm.overcommit_memory=1
```
永久生效:
```bash
echo 'vm.overcommit_memory = 1' >/etc/sysctl.d/99-redis.conf
sysctl --system
```
关闭透明大页(建议):
临时关闭:
```bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
```
如需开机自动关闭,可写入 rc.local 或 systemd 脚本。
---
# 12. 启动 Redis
重新加载 systemd
```bash
systemctl daemon-reload
```
设置开机自启:
```bash
systemctl enable redis
```
启动服务:
```bash
systemctl start redis
```
查看状态:
```bash
systemctl status redis --no-pager -l
```
---
# 13. 验证安装和密码
## 13.1 查看监听端口
```bash
ss -lntp | grep 6379
```
## 13.2 本地连接测试
```bash
/usr/local/redis/bin/redis-cli
```
执行:
```bash
ping
```
如果设置了密码,会返回:
```text
(error) NOAUTH Authentication required.
```
认证:
```bash
auth Redis@2025#Strong
```
再执行:
```bash
ping
```
返回:
```text
PONG
```
---
## 13.3 一条命令带密码连接
```bash
/usr/local/redis/bin/redis-cli -a 'Redis@2025#Strong'
```
测试:
```bash
set test hello
get test
```
---
# 14. 设置环境变量(可选)
为了直接使用 `redis-cli`、`redis-server` 命令:
```bash
cat >/etc/profile.d/redis.sh <<'EOF'
export PATH=/usr/local/redis/bin:$PATH
EOF
source /etc/profile.d/redis.sh
```
验证:
```bash
redis-cli -v
redis-server -v
```
---
# 15. 常用运维命令
## 启动
```bash
systemctl start redis
```
## 停止
```bash
systemctl stop redis
```
## 重启
```bash
systemctl restart redis
```
## 查看状态
```bash
systemctl status redis
```
## 查看日志
```bash
tail -f /var/log/redis/redis.log
```
## 登录 Redis
```bash
redis-cli -a 'Redis@2025#Strong'
```
## 查看配置
```bash
redis-cli -a 'Redis@2025#Strong' CONFIG GET requirepass
redis-cli -a 'Redis@2025#Strong' INFO
```
---
# 16. 修改 Redis 密码的方法
如果后续要改密码,有两种方式。
---
## 方法一:修改配置文件后重启
编辑:
```bash
vim /etc/redis/redis.conf
```
修改:
```conf
requirepass NewStrongPassword@456
```
然后同步修改 systemd 文件里的 `ExecStop` 密码:
```bash
vim /etc/systemd/system/redis.service
```
修改:
```conf
ExecStop=/usr/local/redis/bin/redis-cli -a 'NewStrongPassword@456' shutdown
```
重载并重启:
```bash
systemctl daemon-reload
systemctl restart redis
```
---
## 方法二:运行时修改(临时 + 持久化)
先认证登录:
```bash
redis-cli -a '旧密码'
```
执行:
```bash
CONFIG SET requirepass NewStrongPassword@456
CONFIG REWRITE
```
> 如果你用了 ACL,密码修改方式会不同。
---
# 17. 卸载方法
停止服务:
```bash
systemctl stop redis
systemctl disable redis
```
删除服务文件:
```bash
rm -f /etc/systemd/system/redis.service
systemctl daemon-reload
```
删除安装目录:
```bash
rm -rf /usr/local/redis-8.6.1
rm -f /usr/local/redis
```
删除配置和数据(谨慎):
```bash
rm -rf /etc/redis
rm -rf /data/redis
rm -rf /var/log/redis
```
删除用户:
```bash
userdel redis
```
---
# 18. 推荐的密码规范
建议 Redis 密码满足:
- 长度不少于 16 位
- 包含:
- 大写字母
- 小写字母
- 数字
- 特殊字符
- 不使用弱密码,如:
- `123456`
- `redis123`
- `admin@123`
示例强密码:
```text
Rds@8.6.1_2025#X9pL
```
---
# 19. 最简安装命令汇总版
如果你想快速执行,下面是精简版流程。
## 19.1 安装依赖
```bash
dnf -y install gcc gcc-c++ make tar wget perl vim net-tools lsof
```
## 19.2 编译安装
```bash
cd /usr/local/src
tar -xzf redis-8.6.1.tar.gz
cd redis-8.6.1
make -j$(nproc)
make PREFIX=/usr/local/redis-8.6.1 install
ln -sfn /usr/local/redis-8.6.1 /usr/local/redis
```
## 19.3 创建用户和目录
```bash
useradd -r -s /sbin/nologin redis
mkdir -p /etc/redis /data/redis /var/log/redis
chown -R redis:redis /data/redis /var/log/redis
cp /usr/local/src/redis-8.6.1/redis.conf /etc/redis/redis.conf
```
## 19.4 修改配置
```bash
cat >/etc/redis/redis.conf <<'EOF'
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
dir /data/redis
dbfilename dump.rdb
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
requirepass Rds@8.6.1_2025#X9pL
maxmemory 2gb
maxmemory-policy allkeys-lru
EOF
```
## 19.5 systemd
```bash
cat >/etc/systemd/system/redis.service <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -a 'Rds@8.6.1_2025#X9pL' shutdown
Type=notify
Restart=always
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
```
## 19.6 启动
```bash
echo 'vm.overcommit_memory = 1' >/etc/sysctl.d/99-redis.conf
sysctl --system
systemctl daemon-reload
systemctl enable redis
systemctl start redis
systemctl status redis --no-pager -l
```
## 19.7 测试
```bash
/usr/local/redis/bin/redis-cli -a 'Rds@8.6.1_2025#X9pL' ping
```
返回:
```text
PONG
```