# 高可用集群部署手册 ## 一、环境准备 ### 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 软件依赖 每台虚拟机需要安装以下软件: ```bash # 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 网络配置 确保三台虚拟机之间网络互通: ```bash # 在每台机器上测试 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 克隆项目到所有节点 ```bash # 在所有节点执行 git clone <项目地址> /opt/ha-ovp cd /opt/ha-ovp ``` ### 2.2 构建项目 ```bash # 在任意节点构建(只需执行一次) 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 初始化各节点 ```bash # 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: 启动基础设施 (所有节点) ```bash # 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主从复制 ```bash # Node-01 查看主节点状态 docker exec mysql mysql -uroot -proot123456 -e "SHOW MASTER STATUS\G" # 记录 File 和 Position 值 # Node-02 配置从节点 docker exec mysql mysql -uroot -proot123456 <; START SLAVE; SHOW SLAVE STATUS\G EOF # Node-03 配置从节点 (同上) ``` #### 步骤3: 配置Redis主从复制 ```bash # 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 ```bash # 任意节点执行 docker run --rm --network ha-network minio/mc < 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 高可用测试 #### 测试服务故障转移 ```bash # 停止Node-01上的网关服务 docker stop video-gateway # 访问API验证(应该自动切换到Node-02) curl http://192.168.1.100/auth/captcha # 恢复服务 docker start video-gateway ``` #### 测试Redis主从切换 ```bash # 停止Node-01的Redis docker stop redis # Sentinel会自动将从节点提升为主节点 # 查看Sentinel日志 docker logs redis-sentinel # 恢复Redis docker start redis ``` #### 测试MySQL主从切换 ```bash # 停止主节点MySQL docker stop mysql # 查看从节点状态 docker exec mysql mysql -uroot -proot123456 -e "SHOW SLAVE STATUS\G" ``` --- ## 四、常见问题 ### Q1: Nacos集群无法启动 检查各节点时间是否同步: ```bash # 同步时间 apt-get install -y ntpdate ntpdate pool.ntp.org ``` ### Q2: 服务注册不到Nacos 检查网络连通性: ```bash # 测试Nacos连接 curl http://192.168.1.101:8848/nacos/v1/console/health/liveness ``` ### Q3: Redis连接失败 检查Redis密码配置是否一致: ```bash # 测试连接 docker exec redis redis-cli -a redis_HA_Cluster_2024 ping ``` ### Q4: MySQL主从同步失败 ```bash # 重置从节点 docker exec mysql mysql -uroot -proot123456 <