Files
HAOVP/docs/HA-DEPLOYMENT-GUIDE.md
T

7.4 KiB

高可用集群部署手册

一、环境准备

1.1 虚拟机配置要求

节点 IP地址 CPU 内存 磁盘 操作系统
Node-01 192.168.1.101 4核 8GB 100GB Ubuntu 22.04 / CentOS 8
Node-02 192.168.1.102 4核 8GB 100GB Ubuntu 22.04 / CentOS 8
Node-03 192.168.1.103 4核 8GB 100GB Ubuntu 22.04 / CentOS 8

1.2 软件依赖

每台虚拟机需要安装以下软件:

# Ubuntu
apt-get update
apt-get install -y docker.io docker-compose-plugin openjdk-17-jdk maven git curl wget

# CentOS
yum install -y docker docker-compose-plugin java-17-openjdk-devel maven git curl wget

# 启动Docker
systemctl start docker
systemctl enable docker

# 添加当前用户到docker组
usermod -aG docker $USER

1.3 网络配置

确保三台虚拟机之间网络互通:

# 在每台机器上测试
ping 192.168.1.101
ping 192.168.1.102
ping 192.168.1.103

# 开放防火墙端口
# Ubuntu
ufw allow 3306,6379,8848,9000,9001,9876,10911,8880,9000:9006/tcp

# CentOS
firewall-cmd --permanent --add-port={3306,6379,8848,9000,9001,9876,10911,8880,9000-9006}/tcp
firewall-cmd --reload

二、部署步骤

2.1 克隆项目到所有节点

# 在所有节点执行
git clone <项目地址> /opt/ha-ovp
cd /opt/ha-ovp

2.2 构建项目

# 在任意节点构建(只需执行一次)
cd /opt/ha-ovp

# 构建common模块
cd video-common
mvn clean install -DskipTests
cd ..

# 构建所有服务
mvn clean package -DskipTests

# 构建Sentinel镜像
cd sentinel-dashboard
docker build -t sentinel-dashboard:1.8.6 .
cd ..

# 将构建产物分发到其他节点
scp -r target/ video-*/target/ root@192.168.1.102:/opt/ha-ovp/
scp -r target/ video-*/target/ root@192.168.1.103:/opt/ha-ovp/

2.3 初始化各节点

# Node-01 (192.168.1.101)
chmod +x deploy-ha.sh
./deploy-ha.sh 1 init

# Node-02 (192.168.1.102)
chmod +x deploy-ha.sh
./deploy-ha.sh 2 init

# Node-03 (192.168.1.103)
chmod +x deploy-ha.sh
./deploy-ha.sh 3 init

2.4 按顺序启动服务

步骤1: 启动基础设施 (所有节点)

# Node-01 先启动
./deploy-ha.sh 1 infra

# 等待Node-01完全启动后 (约2分钟)
# Node-02 启动
./deploy-ha.sh 2 infra

# Node-03 启动
./deploy-ha.sh 3 infra

步骤2: 配置MySQL主从复制

# Node-01 查看主节点状态
docker exec mysql mysql -uroot -proot123456 -e "SHOW MASTER STATUS\G"

# 记录 File 和 Position 值

# Node-02 配置从节点
docker exec mysql mysql -uroot -proot123456 <<EOF
CHANGE MASTER TO
  MASTER_HOST='192.168.1.101',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password_2024',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=<Position值>;
START SLAVE;
SHOW SLAVE STATUS\G
EOF

# Node-03 配置从节点 (同上)

步骤3: 配置Redis主从复制

# Node-02 和 Node-03 执行
docker exec redis redis-cli -a redis_HA_Cluster_2024 REPLICAOF 192.168.1.101 6379

# 验证
docker exec redis redis-cli -a redis_HA_Cluster_2024 INFO replication

步骤4: 配置Nacos集群

访问 http://192.168.1.101:8848/nacos (账号: nacos/nacos)

创建命名空间 public,并添加以下配置文件:

Data ID Group 说明
video-gateway.yaml DEFAULT_GROUP 网关配置
video-auth.yaml DEFAULT_GROUP 认证服务配置
video-user.yaml DEFAULT_GROUP 用户服务配置
video-content.yaml DEFAULT_GROUP 内容服务配置
video-comment.yaml DEFAULT_GROUP 评论服务配置
video-recommend.yaml DEFAULT_GROUP 推荐服务配置
video-admin.yaml DEFAULT_GROUP 管理后台配置

步骤5: 初始化MinIO

# 任意节点执行
docker run --rm --network ha-network minio/mc <<EOF
mc alias set myminio http://192.168.1.101:9000 minioadmin minioadmin123
mc mb myminio/video-platform --ignore-existing
mc anonymous set download myminio/video-platform
EOF

步骤6: 启动微服务

# Node-01 启动微服务
./deploy-ha.sh 1 services

# Node-02 启动微服务
./deploy-ha.sh 2 services

# Node-03 不启动微服务(仅作为基础设施备份)

步骤7: 启动Nginx负载均衡

# Node-01 启动Nginx
./deploy-ha.sh 1 start-nginx

三、验证部署

3.1 检查服务状态

# 各节点执行
./deploy-ha.sh <node-id> status

# 检查Nacos服务注册
curl http://192.168.1.101:8848/nacos/v1/ns/instance/list?serviceName=video-gateway

# 检查Redis主从
docker exec redis redis-cli -a redis_HA_Cluster_2024 INFO replication

# 检查MySQL主从
docker exec mysql mysql -uroot -proot123456 -e "SHOW SLAVE STATUS\G"

3.2 访问服务

服务 地址
Nacos控制台 http://192.168.1.101:8848/nacos
Sentinel控制台 http://192.168.1.101:8880
MinIO控制台 http://192.168.1.101:9101
RocketMQ控制台 http://192.168.1.102:8080 (需额外部署)
API网关 http://192.168.1.100 (通过Nginx)

3.3 高可用测试

测试服务故障转移

# 停止Node-01上的网关服务
docker stop video-gateway

# 访问API验证(应该自动切换到Node-02)
curl http://192.168.1.100/auth/captcha

# 恢复服务
docker start video-gateway

测试Redis主从切换

# 停止Node-01的Redis
docker stop redis

# Sentinel会自动将从节点提升为主节点
# 查看Sentinel日志
docker logs redis-sentinel

# 恢复Redis
docker start redis

测试MySQL主从切换

# 停止主节点MySQL
docker stop mysql

# 查看从节点状态
docker exec mysql mysql -uroot -proot123456 -e "SHOW SLAVE STATUS\G"

四、常见问题

Q1: Nacos集群无法启动

检查各节点时间是否同步:

# 同步时间
apt-get install -y ntpdate
ntpdate pool.ntp.org

Q2: 服务注册不到Nacos

检查网络连通性:

# 测试Nacos连接
curl http://192.168.1.101:8848/nacos/v1/console/health/liveness

Q3: Redis连接失败

检查Redis密码配置是否一致:

# 测试连接
docker exec redis redis-cli -a redis_HA_Cluster_2024 ping

Q4: MySQL主从同步失败

# 重置从节点
docker exec mysql mysql -uroot -proot123456 <<EOF
STOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO
  MASTER_HOST='192.168.1.101',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password_2024',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=0;
START SLAVE;
EOF

五、服务端口汇总

服务 Node-01 Node-02 Node-03 说明
MySQL 3306 3306 3306 数据库主从
Redis 6379 6379 6379 缓存主从
Redis Sentinel 26379 26379 26379 哨兵
Nacos 8848 8848 8848 配置中心集群
RocketMQ NameServer 9876 9876 9876 NameServer集群
RocketMQ Broker - 10911 10911 Broker双主
MinIO API 9100 9100 9000 对象存储API
MinIO Console 9101 9101 9001 对象存储控制台
Sentinel Dashboard 8880 8880 8880 熔断控制台
video-gateway 9000 9000 - API网关
video-auth 9001 9001 - 认证服务
video-user 9002 9002 - 用户服务
video-content 9003 9003 - 内容服务
video-comment 9004 9004 - 评论服务
video-recommend 9005 9005 - 推荐服务
video-admin 9006 9006 - 管理后台
Nginx 80 - - 负载均衡