apollo配置中心部署到使用的心得总结

apollo配置中心架构剖析

架构图

 

四个核心模块及其主要功能

1. ConfigService

 

提供配置获取接口

提供配置推送接口

服务于Apollo客户端

 

2.AdminService

提供配置管理接口

提供配置修改发布接口

服务于管理界面Portal

 

3.Client

为应用获取配置,支持实时更新

通过MetaServer获取ConfigService的服务列表

使用客户端软负载SLB方式调用ConfigService

 

4.Portal

配置管理界面

通过MetaServer获取AdminService的服务列表

使用客户端软负载SLB方式调用AdminService

三个辅助服务发现模块

Eureka

用于服务发现和注册

Config/AdminService注册实例并定期报心跳

ConfigService住在一起部署

MetaServer

Portal通过域名访问MetaServer获取AdminService的地址列表

Client通过域名访问MetaServer获取ConfigService的地址列表

相当于一个Eureka Proxy

逻辑角色,和ConfigService住在一起部署

· 

 

NginxLB

和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表

和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表

和域名系统配合,协助用户访问Portal进行配置管理

 

总结:

1.该服务依赖mysql

2.多环境配置需要configserveradminserver 2 个项目

3.ConfigservermysqlDB不同

4.有写配置文件在源码中进行修改

 


 

服务下载地址:https://github.com/ctripcorp/apollo

架构参考文档:https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ

说明参考文档 : https://github.com/ctripcorp/apollo

Apollo搭建

Git地址 :   https://github.com/ctripcorp/apollo

1.下载并解压目录

 

2. 修改 /自己目录/scripts目录下的build.sh

 

注意: 如果需要修改DB或者配置多个环境的地址的话。必须重新进行编译,从该步骤重新执行

3. 初始化数据库

进入mysql   

Mysql -u用户 -p密码

Source /自己的目录/scripts/sql/apolloconfigdb.sql  (多环境需要多个)

Source /自己的目录/scripts/sql/apolloportaldb.sql  (只需要一个)

4. 执行  /自己目录/scripts目录下的build.sh  进行编译

第一次执行会比较慢。会编译所有的项目

5. 解压已编译的服务

需要的服务 apollo-configservice(服务)  和 apollo-adminservice(管理)和 apollo-portal(管理界面)

注意:多环境下 apollo-configservice(服务)  和 apollo-adminservice(管理)需要部署多个,但是apollo-portal(管理界面)只需要部署一个

进入/自己的目录/apollo-configservice/target/

解压apollo-configservice-0.11.0-SNAPSHOT-github.zip 到需要部署的目录

Unzip apollo-configservice-0.11.0-SNAPSHOT-github.zip -d 目录

apollo-adminserviceapollo-portal 服务解压同上

6.进入以上3个解压完服务的目录

需要修改/服务的目录/scripts/startup.sh

 

7.启动服务

Sh /服务的目录/scripts/startup.sh

停止

Sh /服务的目录/scripts/shutdown.sh

先启动所有环境的configserveradminserver

最后启动portalserver

Apollo管理界面

详细文档参考git :

https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D

默认用户超级管理员

apollo/admin

1. 创建用户

 

 

2. 创建项目

 

 

3.新增配置

有权限的人员才能进行配置,点击授权按钮可以对用户进行新增配置和发布进行授权

 

 

 

输入配置信息:

 

4.发布配置

有权限的用户才能进行发布

 

 

 

 

 

Apollo java Api 接入

详细文档参考

https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

1.1 环境要求

· Java: 1.7+

· Guava: 15.0+

Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0

1.2 必选设置

Apollo客户端依赖于AppIdEnvironment等环境信息来工作,所以请确保阅读下面的说明并且做正确的配置:

1.2.1 AppId

AppId是应用的身份信息,是从服务端获取配置的一个重要信息。

请确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:

app.id=YOUR-APP-ID

注:app.id是用来标识应用身份的唯一id,格式为string。

参考位置:

 

1.2.2 Environment

Apollo支持应用在不同的环境有不同的配置,所以Environment是另一个从服务器获取配置的重要信息。

Environment可以通过以下3种方式的任意一个配置:

1.通过Java System Property

可以通过Java的System Property env来指定环境

Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT

如果是运行jar文件,需要注意格式是java -Denv=YOUR-ENVIRONMENT -jar xxx.jar

注意key为全小写

 

2.通过操作系统的System Environment

还可以通过操作系统的System Environment ENV来指定

注意key为全大写

 

3.通过配置文件(暂时用了这个)

 

最后一个推荐的方式是通过配置文件来指定env=YOUR-ENVIRONMENT

对于Mac/Linux,文件位置为/opt/settings/server.properties

对于Windows,文件位置为C:\opt\settings\server.properties

(修改路径需要修改源码重新编译)

 

 

文件内容形如:

env=DEV

目前,env支持以下几个值(大小写不敏感):

DEV(开发)

FAT(测试)

UAT(预发)

PRO(发布)

 

1.2.3 本地缓存路径

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本地缓存路径位于以下路径,所以请确保/opt/dataC:\opt\data\目录存在,且应用有读写权限。

· Mac/Linux: /opt/data/{appId}/config-cache

· Windows: C:\opt\data\{appId}\config-cache

本地配置文件会以下面的文件名格式放置于本地缓存路径下:

{appId}+{cluster}+{namespace}.properties

· appId就是应用自己的appId,如100004458

· cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default

· namespace就是应用使用的配置namespace,一般是application 

文件内容以properties格式存储,比如如果有两个key,一个是request.timeout,另一个是batch,那么文件内容就是如下格式:

request.timeout=2000batch=2000

注:本地缓存路径也可用于容灾目录,如果应用在所有configservice都挂掉的情况下需要扩容,那么也可以先把配置从已有机器上的缓存路径复制到新机器上的相同缓存路径

2.Maven Dependency

由于客户端jar包中会包含meta server信息,无法上传一个统一的jar包到中央仓库,应用在实际使用时只需要按照如下方式引入即可。

注:经过测试需要上传私服,导入apollo-core-0.11.0-SNAPSHOT.jarapollo-client-0.11.0-SNAPSHOT.jar

3.客户端用法

Apollo支持API方式和Spring整合方式,该怎么选择用哪一种方式?

· API方式灵活,功能完备,配置值实时更新(热发布),支持所有Java环境。

· Spring方式接入简单,结合Spring有N种酷炫的玩法,如

Spring boot的@ConfigurationProperties方式

· Spring方式也可以结合API方式使用,如注入Apollo的Config对象,就可以照常通过API方式获取配置了:

@ApolloConfig

private Config config;

3 获取默认namespace的配置(application)

Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null

String someKey = "someKeyFromDefaultNamespace";

String someDefaultValue = "someDefaultValueForTheKey";

String value = config.getProperty(someKey, someDefaultValue);

通过上述的config.getProperty可以获取到someKey对应的实时最新的配置值。

另外,配置值从内存中获取,所以不需要应用自己做缓存。

3.2.3 Spring Annotation支持

Apollo同时还增加了两个新的Annotation来简化在Spring环境中的使用。

1. @ApolloConfig

 用来自动注入Config对象

2. @ApolloConfigChangeListener

 用来自动注册ConfigChangeListener

 

 

 

 

 

 

文档太简单了好多问题很难解决:

QQ群:375526581

问题论坛:https://github.com/ctripcorp/apollo/issues

 

 

 

自己做了一个springbootdemo

Git地址:  https://github.com/smillbob/apolloDemo

需要自己搞2个包。。。详见上面的打包流程

猜你喜欢

转载自blog.csdn.net/qq_33320785/article/details/80772810