配置中心 之 apollo
背景
部门接收了其他部门的老项目,配置中心使用的是apollo。由于之前一直使用的是nacos,所以还是
自己学习了一下。搭建了一个本地测试环境,目前项目运行正常,故这里记录下。
Apollo简介
Apollo是一个分布式配置中心,由携程研发的开源配置管理中心,可以集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo包括服务端
和客户端
两部分
Apollo特性
- Apollo提供一个统一的界面集中式管理不同环境、不同集群、不同命名空间的配置
- 同一份代码部署在不同的集群,可以有不同的配置
- 通过命名空间 ( namespace )可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
- 配置修改可以实时生效(即热发布)
- 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
- 权限管理、发布审核和操作审计
application (应用)
environment (环境)
cluster (集群)
namespace (命名空间)
Apollo执行流程
Spring Cloud Config、Apollo 与 Nacos 对比
本地单机版部署
依赖版本总览
jdk1.8+
mysql 5.7+
apollo 2.0.1
下载
# 创建各个服务目录
mkdir -vp /usr/local/apollo/{apollo-adminservice,apollo-configservie,apollo-portal} && cd /usr/local/apollo# 下载服务安装包
wget https://github.com/apolloconfig/apollo/releases/download/v2.0.1/apollo-adminservice-2.0.1-github.zip apollo-adminservice
wget https://github.com/apolloconfig/apollo/releases/download/v2.0.1/apollo-configservice-2.0.1-github.zip apollo-configservice
wget https://github.com/apolloconfig/apollo/releases/download/v2.0.1/apollo-portal-2.0.1-github.zip apollo-portal# 下载数据库文件
https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloconfigdb.sql
https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloportaldb.sql# 开始解压
unzip apollo-adminservice-2.0.1-github.zip -d /usr/local/apollo/
unzip apollo-configservice-2.0.1-github.zip -d /usr/local/apollo/
unzip apollo-portal-2.0.1-github.zip -d /usr/local/apollo/
配置数据库
创建两个数据库apolloconfigdb
, apolloportaldb
,并把刚才下载的数据库文件导入到对应的数据库中。
mysql -uroot -p < /root/apolloconfigdb.sql
mysql -uroot -p < /root/apolloportaldb.sql
类似于上面这样
配置服务
服务启动顺序 apollo-configservie
》 apollo-adminservice
》apollo-portal
备注: 网页服务只需要部署一个即可,其他服务如果是分布式,那就都部署了(具体ChatGPT下)。
配置apollo-configservice
#进入目录
cd /usr/local/apollo/apollo-configservie/config#编辑配置文件
vim application-github.properties
# 配置数据库信息,按实际填入自己的数据库链接地址以及认证信息
# DataSource
spring.datasource.url = jdbc:mysql://xxx:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = xxx
spring.datasource.password = xxx#启动测试命令,后期统一编写systemctl文件
cd /usr/local/apollo/apollo-configservie/scripts && ./startup.sh
apollo-adminservice
#进入目录
cd /usr/local/apollo/apollo-adminservice/config#编辑配置文件
vim application-github.properties
# 配置数据库信息,按实际填入自己的数据库链接地址以及认证信息
# DataSource
spring.datasource.url = jdbc:mysql://xxx:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = xxx
spring.datasource.password = xxx#程序测试
cd /usr/local/apollo/apollo-adminservice/scripts && ./startup.sh
配置apollo-portal
#进入目录
cd /usr/local/apollo/apollo-portal/config#编辑配置文件
vim application-github.properties
# 配置数据库信息,按实际填入自己的数据库链接地址以及认证信息
# DataSource
spring.datasource.url = jdbc:mysql://xxx:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = xxx
spring.datasource.password = xxx
配置apollo-portal的meta service信息
cd /usr/local/apollo/apollo-portal/config
vim apollo-env.properties
# 假设
DEV的apollo-configservice未绑定域名,地址是1.1.1.1:8080,
FAT的apollo-configservice绑定了域名apollo.fat.xxx.com,
UAT的apollo-configservice绑定了域名apollo.uat.xxx.com,
PRO的apollo-configservice绑定了域名apollo.xxx.com,那么可以如下修改各环境meta service服务地址,格式为${env}.meta=http://${config-service-url:port},如果某个环境不需要,也可以直接删除对应的配置项,这里就用了dev和pro环境dev.meta=http://192.168.3.132:8080
#fat.meta=http://localhost:8080
#uat.meta=http://localhost:8080
#lpt.meta=${lpt_meta}
#pro.meta=http://192.168.3.132:8080#启动服务
cd /usr/local/apollo/apollo-portal/scripts && ./startup.sh
登录网页测试
地址:http://localhost:8070/
初始账号 apollo
密码 admin
配置简单说明
配置环境
网页数据库中的serverconfig表:
环境取值范围:
public enum Env{
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
}
添加配置参数
创建应用 => 创建集群(可选) => 创建命名空间(可选) => 添加参数 => 发布参数
Springboot 使用Apollo
依赖
<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.4.0</version>
</dependency>
配置
apollo:bootstrap:eagerLoad:enabled: trueenabled: truenamespaces: common.config,application,network.configcluster: defaultmeta: http://localhost:8080
app:#对应apollo里面创建的项目名 jvm -Dapp.id 环境变量 APP_IDid: test
启动类上加注解 @EnableApolloConfig
参考文章
https://blog.csdn.net/yyuggjggg/article/details/122308489
https://www.cnblogs.com/yang5726685/p/18131746
https://blog.csdn.net/zhaoxinxiansheng/article/details/140541620
https://blog.csdn.net/qq_47183158/article/details/142211062