您的位置:首页 > 其它

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

2018-06-22 14:05 281 查看

apollo配置中心架构剖析架构图 

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

1. ConfigService 提供配置获取接口提供配置推送接口服务于Apollo客户端 2.AdminService提供配置管理接口提供配置修改发布接口服务于管理界面Portal 3.Client为应用获取配置,支持实时更新通过MetaServer获取ConfigService的服务列表使用客户端软负载SLB方式调用ConfigService 4.Portal配置管理界面通过MetaServer获取AdminService的服务列表使用客户端软负载SLB方式调用AdminService

三个辅助服务发现模块

Eureka用于服务发现和注册Config/AdminService注册实例并定期报心跳和ConfigService住在一起部署MetaServerPortal通过域名访问MetaServer获取AdminService的地址列表Client通过域名访问MetaServer获取ConfigService的地址列表相当于一个Eureka Proxy逻辑角色,和ConfigService住在一起部署·  NginxLB和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表和域名系统配合,协助用户访问Portal进行配置管理 总结:1.该服务依赖mysql 2.多环境配置需要configserver和adminserver ,2 个项目3.Configserver的mysqlDB不同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-adminservice和apollo-portal 服务解压同上

 

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

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

 

 

7.启动服务

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

停止

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

 

先启动所有环境的configserver和adminserver

最后启动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+

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

1.2 必选设置

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

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/data或C:\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.jar和apollo-client-0.11.0-SNAPSHOT.jar

3.客户端用法

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

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

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

o Spring boot的@ConfigurationProperties方式

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

 

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

Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never nullString 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   自己做了一个springboot的demo Git地址:  https://github.com/smillbob/apolloDemo需要自己搞2个包。。。详见上面的打包流程

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: