分布式微服务系统架构第129集:redis安装部署文档

发布于:2025-05-11 ⋅ 阅读:(22) ⋅ 点赞:(0)

加群联系作者vx:xiaoda0423

仓库地址:https://webvueblog.github.io/JavaPlusDoc/

https://1024bat.cn/

下面是 Redis 安装与部署的完整文档,涵盖了:

  1. ✅ 单机安装(适用于开发、测试)

  2. ✅ 主从复制 + 持久化配置(适用于生产)

  3. ✅ 常见问题与优化建议


✅ 一、单机安装 Redis(开发或测试)

🧩 1. 安装依赖

sudo apt update
sudo apt install build-essential tcl -y

📦 2. 下载并编译 Redis

wget http://download.redis.io/releases/redis-6.2.14.tar.gz
tar xzf redis-6.2.14.tar.gz
cd redis-6.2.14
make
sudo make install

可执行文件将安装到 /usr/local/bin/redis-serverredis-cli, 等。


🛠 3. 修改配置文件(redis.conf

bind 0.0.0.0             # 支持远程访问
protected-mode no        # 关闭保护模式
requirepass yourpasswd   # 设置访问密码(生产务必设置)
daemonize yes            # 后台运行

🚀 4. 启动 Redis 服务

redis-server redis.conf

✅ 测试连接

redis-cli -a yourpasswd
127.0.0.1:6379> ping
PONG

✅ 二、主从复制(高可用基础)

假设:

  • 主节点:192.168.1.101

  • 从节点:192.168.1.102


📍 主节点配置(redis.conf)

bind 0.0.0.0
protected-mode no
requirepass yourpasswd

📍 从节点配置(redis.conf)

bind 0.0.0.0
protected-mode no
replicaof 192.168.1.101 6379
masterauth yourpasswd
requirepass yourpasswd

✅ 验证主从同步

在主节点执行:

redis-cli -a yourpasswd set name "redis-master"

在从节点验证:

redis-cli -a yourpasswd get name
# 输出:redis-master

✅ 三、持久化配置(RDB + AOF)

在 redis.conf 中启用:

save 900 1           # 900 秒内至少 1 个 key 变化就保存 RDB 快照
save 300 10
save 60 10000

appendonly yes       # 开启 AOF 持久化
appendfilename "appendonly.aof"

建议生产开启 AOF,保障数据更完整。


✅ 四、设置开机启动(Ubuntu)

sudo cp utils/redis_init_script /etc/init.d/redis
sudo update-rc.d redis defaults

✅ 五、常用命令参考

命令

说明

redis-server redis.conf

启动 Redis 实例

redis-cli -a 密码

连接 Redis

info replication

查看主从状态

CONFIG SET requirepass xxx

动态设置密码

CONFIG GET *

查看当前所有配置

shutdown

安全关闭 Redis


✅ 六、优化建议(生产环境)

配置项

建议

maxmemory

限制最大内存,避免 OOM

maxmemory-policy

设置淘汰策略(如 allkeys-lru)

appendfsync

设置为 everysec 保证性能与安全平衡

tcp-keepalive

避免连接死链

bind

 + requirepass

设置内网访问 + 登录密码


✅ 七、常见问题排查

问题

原因与解决方案

DENIED Redis is running...

没有设置密码或密码错误

Can't connect to Redis

端口未开放、防火墙未关闭

主从不同步

IP、端口或 replicaof 配置错误

无法远程访问

bind

 和 protected-mode 设置不对


✅ 八、安装可视化工具(推荐)

工具名

功能说明

RedisInsight

官方可视化管理工具(推荐)

RDM

支持多平台的 GUI 工具

AnotherRedisDesktopManager

高颜值、支持 SSH 和集群


Redis 安装与部署指南(2025 年版)

适用对象:需要在生产环境(4 vCPU / 16 GB RAM 以上)快速部署 Redis(单机、哨兵、Cluster 模式)的后端 / 运维工程师。


1. 版本概览

分支

最新小版本

发布时间

生命周期

备注

7.2

7.2.5

2025‑03‑15

2025‑Q4 之前为当前 GA

推荐新集群直接使用,包含 ACL、复制流水线优化

7.0 LTS

7.0.15

2025‑02‑20

至 8.0 GA+18 个月

长期支持分支,企业常用

6.2

6.2.14

2025‑01‑30

维护到 2025‑12

仅安全补丁,不再推荐新建集群

建议:若项目依赖模块(如 RedisBloom、RedisSearch),可直接采用 Redis Stack 7.2.x。纯 KV/QoS 场景使用官方 7.2 即可。


2. 环境要求

资源

最低

推荐生产

CPU

2 vCPU

≥4 vCPU(核心数影响并发)

内存

4 GB

≥16 GB(取决于数据量)

磁盘

SSD ≥ 50 GB

SSD/NVMe,noatime,AOF/RDB 持久化目录需高 IOPS

OS

Ubuntu 22.04 / AlmaLinux 9 / Debian 12

内核 ≥5.15,关闭透明大页

系统调优:

# redis.conf 需要关闭 THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# /etc/sysctl.d/99-redis.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535
fs.file-max = 2097152
# 生效
sysctl -p /etc/sysctl.d/99-redis.conf

# ulimit (/etc/security/limits.conf)
* soft nofile 65536
* hard nofile 65536

3. 安装方式对比

方式

优点

缺点

APT/YUM

快速、一条命令

版本跟随发行版,可能落后

官方源码编译

最新、灵活

需安装 gcc/make,编译耗时

Docker / K8s(Bitnami / Redis-OSS 官方镜像)

分发简单、隔离好

持久化卷、资源限制需关注

生产环境:若非容器平台,推荐源码编译 + systemd;云原生建议使用 Bitnami Helm Chart 或 Redis Operator (K8s) 。


4. 单节点快速安装(源码 + systemd)

# 4.1 获取源码(7.2.5)
wget https://download.redis.io/releases/redis-7.2.5.tar.gz

# 4.2 编译
apt-get update && apt-get install -y build-essential jemalloc-dev tcl
mkdir -p /opt/redis
 tar -xzf redis-7.2.5.tar.gz -C /opt/redis
cd /opt/redis/redis-7.2.5 && make -j$(nproc)
make install PREFIX=/usr/local/redis

# 4.3 创建用户与目录
useradd --system --home /var/lib/redis --shell /sbin/nologin redis
mkdir -p /var/lib/redis /var/log/redis /etc/redis
cp /opt/redis/redis-7.2.5/redis.conf /etc/redis/redis.conf
chown -R redis:redis /var/lib/redis /var/log/redis /etc/redis

# 4.4 修改关键配置 (/etc/redis/redis.conf)
 supervised systemd
bind 0.0.0.0
 port 6379
 dir /var/lib/redis
 logfile /var/log/redis/redis.log
# 建议持久化策略
 save 900 1
 save 300 10
 maxmemory 8gb
 maxmemory-policy allkeys-lru
 requirepass "Prod#Redis2025!"
 appendonly yes
 appendfsync everysec

创建 systemd 服务

cat >/etc/systemd/system/redis.service <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=notify
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -a Prod#Redis2025! shutdown
Restart=always
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now redis

验证:redis-cli -a Prod#Redis2025! info server


5. 哨兵模式(高可用)

5.1 架构

  • Master ×1、Slave ×2、Sentinel ×3(可与 Slave 同机)

  • Sentinel 端口默认 26379

5.2 快速配置 sentinel.conf

port 26379
sentinel monitor mymaster 192.168.10.11 6379 2
sentinel auth-pass mymaster Prod#Redis2025!
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000

各节点 sentinel 只需修改本机 IP 与日志路径即可,systemd 同理。

5.3 故障转移流程

  1. Sentinel 判定 master down → 选举新 master。

  2. 自动 SLAVEOF 其余节点。

  3. 客户端通过 VIP / 域名 + Sentinel discover 重连。


6. Redis Cluster 模式(水平扩展)

6.1 规划

  • 节点总数 ≥6(3 master + 3 replica)

  • 同一主从放不同机架

6.2 关键配置

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
requirepass Prod#Redis2025!
masterauth Prod#Redis2025!

多端口部署或 Docker 每实例单端口均可。

6.3 初始化集群

redis-cli -a Prod#Redis2025! --cluster create \
 10.0.0.1:7000 10.0.0.2:7000 10.0.0.3:7000 \
 10.0.0.4:7000 10.0.0.5:7000 10.0.0.6:7000 \
 --cluster-replicas 1

验证:redis-cli -a Prod#Redis2025! -c -h 10.0.0.1 -p 7000 cluster info


7. 性能调优

维度

建议

maxmemory-policy

缓存业务推荐 allkeys-lru / volatile-lru

RDB & AOF

禁用同写盘

,AOF everysec + RDB 仅备份

内核

net.core.somaxconn=65535

tcp-backlog 同步

客户端超时

timeout 300

;Cluster 模式关闭 Nagle:tcp-keepalive 300

慢查询

slowlog-log-slower-than 10000

;借助 redis-slowlog + ELK


8. 监控与告警

  • Prometheus Exporteroliver006/redis_exporter → Grafana Dashboard Redis-Overall

  • Key 指标used_memory_rssconnected_clientsinstantaneous_ops_per_seckeyspace_hits/missesaof_current_sizemaster_link_down_since_seconds

  • 容器化时注意 cgroup 限制:mem_fragmentation_ratio > 1.5 需排查。


9. 备份与恢复

方法

优缺点

RDB 快照

全量备份,可用 bgsave + rsync;速度快

AOF

持久化每条写命令,可重放到最新

Disaster Recovery (DR)

主 → 异地从库 (replica)

恢复示例:

systemctl stop redis
cp /backup/dump.rdb /var/lib/redis/
chown redis:redis /var/lib/redis/dump.rdb
systemctl start redis

10. 常见问题排查

问题

处理

ERR max number of clients reached

调大 maxclients (默认 10000) 并增大 ulimit -n

内存暴涨

查看 biggest keysMEMORY USAGE <key>;排查惰性删除

主从延迟大

网络抖动 / RDB/AOF rewrite;监控 master_repl_offset vs slave_repl_offset

Cluster MOVED 错误

节点 IP 变动未重建集群;确保 cluster-announce-ip 配置固定 IP


11. 升级策略

  • 6.2 → 7.x 支持滚动升级:从从节点开始;CONFIG SET protected-mode no 临时关闭;升级完毕重新 CONFIG REWRITE

  • 大版本前务必全量 RDB 备份或冷数据快照。


太好了!下面我将为你补充两部分:


✅ 一、Redis 高可用部署指南(Sentinel + Cluster)


📌 1. Sentinel 哨兵模式(高可用主从自动切换)

📐 架构示意图:

+------------------------+
            |   redis-sentinel1     |
            +------------------------+
                     |      |
         +-----------+      +------------+
         |                             |
+----------------+        +----------------+
|   redis-master | <----> |   redis-slave  |
+----------------+        +----------------+
         |                             |
         +-----------+      +-----------+
                     |      |
            +------------------------+
            |   redis-sentinel2     |
            +------------------------+

📌 配置步骤(以 3 个哨兵 + 1 主 2 从为例):

🔧 redis-master.conf
port 6379
bind 0.0.0.0
requirepass mypass
masterauth mypass
🔧 redis-slave.conf
port 6379
bind 0.0.0.0
replicaof 192.168.1.101 6379  # 主节点 IP
masterauth mypass
requirepass mypass
🔧 sentinel.conf(每台哨兵)
port 26379
sentinel monitor mymaster 192.168.1.101 6379 2
sentinel auth-pass mymaster mypass
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

所有节点监听 6379,哨兵监听 26379,监控名称为 mymaster


✅ 启动哨兵:

redis-sentinel /path/to/sentinel.conf

📌 2. Redis Cluster 集群模式(数据分片 + 高可用)

架构推荐:

  • 6 个节点:3 主 3 从

  • 每主节点一个从节点作为故障切换


🔧 创建节点配置(例如:7000~7005)

修改 6 份配置:

port 7000  # 改为 7001~7005
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
requirepass mypass
masterauth mypass

🚀 启动 6 个 Redis 实例(每个都独立)

redis-server redis7000.conf
...
redis-server redis7005.conf

🧠 创建集群

# 安装 Ruby redis-cli 工具(推荐)
gem install redis
redis-cli --cluster create \
  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
  127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
  --cluster-replicas 1

创建时选择:每主分配一个从。


✅ 二、Spring Boot 集成 Redis 配置(支持单机、哨兵、集群)


✅ 1. Maven 依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

✅ 2. application.yml 示例

🔹 单机模式:
spring:
  redis:
    host: 192.168.1.101
    port: 6379
    password: mypass

🔹 Sentinel 模式:
spring:
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.1.101:26379
        - 192.168.1.102:26379
        - 192.168.1.103:26379
    password: mypass

🔹 Cluster 模式:
spring:
  redis:
    cluster:
      nodes:
        - 192.168.1.101:7000
        - 192.168.1.102:7001
        - 192.168.1.103:7002
        - 192.168.1.104:7003
        - 192.168.1.105:7004
        - 192.168.1.106:7005
    password: mypass

✅ 3. 示例代码(RedisTemplate)

@Service
public class RedisService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    public void save(String key, String value) {
        redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(10));
    }

    public String get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

