Redis部署-总结版

一、部署步骤总结

1. 环境准备

  • 服务器:阿里云 CentOS 系统

  • 安装 Docker 及 Docker Compose V2 插件

  • 优化宿主机内核参数:

    bash

    复制代码
    echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf && sysctl -p
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    # CentOS 永久关闭透明大页(通过 systemd 服务)

2. 项目目录结构

text

复制代码
/opt/campus_project/campus_crowdfunding/
├── docker-compose.yml
├── .env
├── redis.conf
├── prometheus.yml
├── secrets/
│   └── redis_password.txt
├── backup-redis.sh
└── ... (应用代码)

3. Redis 配置优化(redis.conf)

  • 绑定所有接口,密码从 Docker secret 文件读取

  • 开启混合持久化:appendonly yes + aof-use-rdb-preamble yes

  • 设置 RDB 快照策略

  • 内存限制与 LRU 淘汰策略:maxmemory 512mb + maxmemory-policy allkeys-lru

  • 慢查询日志、TCP 连接优化

4. Docker Compose 整合

  • 添加 Redis 服务,挂载 redis.conf 和 secret 文件

  • 配置健康检查(后续调整)

  • 应用服务 campus_app 通过 depends_on 依赖 MySQL 和 Redis 健康状态

  • 环境变量传递:REDIS_URL=redis://redis:6379/0 和 REDIS_PASSWORD_FILE

5. 密码安全管理

  • 创建 secrets/redis_password.txt,权限 600

  • 在 .env 中设置 REDIS_PASSWORD 保持一致

  • 应用容器挂载 secret 文件,通过 REDIS_PASSWORD_FILE 读取

6. 备份脚本与定时任务

  • 编写 backup-redis.sh:触发 BGSAVE,打包 redis_data 目录,保留 7 天

  • 配置 crontab 每天凌晨 3 点执行

7. 启动与验证

  • docker compose up -d 启动所有服务

  • 检查容器状态、Redis 连接测试、应用日志


二、遇到的问题及解决方案

问题 原因 解决方案
1. Redis 容器健康检查失败 健康检查命令中使用 CMD-SHELL 且密码包含特殊字符 !@#,shell 解析错误导致认证失败 改用 CMD 格式的健康检查: test: ["CMD", "redis-cli", "-a", "$$(cat $${REDIS_PASSWORD_FILE})", "ping"]
2. docker-compose.yml 报 version is obsolete 警告 Docker Compose V2 不再需要 version 字段 删除文件第一行的 version: '3.8'
3. 应用连接 Redis 报 AUTH failed: WRONGPASS 密码文件末尾含有换行符 \n,应用读取文件时密码变为 "MyPass\n" 使用 printf '%s' '密码' > secrets/redis_password.txt 重新生成无换行符的密码文件
4. 宿主机透明大页永久关闭失败(CentOS 无 apt 命令) 最初给出的 Ubuntu 命令不适用 CentOS 改用 CentOS 的 systemd 服务方式永久关闭: 创建 /etc/systemd/system/disable-thp.service 并启用
5. 使用 echo 带双引号写入密码时触发 bash 历史展开 密码中包含 !,bash 将其解释为历史命令扩展 改用单引号或 printf: echo -n '密码' > file 或 printf '%s' '密码' > file
6. 容器内缺少 redis-cli 或 Python redis 模块 应用镜像未预装 Redis 客户端工具 临时安装 redis-tools 测试,或使用 Python 一行命令测试连接,测试后不影响生产
7. 担心阿里云安全组需开放 Redis 端口 误解为需要外部访问 明确解释:应用与 Redis 在同一 Docker 网络内部通信,ports: "127.0.0.1:6379:6379" 仅绑定本地,安全组无需开放任何 Redis 端口

三、最终部署架构

text

复制代码
┌─────────────────────────────────────────────────────────┐
│                    阿里云 CentOS 服务器                    │
│  ┌───────────────────────────────────────────────────┐  │
│  │              Docker Compose 项目                    │  │
│  │  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │  │
│  │  │  MySQL   │  │  Redis   │  │  campus_app   │  │  │
│  │  │  :3306   │  │  :6379   │◀─┤   :8000       │  │  │
│  │  └──────────┘  └──────────┘  └───────────────┘  │  │
│  │        ▲             ▲              ▲             │  │
│  │        └─────────────┴──────────────┘             │  │
│  │              内部网络(服务名通信)                    │  │
│  └───────────────────────────────────────────────────┘  │
│                    ▲                                    │
│                    │ 宿主机端口映射                       │
│                    ▼                                    │
│         127.0.0.1:6379 (仅本地)                         │
│         0.0.0.0:8000   (对外提供 Web 服务)               │
└─────────────────────────────────────────────────────────┘

四、后续运维注意事项

  • 监控:通过 Grafana (端口 3000) 查看系统及 Redis 指标

  • 备份 :每日自动备份 Redis 数据到 /opt/backups/redis

  • 安全红线:切勿在阿里云安全组放行 6379 端口,Redis 仅限内部访问

  • 更新应用 :docker compose up -d --build campus_app


相关推荐
时间售卖铺42 分钟前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw1 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社2 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙2 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3763 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川4 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组4 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
zhangjw344 小时前
1-5 PostgreSQL 数据类型全集:基础类型、字符串、数值、时间类型
数据库·postgresql
王中阳Go5 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型