赞
踩
,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
四个核心模块及其主要功能
- ConfigService
提供配置获取接口
提供配置推送接口
服务于Apollo客户端- AdminService
提供配置管理接口
提供配置修改发布接口
服务于管理界面Portal- Client
为应用获取配置,支持实时更新
通过MetaServer获取ConfigService的服务列表
使用客户端软负载SLB方式调用ConfigService- Portal
配置管理界面
通过MetaServer获取AdminService的服务列表
使用客户端软负载SLB方式调用AdminService
官网下载:https://github.com/ctripcorp/apollo/tags
解压安装包后将apollo-configservice-1.3.0.jar, apollo-adminservice-1.3.0.jar, apollo-portal-1.3.0.jar放置于apollo
目录下
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB。ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套。
2个sql脚本的下载地址:
(前一个指定的版本)
https://github.com/ctripcorp/apollo/tree/1.8.2/scripts/sql
或者
https://github.com/ctripcorp/apollo/tree/master/scripts/sql
确保端口未被占用
Apollo默认会启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。
以windows为例启动命令
apollo-configservice
java -jar -Dserver.port=18080 ./apollo-configservice-1.8.2.jar
apollo-configservice启动的默认端口是8080
-Dserver.port=18080 :修改启动的端口
并且数据库也得改变
apollo-adminservice
java -jar -Dserver.port=18090 ./apollo-adminservice-1.8.2.jar
apollo-adminservice启动的默认端口是8090
-Dserver.port=18090 :修改启动的端口
apollo-portal
java -jar -Dserver.port=18070 ./apollo-portal-1.8.2.jar
三者有启动顺序,
1:configservice
2:adminservice
3:portal
test是之前就创建好的一个项目
appid就是项目的标识,里面配置了一些配置文件。
配置数据库信息
配置启动脚本
修改数据库地址
同Configservice一样,也连接configDB。
似Configservice一样,修改日志地址及启动端口
似configservice一样,找到对应的 startup.sh
暂时就应用dev和prod两个环境。
对应数据库也得相应配置
这dev,prod都是指向统一台服务器。配置了dev,prod也会同时改变。
2个env:dev,prod
2台linux服务器(A,B):dev在A,prod在B
A: configservice ,adminservice
B: configservice ,adminservice,portal
每多一个服务器(环境),这个新环境就配置config和admin,它俩配套同时都得有,但portal只需存在一个就可以
启动后
可以看到两台服务器的config,admin都已经启动好。
同样的key值server.port,value不一样,说明多env搭建成功,dev,prod在不同服务器上(准确说是不同数据库)
B服务器的portal找不到A服务器的adminservice
portal的日志
在阅览器http://ip:port/services/admin,查看adminservice的信息
可以看到,homepageurl是内网地址,原因可能是A的adminservice暴露的是内网地址所以B找不到A的adminservice
对展示页面的影响,只有prod环境,没有dev环境,并且页面报错(就不展示了)
解决办法:
对A,B的configservice和adminservice的启动脚本进行修改
新增的配置为:-Deureka.instance.prefer-ip-address=true -Deureka.instance.ip-address=公网ip
重启后,在访问A的 services/admin
页面也有dev和prod两种env环境。
首先创建一个新项目,并添加public的namespaces
公共的use 添加一个属性
切换到之前创建好的new项目,关联公共的use
项目启动连接pro环境
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.8.0</version>
</dependency>
version跟服务器版本下载的版本一致。
# 在应用启动阶段,向Spring容器注入被托管的application.properties文件的配置信息 apollo.bootstrap.enabled=true # apollo配置文件的命名空间(多个以 , 隔开),默认 application apollo.bootstrap.namespaces=application,times # 为了防止配置中心无法连接等问题,Apollo 会自动将配置本地缓存一份 apollo.cacheDir=/opt/data/apollo-config # 将 Apollo 加载提到初始化日志系统之前 # (将 Apollo 加载提到初始化日志系统之前,如果设置为 false,那么将打印出 Apollo 的日志信息, # 但是由于打印 Apollo 日志信息需要日志先启动,启动后无法对日志配置进行修改,所以 Apollo 不能管理应用的日志配置, # 如果设置为 true,那么 Apollo 可以管理日志的配置,但是不能打印出 Apollo 的日志信息) apollo.bootstrap.eagerLoad.enabled=false # 指定使用某个集群下的配置 apollo.cluster=DEFAULT # apollo配置中心地址。 apollo.meta=http://127.0.0.1:18080 # AppId是应用的身份信息,是配置中心获取配置的一个重要信息。 app.id=test
项目里的application文件
apollo上的配置
项目启动的结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。