🧩 补充建议

  • 使用 Lettuce 默认连接池(Spring Boot 内置)

  • 若并发较高,可改为 Redisson,支持分布式锁等扩展功能

  • 可用 CacheManager 结合 Spring 缓存注解 @Cacheable


Spring Boot + Redisson 分布式锁实战,RedisCluster的部署自动化脚本

太好了!下面我将为你完整补充两部分内容:


✅ 一、Spring Boot + Redisson 分布式锁实战

使用 Redisson 来实现分布式锁,适用于高并发环境(如订单下单、秒杀、任务调度防重等)


📦 1. 引入 Maven 依赖(推荐用最新 Redisson 版本)

<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-spring-boot-starter</artifactId>
  <version>3.22.1</version>
</dependency>

⚙️ 2. application.yml 配置

✅ 单机 Redis
redisson:
  single-server-config:
    address: redis://192.168.1.101:6379
    password: mypass
✅ Redis Cluster
redisson:
  cluster-servers-config:
    node-addresses:
      - redis://192.168.1.101:7000
      - redis://192.168.1.102:7001
      - redis://192.168.1.103:7002
    password: mypass

也可以在 Java 中用 Config 构造。


✅ 3. 分布式锁使用示例(推荐写法)

@Service
public class LockService {

    @Autowired
    private RedissonClient redissonClient;

