Apollo配置中心分布式部署指南
前言
Apollo是一款开源的分布式配置中心,能够集中化管理应用在不同环境、不同集群的配置。本文将详细介绍如何对Apollo配置中心进行分布式部署,包括环境准备、数据库配置、服务部署等完整流程。
一、环境准备
1.1 操作系统要求
Apollo服务端基于Spring Boot开发,启动脚本理论上支持所有Linux发行版,推荐使用CentOS 7作为运行环境。
1.2 Java环境要求
- 服务端:JDK 1.8+
- 客户端:JDK 1.8+
- 如需运行在Java 1.7环境,请使用1.x版本的Apollo客户端
可通过以下命令验证Java版本:
java -version
1.3 数据库要求
Apollo使用MySQL作为后端存储,版本要求5.6.5+。这是因为Apollo的表结构对timestamp使用了多个default声明。
验证MySQL版本:
SHOW VARIABLES WHERE Variable_name = 'version';
注意:虽然官方推荐5.6.5+,但实际可降级到5.5版本使用。如需使用Oracle或PostgreSQL,需要额外进行适配。
1.4 环境规划
Apollo支持多环境部署,常见环境包括:
- DEV:开发环境
- FAT:测试环境(功能测试)
- UAT:集成环境(回归测试)
- PRO:生产环境
如需自定义环境名称,需注意PROD会被强制转换为PRO,FWS会被强制转换为FAT。
1.5 网络策略
分布式部署时需特别注意网络连通性:
- 服务注册:
apollo-configservice和apollo-adminservice需要将IP和端口注册到Meta Server - 访问控制:出于安全考虑,不应将这两个服务直接暴露在公网
- 多网卡处理:可通过以下方式解决多网卡或网络限制问题:
-
忽略特定网卡:
-Dspring.cloud.inetutils.ignoredInterfaces[0]=docker0 -Dspring.cloud.inetutils.ignoredInterfaces[1]=veth.* -
指定注册IP:
-Deureka.instance.ip-address=1.2.3.4 -
指定注册URL:
-Deureka.instance.homePageUrl=http://1.2.3.4:8080 -Deureka.instance.preferIpAddress=false
二、数据库部署
2.1 创建ApolloPortalDB
ApolloPortalDB只需在生产环境部署一套,支持两种创建方式:
手动导入SQL
source /path/to/apolloportaldb.sql
使用Flyway自动迁移(1.3.0+)
- 修改flyway-portaldb.properties配置
- 执行:
mvn -N -Pportaldb flyway:migrate
验证:
SELECT `Id`, `Key`, `Value`, `Comment` FROM `ApolloPortalDB`.`ServerConfig` LIMIT 1;
2.2 创建ApolloConfigDB
每个环境都需要独立部署一套ApolloConfigDB。
手动导入SQL
source /path/to/apolloconfigdb.sql
使用Flyway自动迁移(1.3.0+)
- 修改flyway-configdb.properties配置
- 执行:
mvn -N -Pconfigdb flyway:migrate
验证:
SELECT `Id`, `Key`, `Value`, `Comment` FROM `ApolloConfigDB`.`ServerConfig` LIMIT 1;
数据迁移
如非全新部署,需从其他环境迁移以下表数据:
- App表:所有应用
- AppNamespace表:所有命名空间
- Cluster表:默认集群(default)
- Namespace表:默认集群中的命名空间
三、服务端部署
3.1 获取安装包
有两种方式获取安装包:
3.1.1 直接下载预编译包
-
下载最新版本的:
- apollo-configservice-x.x.x.zip
- apollo-adminservice-x.x.x.zip
- apollo-portal-x.x.x.zip
-
配置数据库连接信息:
- 修改各服务config/application-github.properties中的数据库连接串
-
配置Portal的Meta Service地址:
- 编辑apollo-portal的config/apollo-env.properties
- 格式:
${env}.meta=http://${config-service-url:port}
3.1.2 通过源码构建
- 修改scripts/build.sh中的数据库连接信息
- 配置各环境meta service地址
- 执行构建:
./build.sh
构建完成后,安装包位于各模块的target目录下。
3.2 服务部署
3.2.1 部署apollo-configservice
- 上传对应环境的安装包
- 解压后执行:
scripts/startup.sh
JVM参数建议配置(可根据实际情况调整):
export JAVA_OPTS="-server -Xms6144m -Xmx6144m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=18"
注意:如需修改端口,需同步调整ApolloConfigDB.ServerConfig表中的eureka.service.url配置
3.2.2 部署apollo-adminservice
- 上传对应环境的安装包
- 解压后执行:
scripts/startup.sh
JVM参数建议配置:
export JAVA_OPTS="-server -Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=22"
3.2.3 部署apollo-portal
- 上传安装包
- 解压后执行:
scripts/startup.sh
四、服务端配置说明
4.1 ApolloPortalDB配置
apollo.portal.envs
定义Portal支持的环境列表,多个环境以逗号分隔,如:
apollo.portal.envs=dev,fat,uat,pro
apollo.portal.meta.servers
各环境Meta Service地址(1.6.0+),格式为JSON:
{
"dev":"http://1.1.1.1:8080",
"fat":"http://apollo.fat.xxx.com",
"uat":"http://apollo.uat.xxx.com",
"pro":"http://apollo.xxx.com"
}
4.2 ApolloConfigDB配置
eureka.service.url
Eureka服务地址,如:
eureka.service.url=http://127.0.0.1:8080/eureka/
五、验证部署
- 访问Portal界面(默认端口8070)
- 检查各环境配置是否正确加载
- 创建测试应用和配置,验证各功能是否正常
结语
通过本文的详细步骤,您应该已经完成了Apollo配置中心的分布式部署。Apollo的强大之处在于它的配置管理能力和环境隔离特性,能够很好地支持企业级应用的配置管理需求。如果在部署过程中遇到任何问题,可以参考官方文档中的常见问题解答部分。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0446
源启盛夏_AtomGit暑期开发者成长计划「源启盛夏」暑期校园开发者成长计划旨在激活校园开源力量,通过积分激励、认证扶持、资源倾斜等形式,引导高校组织和开发者完成「入驻 — 建项目 — 做贡献 — 获认证 — 得资源」的完整闭环。无论你是想带领社团入驻平台的组织者,还是希望用代码贡献证明自己的开发者,都能在这里找到属于你的成长路径。Markdown00
jiuwenswarmJiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0760
Hy3Hy3 是由腾讯混元团队研发的快慢思考融合的混合专家模型,总参数量 295B,激活参数 21B,MTP 层参数 3.8B。4 月底发布 Hy3 Preview 后,我们在 50 多个业务中获得了广泛的反馈,修复了各种体验问题,进一步提升了后训练的质量和规模。今天,我们发布 Hy3。它展现出显著强于同尺寸并比肩旗舰(参数规模往往是 Hy3 的 2~5 倍)开源模型的智能水平,显著提升了在各类产品和生产力任务中的实用价值。Python00
AscendNPU-IRAscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优C++0310
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00