chore(config): Extend Nacos high availability improvements
This commit is contained in:
@@ -322,12 +322,56 @@ docker exec redis redis-cli -a redis_HA_Cluster_2024 INFO replication | grep -E
|
||||
|
||||
访问 http://192.168.1.101:8848/nacos (账号: nacos/nacos)
|
||||
|
||||
#### 方式一:SQL 脚本初始化(推荐)
|
||||
|
||||
```bash
|
||||
# 在 Node-01 执行,初始化所有配置到 Nacos 数据库
|
||||
docker exec -i mysql mysql -uroot -proot123456 nacos_config < /opt/HA-OVP/sql/nacos-config-init.sql
|
||||
|
||||
# 验证配置是否导入成功
|
||||
docker exec mysql mysql -uroot -proot123456 -e "SELECT data_id FROM nacos_config.config_info;"
|
||||
```
|
||||
|
||||
SQL 脚本会自动创建以下配置:
|
||||
|
||||
| Data ID | 说明 |
|
||||
|---------|------|
|
||||
| common.yaml | 公共配置(MySQL连接池、MyBatis、Feign等) |
|
||||
| common-redis-dev.yaml | 开发环境 Redis 单机配置 |
|
||||
| common-redis-ha.yaml | 生产环境 Redis Sentinel 配置 |
|
||||
| video-gateway.yaml | Gateway 服务专属配置 |
|
||||
| video-auth.yaml | Auth 服务专属配置 |
|
||||
| video-user.yaml | User 服务专属配置 |
|
||||
| video-content.yaml | Content 服务专属配置 |
|
||||
| video-comment.yaml | Comment 服务专属配置 |
|
||||
| video-recommend.yaml | Recommend 服务专属配置 |
|
||||
| video-admin.yaml | Admin 服务专属配置 |
|
||||
|
||||
#### 方式二:控制台手动创建
|
||||
|
||||
1. **创建命名空间**: 命名空间 → 新建命名空间 → 命名空间ID: `public`, 命名空间名: `公共命名空间`
|
||||
2. **添加配置文件**: 配置管理 → 配置列表 → 创建配置
|
||||
- Data ID: `video-gateway.yaml`
|
||||
- Data ID: `common.yaml`
|
||||
- Group: `DEFAULT_GROUP`
|
||||
- 配置内容: 参考 `config/nacos-config/` 目录下的配置文件
|
||||
3. **重复以上步骤添加其他服务的配置**
|
||||
- 配置内容: 参考 `sql/nacos-config-init.sql` 中的内容
|
||||
3. **重复以上步骤添加其他配置文件**
|
||||
|
||||
#### 配置架构说明
|
||||
|
||||
配置采用分层加载模式:
|
||||
|
||||
```
|
||||
application.yml (本地,极简)
|
||||
├── common.yaml (公共配置)
|
||||
├── common-redis-${profile}.yaml (按环境的Redis配置)
|
||||
└── ${spring.application.name}.yaml (服务专属配置)
|
||||
```
|
||||
|
||||
**环境切换**:通过 `SPRING_PROFILES_ACTIVE` 环境变量
|
||||
- `dev`: 加载 `common-redis-dev.yaml`(单机Redis)
|
||||
- `ha`: 加载 `common-redis-ha.yaml`(Sentinel哨兵)
|
||||
|
||||
**配置热更新**:修改 Nacos 中的配置后,服务会自动感知并更新,无需重启!
|
||||
|
||||
### 2.10 初始化 MinIO
|
||||
|
||||
@@ -743,44 +787,82 @@ io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 确保所有微服务使用 **Redis Sentinel 模式** 连接。在 `docker-compose-node-xx.yml` 中配置环境变量:
|
||||
1. 使用 Nacos 配置中心管理 Redis 配置,通过 `SPRING_PROFILES_ACTIVE` 区分环境:
|
||||
- `dev`: 加载 `common-redis-dev.yaml`(单机模式)
|
||||
- `ha`: 加载 `common-redis-ha.yaml`(Sentinel模式)
|
||||
|
||||
2. 确保 docker-compose 中配置了正确的环境变量:
|
||||
```yaml
|
||||
environment:
|
||||
# 删除 REDIS_HOST 和 REDIS_PORT,改用 Sentinel
|
||||
- SPRING_PROFILES_ACTIVE=ha
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024}
|
||||
- REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379}
|
||||
```
|
||||
|
||||
2. 确保 `application-ha.yml` 配置正确:
|
||||
|
||||
3. 确保 Nacos 中 `common-redis-ha.yaml` 配置正确:
|
||||
```yaml
|
||||
spring:
|
||||
data:
|
||||
redis:
|
||||
password: ${REDIS_PASSWORD:redis_HA_Cluster_2024}
|
||||
database: 0
|
||||
timeout: 10000
|
||||
sentinel:
|
||||
master: mymaster # 与 sentinel.conf 中的 master 名称一致
|
||||
master: mymaster
|
||||
nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379}
|
||||
password: ${REDIS_PASSWORD:redis_HA_Cluster_2024}
|
||||
```
|
||||
|
||||
**验证**:
|
||||
|
||||
```bash
|
||||
# 查看当前 Redis 主节点
|
||||
docker exec redis-sentinel redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
|
||||
|
||||
# 输出应为主节点的 IP 和端口
|
||||
# 1) "192.168.1.101"
|
||||
# 2) "6379"
|
||||
|
||||
# 测试 Sentinel 连接
|
||||
docker exec redis-sentinel redis-cli -p 26379 SENTINEL master mymaster
|
||||
```
|
||||
|
||||
### Q15: Nacos 配置不生效或配置冲突
|
||||
|
||||
**问题描述**:修改 Nacos 配置后服务没有更新,或启动时配置异常。
|
||||
|
||||
**原因**:
|
||||
1. 本地 `application.yml` 与 Nacos 配置冲突
|
||||
2. 配置加载顺序问题
|
||||
3. `spring.config.import` 配置错误
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. **确保本地 application.yml 极简**:只保留 Nacos 连接配置
|
||||
```yaml
|
||||
spring:
|
||||
application:
|
||||
name: video-auth
|
||||
profiles:
|
||||
active: ${SPRING_PROFILES_ACTIVE:dev}
|
||||
config:
|
||||
import:
|
||||
- optional:nacos:common.yaml?refreshEnabled=true
|
||||
- optional:nacos:common-redis-${spring.profiles.active}.yaml?refreshEnabled=true
|
||||
- optional:nacos:${spring.application.name}.yaml?refreshEnabled=true
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848}
|
||||
namespace: ${NACOS_NAMESPACE:}
|
||||
username: ${NACOS_USERNAME:nacos}
|
||||
password: ${NACOS_PASSWORD:nacos}
|
||||
```
|
||||
|
||||
2. **配置加载顺序**:
|
||||
- common.yaml(公共配置)
|
||||
- common-redis-${profile}.yaml(环境配置)
|
||||
- ${spring.application.name}.yaml(服务配置)
|
||||
|
||||
3. **验证配置加载**:
|
||||
```bash
|
||||
# 查看服务启动日志
|
||||
docker logs video-auth 2>&1 | grep -i nacos
|
||||
# 应看到类似: "Loading nacos config, dataId: common.yaml"
|
||||
```
|
||||
|
||||
4. **强制刷新配置**:修改 Nacos 配置后,服务会自动感知更新(`refreshEnabled=true`)
|
||||
|
||||
---
|
||||
|
||||
## 七、日常运维
|
||||
|
||||
Reference in New Issue
Block a user