• 统一管理不同环境、不同集群的配置
○ Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
○ 同一份代码部署在不同的集群,可以有不同的配置,比如zk的地址等
○ 通过命名空间(namespace)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
○ 配置界面支持多语言(中文,English)
• 配置修改实时生效(热发布)
○ 用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。
• 版本发布管理
○ 所有的配置发布都有版本概念,从而可以方便的支持配置的回滚。
• 灰度发布
○ 支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。
• 权限管理、发布审核、操作审计
○ 应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
○ 所有的操作都有审计日志,可以方便的追踪问题。
• 客户端配置信息监控
○ 可以方便的看到配置在被哪些实例使用
目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来
Apollo支持4个维度管理Key-Value格式的配置:
1. application (应用)
2. environment (环境)
3. cluster (集群)
4. namespace (命名空间)
举例:一个应用可以部署多个环境,每个环境可以创建多个集群,每个集群下还可以有多个命名空间,根据需要进行创建。
一般可以只使用环境和命名空间进行配置,如:有n个项目,在dev环境下创建common和application两个命名空间,common用来写各个项目公用的配置,application写私有的配置。再创建local、test、pro等环境(也是创建common和application两个命名空间,不过只是举例,可以根据实际需求创建其他命名空间,每个命名空间就相当于一个properties配置文件),根据不同环境进行不同配置即可。
安装教程:
准备:jdk1.8,mysql5.6及以上
以下内容请仔细阅读每一行,不要漏掉某一行或某项配置
安装准备
安装之前先导入2个数据库,https://github.com/ctripcorp/apollo/tree/master/scripts/sql
两种安装方式
1. 直接下载安装包
○ 从GitHub Release页面下载预先打好的安装包
○ 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
2. 通过源码构建
○ 从GitHub Release页面下载Source code包或直接clone源码后在本地构建
○ 如果需要对Apollo的做定制开发,需要使用这种方式
采用第一种安装方式,从GitHub Release页面下载最新版本的apollo-configservice-x.x.x-github.zip、apollo-adminservice-x.x.x-github.zip和apollo-portal-x.x.x-github.zip即可。
启动服务前要配置数据库信息:(spring.datasource.url最好按照本文档中给出的连接配置,以免某些版本数据库连接出现问题)
1.修改adminservice,和configservice的config文件夹中application-github.properties中数据库配置信息
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username =
spring.datasource.password =
2.修改portalservice的config文件夹下application-github.properties中数据库配置信息
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloPortalDB?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
运行apollo步骤:
1.下载上述三个程序
2.导入上述2个数据库
3.在3个程序的配置中修改数据库连接信息
4.修改环境配置,详见Apollo配置中心,并注意端口问题,详见Apollo配置中心
5.启动服务,运行scripts文件夹中的start.sh启动服务 shutdown.sh可以关闭服务
环境配置
apollo根据环境的配置区分不同的运行环境,比如开发环境DEV,此环境的配置在开发时使用,生产环境PRO,此环境在生产环境下使用。
每个环境都要部署一份config和admin服务以及serviceconfig数据库,portal服务单独部署一份。
环境配置大致是2步:1.在apollo-portal的config/apollo-env.properties中配置env的地址,如图所示,假如一个环境想配置多个节点实现高可用,可以添加多个,用逗号分隔。2.修改对应环境下ApolloConfigDB 数据库中serverconfig表的eureka.service.url字段,与apollo-env.properties中配置env的地址一致。
每个环境可以根据实际情况配置在多台服务器,防止一台服务器挂掉后某个环境的配置就无法使用了
1. 下面以dev环境为例为dev环境新增一台服务器
2. (ApolloConfigDB 数据库) [dev 环境]
3. 修改表
http://localhost:8080/eureka/,
4. 修改
5. config\apollo-env.properties
6. dev.meta=
http://localhost:8080/eureka/,
7. 然后在打包到 localhost 环境部署 apollo-adminservice 和 apollo-configservice
(这里要注意 , 新部署的 5080端口 需要和 之前的 8080端口的程序 连接同一个数据库)
8. 这个时候启动 关闭8080端口的服务器 还是能继续使用dev环境
端口配置
portal服务默认端口8070,config服务默认8080,如果要更改端口号,需要在startup.sh中修改。
如果config更改端口还需要在apolloconfig的serviceconfig表中修改eureka.service.url字段,同时apollo-portal的config/apollo-env.properties中配置env的地址也要进行相应的修改
特别提醒:
zookeeper内置的admin服务会占用8080端口,apollo默认的8080会和zookeeper服务冲突,所以最好修改其中之一。
第一种方式:在zookeeper的conf文件夹下的zoo.cfg文件添加admin.serverPort=确保没有服务占用的端口号;
第二种方式:修改apollo configservice的端口号不为8080即可
以上提醒不仅限于zookeeper,应注意可能占用8080端口的其他服务。
集群配置(如果配置了多环境,集群一般不是必要的,可以略过集群配置)
同一个程序 一个环境下如果有多套配置,可以配置多个集群,
• 通过添加集群,可以使同一份程序在不同的集群(如不同的数据中心)使用不同的配置
• 如果不同集群使用一样的配置,则没有必要创建集群
• Apollo默认会读取机器上/opt/settings/server.properties(linux)或C:\opt\settings\server.properties(windows)文件中的idc属性作为集群名字, 如SHAJQ(金桥数据中心)、SHAOY(欧阳数据中心)
• 在这里创建的集群名字需要和机器上server.properties中的idc属性一致
使用教程
访问 portal服务 默认用户名apollo 密码admin
可以在主页创建项目,进入项目配置
• 私有Namespace的配置可以是yml,xml等格式、但是只有properties格式时才能直观的显示每个key对应的value以及修改时间,其他格式只能通过文本方式查看,没有表格页面。(所以还是用properties好一些。。)
• 公有Namespace只能使用properties格式的配置
集成Springboot
在需要apollo管理的项目中引入如下配置:
配置文件配置:
#每个项目的唯一的标识,配置中心通过这个来找到对应项目
app:
id: ${spring.application.name}
#configservice的地址
apollo:
服务的地址,如果配置了多个节点可以写多个,用逗号分隔
bootstrap:
#每个namespace对应apollo配置中心中的一组配置,如有多个用,分隔,不写默认是application
namespaces: application
enabled: true
eagerLoad:
enabled: true
注:@Value 注解修饰的变量,会读取配置文件中的配置,引入apollo配置中心后,将直接支持动态获取配置的值,配置修改后再去获取@Value注释的变量值也会更新。
拓展使用
灰度发布
通俗解释就是,一个namespace作用于多个项目时,创建一个灰度版本,可以在其中添加一部分配置,通过配置灰度规则只作用于部分项目,后续也可以将这部分配置全量发布,合并到正常版本中。
本地开发模式
Apollo客户端还支持本地开发模式,这个主要用于当开发环境无法连接Apollo服务器的时候,比如在邮轮、飞机上做相关功能开发。
在本地开发模式下,Apollo只会从本地文件读取配置信息,不会从Apollo服务器读取配置。
可以通过下面的步骤开启Apollo本地开发模式。
1 修改环境
修改/opt/settings/server.properties(Mac/Linux)或C:\opt\settings\server.properties(Windows)文件,设置env为Local:
env=Local
更多配置环境的方式请参考1.2.2 Environment
2 准备本地配置文件
在本地开发模式下,Apollo客户端会从本地读取文件,所以我们需要事先准备好配置文件。
2.1 本地配置目录
本地配置目录位于:
• Mac/Linux: /opt/data/{appId}/config-cache
• Windows: C:\opt\data\{appId}\config-cache
appId就是应用的appId,如100004458。
请确保该目录存在,且应用程序对该目录有读权限。
【小技巧】推荐的方式是先在普通模式下使用Apollo,这样Apollo会自动创建该目录并在目录下生成配置文件。 本地缓存文件名如图所示
2.2 本地配置文件
本地配置文件需要按照一定的文件名格式放置于本地配置目录下,文件名格式如下:
{appId}+{cluster}+{namespace}.properties
• appId就是应用自己的appId,如100004458
• cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default
• namespace就是应用使用的配置namespace,一般是application
标签:Apollo,中心,配置,环境,集群,apollo,properties From: https://blog.51cto.com/u_16167642/6528302