docs(nacos-config): 添加 nacos_config 目录分析与修改指南

新增 g3fo-nacos-config 目录下的 SKILL.md 文档,详细说明 nacos_config 目录的结构、用户交互流程及配置文件的添加与修改规则。新增 yml-placement.md 文件,提供常见顶级键的插入顺序,以保持配置文件风格一致。
This commit is contained in:
2026-02-09 17:25:13 +08:00
parent 3ea09a1cdd
commit e798751e4b
5 changed files with 357 additions and 72 deletions
@@ -1,15 +1,19 @@
# Redis Sentinel 高可用架构部署与运维手册
## 一、概述
### 1.1 核心功能
Redis Sentinel(哨兵)是 Redis 的高可用解决方案。其核心目标是实现主从切换的自动化,确保系统在主节点故障时能够自动选举新的主节点并恢复服务。
### 1.2 适用场景
- 生产环境下的 Redis 高可用需求。
- 需要自动故障转移(Failover)的分布式系统。
- 读写分离架构。
### 1.3 前置条件
- **运行环境**:Docker & Docker Compose。
- **镜像版本**:推荐使用 Redis 8.4.0 及以上版本。
- **网络规划**:所有节点需网络互通,且需明确各宿主机的外部 IP。
@@ -17,9 +21,11 @@ Redis Sentinel(哨兵)是 Redis 的高可用解决方案。其核心目标
---
## 二、环境准备
在所有节点(主节点、从节点、哨兵节点)上执行目录初始化及权限设置。
### 2.1 目录结构配置
```bash
# 创建配置、数据、日志目录
mkdir -p /data/redis/{conf,data,logs}
@@ -34,9 +40,11 @@ chmod -R 750 /data/redis
## 三、部署流程
### 3.1 Docker 服务编排
使用 Docker Compose 部署 Redis 服务及 Sentinel 节点。
**docker-compose.yml 示例:**
```yaml
version: '3.8'
@@ -49,9 +57,9 @@ services:
ports:
- "6379:6379"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /data/redis/conf:/etc/redis
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- /data/redis/conf/redis.conf:/etc/redis/redis.conf
- /data/redis/data:/data
- /data/redis/logs:/var/log/redis
command: redis-server /etc/redis/redis.conf
@@ -66,7 +74,9 @@ services:
ports:
- "26379:26379"
volumes:
- /data/redis/conf:/etc/redis
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- /data/redis/conf/sentinel.conf:/etc/redis/sentinel.conf
- /data/redis/logs:/var/log/redis
command: redis-sentinel /etc/redis/sentinel.conf
networks:
@@ -82,6 +92,7 @@ networks:
## 四、核心配置说明
### 4.1 Redis 服务端配置 (`redis.conf`)
```Properties
# 基础配置
bind 0.0.0.0
@@ -142,7 +153,9 @@ auto-aof-rewrite-min-size 64mb
notify-keyspace-events AE
```
从节点添加配置
```Properties
# 指定广播地址,即使 Docker 内部获取到的是 172.x,也强制告诉 Sentinel 我是 ${REDIS_SLAVE_IP}
replica-announce-ip ${REDIS_SLAVE_IP}
@@ -152,22 +165,26 @@ replicaof ${REDIS_MASTER_IP} 6379
# 从节点只读(默认开启,避免误写)
replica-read-only yes
```
以下为生产环境推荐的核心配置项:
| 配置项 | 说明 | 推荐值 |
| :--- | :--- | :--- |
| `bind` | 绑定 IP 地址 | `0.0.0.0` |
| `protected-mode` | 保护模式 | `no` |
| `port` | 监听端口 | `6379` |
| `replica-announce-ip` | 宣告外部 IP(解决 Docker NAT 问题) | 宿主机实际 IP |
| `requirepass` | 服务访问密码 | 自定义强密码 |
| `masterauth` | 主从同步授权密码 | 与 `requirepass` 一致 |
| `appendonly` | 开启 AOF 持久化 | `yes` |
| `aof-use-rdb-preamble` | 开启混合持久化 | `yes` |
| 配置项 | 说明 | 推荐值 |
| ---------------------- | ------------------------- | ------------------ |
| `bind` | 绑定 IP 地址 | `0.0.0.0` |
| `protected-mode` | 保护模式 | `no` |
| `port` | 监听端口 | `6379` |
| `replica-announce-ip` | 宣告外部 IP(解决 Docker NAT 问题) | 宿主机实际 IP |
| `requirepass` | 服务访问密码 | 自定义强密码 |
| `masterauth` | 主从同步授权密码 | 与 `requirepass` 一致 |
| `appendonly` | 开启 AOF 持久化 | `yes` |
| `aof-use-rdb-preamble` | 开启混合持久化 | `yes` |
> **注意:** 在从节点配置中,必须包含 `replicaof <master-ip> 6379` 以建立主从关系。
### 4.2 哨兵配置 (`sentinel.conf`)
```Properties
# 基础配置
bind 0.0.0.0
@@ -201,19 +218,23 @@ sentinel failover-timeout mymaster 180000
# 禁止Sentinel在故障转移后自动重配置主节点(Docker环境下无需开启)
sentinel deny-scripts-reconfig yes
```
哨兵节点用于监控主节点状态并协调切换。
| 配置项 | 说明 | 示例值 |
| :--- | :--- | :--- |
| `sentinel monitor` | 监控主节点(名称、IP、端口、法定人数) | `mymaster ${REDIS_MASTER_IP} 6379 2` |
| `sentinel auth-pass` | 主节点访问密码 | `mymaster afe123456` |
| `sentinel down-after-milliseconds` | 故障判定超时时间(毫秒) | `30000` |
| `sentinel failover-timeout` | 故障转移超时时间 | `180000` |
| `sentinel announce-ip` | 宣告哨兵外部 IP | 宿主机实际 IP |
| 配置项 | 说明 | 示例值 |
| ---------------------------------- | -------------------- | ------------------------------------ |
| `sentinel monitor` | 监控主节点(名称、IP、端口、法定人数) | `mymaster ${REDIS_MASTER_IP} 6379 2` |
| `sentinel auth-pass` | 主节点访问密码 | `mymaster afe123456` |
| `sentinel down-after-milliseconds` | 故障判定超时时间(毫秒) | `30000` |
| `sentinel failover-timeout` | 故障转移超时时间 | `180000` |
| `sentinel announce-ip` | 宣告哨兵外部 IP | 宿主机实际 IP |
---
## 五、客户端集成(Redisson)
在 Spring Boot 应用中,使用 Redisson 实现哨兵模式的连接:
```yaml
@@ -307,30 +328,35 @@ spring:
## 六、运维常用命令
### 6.1 哨兵管理命令
详细的 Redis 常用命令及 Sentinel 运维操作请参考:[Redis 常用命令使用指南](./usage.md)
通过 `redis-cli` 连接哨兵端口(默认 26379)执行:
| 命令 | 功能描述 |
| :--- | :--- |
| `SENTINEL masters` | 列出所有被监控的主节点状态 |
| `SENTINEL master <name>` | 查看指定主节点的详细信息 |
| `SENTINEL slaves <name>` | 查看指定主节点的从节点列表 |
| `SENTINEL sentinels <name>` | 列出除当前节点外的其他哨兵实例 |
| 命令 | 功能描述 |
| ----------------------------------------- | ----------------- |
| `SENTINEL masters` | 列出所有被监控的主节点状态 |
| `SENTINEL master <name>` | 查看指定主节点的详细信息 |
| `SENTINEL slaves <name>` | 查看指定主节点的从节点列表 |
| `SENTINEL sentinels <name>` | 列出除当前节点外的其他哨兵实例 |
| `SENTINEL get-master-addr-by-name <name>` | 获取当前有效的主节点 IP 和端口 |
| `SENTINEL failover <name>` | **手动强制触发**故障转移 |
| `SENTINEL reset <pattern>` | 重置配置,清除过期节点信息 |
| `SENTINEL ckquorum <name>` | 检查当前哨兵数量是否满足法定人数 |
| `SENTINEL failover <name>` | **手动强制触发**故障转移 |
| `SENTINEL reset <pattern>` | 重置配置,清除过期节点信息 |
| `SENTINEL ckquorum <name>` | 检查当前哨兵数量是否满足法定人数 |
---
## 七、注意事项与最佳实践
> 注意:
>
> 1. **脑裂保护**:建议配置 `min-replicas-to-write 1` 和 `min-replicas-max-lag 10`,确保主库至少有 1 个正常的从库时才允许写入,防止网络分区导致的数据丢失。
> 2. **Docker 网络**:在容器环境下,务必配置 `replica-announce-ip` 和 `sentinel announce-ip`,否则哨兵可能会记录容器内部 IP 导致客户端无法连接。
> 3. **持久化平衡**:推荐开启混合持久化(AOF + RDB),并设置 `appendfsync everysec` 以平衡性能与安全性。
> 4. **权限细化**:生产环境建议将 `/data/redis` 目录权限进一步收紧,仅允许特定 UID 访问。
---
**参考资料**:[Redisson 官方配置文档](https://redisson.pro/docs/configuration/#sentinel-yaml-config-format)