跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Linux系统下安装和配置Apollo配置中心 分布式环境部署指南

Apollo分布式部署核心卡点是数据库初始化顺序、eureka.service.url配置时机及$JAVA_HOME是否生效;MySQL 8.0+需先改认证插件再导入SQL,两库须分离且密码禁空格,application-github.properties中URL与环境须严格匹配,服务必须按configservice→adminservice→portal顺序启动并正确注册IP。 直接上结论:Apollo 分布式部署不是“装完三个包就完事”,核心卡点在数据库初始化顺序、
eureka.service.url
配置时机、以及
$JAVA_HOME
是否真正生效——90% 的启动失败都发生在这三处。 MySQL 8.0+ 连不上?先改认证插件再导入 SQL MySQL 8.0 默认用
caching_sha2_password
,但 Apollo 启动时会报
Client does not support authentication protocol
。这不是密码错,是驱动不认新插件。 用 root 登录 MySQL 后立即执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
必须先执行这条,再导入
apolloportaldb.sql
和
apolloconfigdb.sql
;跳过 portal 库会导致 Portal 根本打不开 两个库要分开建:
ApolloPortalDB
(只一套,供 Portal 用)、
ApolloConfigDB
(每个环境一套,DEV/FAT/UAT/PRO 各自独立) 密码里不能有空格,否则
spring.datasource.password
解析失败,日志里只显示“Connection refused”,实际是连接池没起来 application-github.properties 里哪些配置不能错 这个文件在
apollo-configservice/conf/
和
apollo-adminservice/conf/
下各一份,内容高度相似但用途不同。最容易被忽略的是:
spring.datasource.url
必须指向对应环境的
ApolloConfigDB
(比如 DEV 环境就写
jdbc:mysql://10.1.1.1:3306/ApolloConfigDB_DEV
),不能全写 localhost —— 分布式部署时 ConfigService 和 DB 往往不在同一台机器
eureka.service.url
不是启动后才配,而是在启动前就得设好。如果只部署单节点,可写
http://localhost:8080/eureka/
;多节点必须提前在
ApolloConfigDB.ServerConfig
表里更新:
UPDATE ServerConfig SET Value='http://10.1.1.1:8080/eureka/,http://10.1.1.2:8080/eureka/' WHERE `Key`='eureka.service.url';
apollo.profile
要显式设为
github
,否则读不到
application-github.properties
,而是 fallback 到空配置 服务启动顺序和网络注册问题 ConfigService 启动失败,大概率不是它自己崩了,而是它注册不到 Eureka 或者注册了错误 IP。常见现象是
curl http://127.0.0.1:8080/eureka/apps
返回空或 404。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 必须按
configservice → adminservice → portal
顺序启动,Portal 依赖 AdminService 提供 API,AdminService 又依赖 ConfigService 的元数据服务 如果机器有 docker0 或 veth* 网卡,ConfigService 会默认把 docker 网段 IP 注册进 Eureka,导致客户端连不上。解决方法是在
startup.sh
的 JVM 参数里加:
-Dspring.cloud.inetutils.ignoredInterfaces[0]=docker0 -Dspring.cloud.inetutils.ignoredInterfaces[1]=veth.*
Portal 访问不了?检查
apollo-portal/conf/apollo-env.properties
,里面每个环境的 meta 地址必须指向 ConfigService 的真实域名或 IP,例如:
dev.meta=http://10.1.1.1:8080
,不能写
localhost
验证是否真跑通的三个关键 curl 别光看进程在不在,得看服务之间能不能互相说话: ConfigService 自检:
curl -s http://10.1.1.1:8080/eureka/apps | grep CONFIGSERVICE
—— 应该返回一个实例 AdminService 是否注册成功:
curl -s http://10.1.1.1:8080/eureka/apps | grep ADMINSERVICE
—— 如果没有,说明它没连上 ConfigService 的 Eureka Portal 能否拉到配置:
curl "http://10.1.1.1:8070/configs/demo/DEV/application?ip=127.0.0.1"
—— 替换
demo
为你的 appId,返回 JSON 才算通 最易被绕开的细节:Portal 的
apollo-env.properties
是静态配置,改完必须重启 Portal;而 ConfigService 的
eureka.service.url
是运行时从 DB 加载的,改完 DB 后只需发个
POST /notify
触发刷新,不用重启。

相关文章