    public void doBusiness() {
        RLock lock = redissonClient.getLock("my-distributed-lock");

        try {
            boolean success = lock.tryLock(5, 10, TimeUnit.SECONDS);
            if (success) {
                // 成功加锁后执行业务逻辑
                System.out.println("获取锁成功,执行业务");
                Thread.sleep(3000); // 模拟处理
            } else {
                System.out.println("未获取到锁");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
                System.out.println("释放锁");
            }
        }
    }
}

✅ 4. 注解方式封装(可选)

你可以用 AOP + 自定义注解封装 @DistributedLock(key="xxx") 来增强分布式锁体验。需要我写这一部分可以继续加。


✅ 二、Redis Cluster 自动化部署脚本(6 节点,3主3从)

适用于本地开发或快速起测试环境


📁 目录结构建议

redis-cluster/
├── redis-7000.conf
├── redis-7001.conf
├── redis-7002.conf
├── redis-7003.conf
├── redis-7004.conf
├── redis-7005.conf
├── start-all.sh
├── create-cluster.sh

📄 示例 redis-7000.conf(其他类似,仅改端口)

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
dir ./
requirepass mypass
masterauth mypass

🖥 脚本:start-all.sh

#!/bin/bash

for port in {7000..7005}
do
  mkdir -p data/${port}
  redis-server redis-${port}.conf &
done

⚙️ 脚本:create-cluster.sh

#!/bin/bash

echo "yes" | redis-cli --cluster create \
  127.0.0.1:7000 \
  127.0.0.1:7001 \
  127.0.0.1:7002 \
  127.0.0.1:7003 \
  127.0.0.1:7004 \
  127.0.0.1:7005 \
  --cluster-replicas 1 \
  -a mypass

✅ 运行方式(Linux 或 Mac)

chmod +x *.sh
./start-all.sh
./create-cluster.sh

🔚 总结

项目

实用场景

Redisson 分布式锁

秒杀、单用户限流、定时任务等

Redis Cluster 自动部署脚本

快速搭建本地 3主3从高可用集群