Apollo配置中心学习教程

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

第一步:分了解一些名词

Apollo配置中心学习教程

   Apollo-config:配置服务中心,包括新增,修改的配置参数;客户端拉取新的,修改的配置参数。需要与数据库ApolloConfigDB连接。在多环境部署时,每一个环境需要部署一台,注意数据库连接地址的修该。需要注册发布到Eureka注册中心。

   Meta-Server:配置服务的注册服务中心,类似与zookeeper,eureka的作用,但仅限apollo相关服务使用。配置方式与aoollo-config一同启动,同一个jvm所以地址与apollo-config一样。

Apollo-Admin:配置发布新更新的管理后台,主要为管理web界面apollo-portal服务。需要连接数据库ApolloConfigDB。需要注册发到Eureka注册中心。

Apollo-Portal:WEB管理界面,具有用户,权限管理,不同环境,不同appId的配置文件发布,修改。需要连接数据库ApolloPortalDB,管理多个环境只需要一套,配置好不同环境的Meta-Server地址即可进行管理。

AppID:这是Apollo给定义的一个名词,没一个子项目必须有一个唯一的id,用与在发布配置参数时进行对每个子应用的区分。eg:userprod

Apollo-Client:只需要maven依赖apollo-client包,配置meta-server地址,appID即可。

 

 

第二步:Apollo项目源码的修改与服务端的发布

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

      

       打包,发布时的顺序

       Apollo-config  -> Apollo-Admin  -> Apollo-portal

       关闭服务时相反。

 

2.1:可使用修该源码的一些参数与实际项目更加符合。

系统原本默认的为DEV环境,其他源码中预置的环境与我们的项目不符合,进行修改,加入test,release两个环境配置(请根据你的实际项目来确认)。

  1. 假设需要添加的环境名称叫beta
  2. 修改com.ctrip.framework.apollo.core.enums.Env类,在其中加入BETA枚举:

public enum Env{

  LOCAL, DEV, BETA, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;

  ...

}

  1. 修改com.ctrip.framework.apollo.core.enums.EnvUtils类,在其中加入BETA枚举的转换逻辑:

 

public final class EnvUtils {

  public static Env transformEnv(String envName) {

    if (StringUtils.isBlank(envName)) {

      return Env.UNKNOWN;

    }

    switch (envName.trim().toUpperCase()) {

      ...

      case "BETA":

        return Env.BETA;

      ...

      default:

        return Env.UNKNOWN;

    }

  }

}

 

  1. 修改apollo-env.properties,增加beta.meta占位符:

local.meta=http://localhost:8080

dev.meta=${dev_meta}

fat.meta=${fat_meta}

beta.meta=${beta_meta}

uat.meta=${uat_meta}

lpt.meta=${lpt_meta}

pro.meta=${pro_meta}

  1. 修改com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider类,增加读取BETA环境的meta server地址逻辑:

public class MetaDomainConsts {

                   ...

                   domains.put(Env.BETA,

                 env.getProperty("beta_meta", prop.getProperty("beta.meta")));

                   ...

}

.

  1. 数据库的配置修改 ApolloPortalDB.ServerConfig.apollo.portal.envs = DEV,TEST,RELEASE

 

2.2 : 源码中配置参数的修改\

Apollo-Config

注释掉com.ctrip.framework.apollo.configservice.ConfigServiceApplication类上的

@EnableEurekaServer,统一注册到Shuaiche的eureka上

 

application.yml文件  application-name,server-port,logging-file三项的修改

bootstrap.yml文件   eureka-instance-hostname 地址与端口

configservice.properties文件,配置数据库的连接地址(注意不同环境打包时修改)

startup.sh启动脚本中修改 应用名,日志地址,服务端口,jvm参数等。

 

Apollo-Admin

 

application.yml文件  application-name,server-port,logging-file三项的修改

bootstrap.yml文件   eureka-instance-hostname 地址与端口

adminservice.properties文件, 配置数据库的连接地址(注意不同环境打包时修改)。

startup.sh启动脚本中修改 应用名,日志地址,服务端口,jvm参数等。

 

Apollo-Portal

apollo-env.properties:多环境的meta-server地址,使用占位符dev.meta=${dev_meta}

application.yml文件  application-name,server-port,logging-file三项的修改

portal.properties文件:配置数据库的连接地址。

startup.sh启动脚本中修改 应用名,日志地址,服务端口,jvm参数等。

 

最后在主项目中的script文件夹下

找到configDB与portalDB数据库的初使化的sql文件,按需求导入到mysql中。

修改打包脚本build.bat中的meta-server与数据库连接的配置参数.

 

最后使用build.bat打包脚本进行打包操作。

 

 

2.3 在虚拟机上进行部署

  分别上传打好包的文件

  apollo-configservice-1.3.0-SNAPSHOT-github.zip

  apollo-adminservice-1.3.0-SNAPSHOT-github.zip

  apollo-portal-1.3.0-SNAPSHOT-github.zip

Apollo配置中心学习教程

 

进入config文件夹,解压文件,进入script文件夹,使用脚本进行启动项目

Apollo配置中心学习教程

Apollo配置中心学习教程

 

其他项目的启动类似。

 

 

2.4 部署中需要注意的问题

 

  1:开放服务的端口(可以自己指定)

      eureka 8890

       apollo-adminservice 9090

       apollo-configservice 9080

       apollo-portal        9070

 

 2:AppId:代表一个应用的唯一的标识

    application.properties中指定  app.id=YOUR-APP-ID

    或者classpath:/META-INF/app.properties 文件中指定 app.id=YOUR-APP-ID

 

 3:当前虚拟机的环境(dev,test,release)指定(官方推荐第一种)

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

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

    或者修改启动脚本

    java -Dapollo.cacheDir=/opt/data/some-cache-dir -jar xxx.jar

   或者:application.properties或bootstrap.properties中指定

   apollo.cacheDir=/opt/data/some-cache-dir

 

 

  4: config与admin每个环境要部署一套,portal只需要部署一套,跟据你所部署情况做好hosts映射。

 Apollo配置中心学习教程

Apollo配置中心学习教程

 

5:Eureka的地址,ApolloConfigDB拥有*别,一定要注意修改

 Apollo配置中心学习教程

Ps:我现在使用hosts映射的方式去配置,因为这样不同环境中的eureka只需要同一个指定域名就可以了,不需要都 去修改ip地址。

 

 

第三步:客户端(具体应用的项目)的修改

       1:引入maven的依赖

     Apollo配置中心学习教程

 

       2:启动类上加入Apollo的注解

     Apollo配置中心学习教程

   

3:配置参数发布与修改的 监听器

 Apollo配置中心学习教程

4:使用Apollo的配置生效

 Apollo配置中心学习教程

 

5.配置文件application.properties

Apollo配置中心学习教程

Ps:注意hosts文件的映射

 

6:具体的参数获取值

Apollo配置中心学习教程

Ps:后边的参数表示默认值,在发布失败或者发布的类型不符合时,可以使用默认值。

 

 

第四步:WEB管理页面

Apollo配置中心学习教程

http://192.168.2.143:9070/  商品号为9070    username:apollo  password:admin(可以新增)

Apollo配置中心学习教程

Apollo配置中心学习教程

 

 

最五步:apollo里边还有几个特色功能

灰度发布:暂时没有用到

通过创建灰度版本,您可以对某些配置做灰度测试

灰度流程为:

  1.创建灰度版本

  2.配置灰度配置项

  3.配置灰度规则.如果是私有的namespace可以按照客户端的IP进行灰度,如果是公共的namespace则可以同时按AppId和客户端的IP进行灰度

  4.灰度发布

灰度版本最终有两种结果:全量发布和放弃灰度

全量发布:灰度的配置合到主版本并发布,所有的客户端都会使用合并后的配置

放弃灰度:删除灰度版本,所有的客户端都会使用回主版本的配置

注意事项:

  1. 如果灰度版本已经有灰度发布过,那么修改灰度规则后,无需再次灰度发布就立即生效。

 

集群:通过添加集群,可以使同一份程序在不同的集群(如不同的数据中心)使用不同的配置。

     Eg: ordercenter 部署了4个,其中的配置有不相同的,则可以按配置参数相同作为分组设置成集群。(如果相同环境下的ordercenter的配置是相同的就没有必要配置集群)

 

配置方法:/opt/settings/server.properties文件idc= 作为集群的名称

Apollo配置中心学习教程

 

Namespace:是配置项的集合,类似于一个配置文件的概念。

默认创建一个“application”的Namespace(现在只使用默认的这个)

分为private,public,关联的,相互可以覆盖,交集的。具体可以查看

https://github.com/ctripcorp/apollo/wiki/Apollo%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E4%B9%8B%E2%80%9CNamespace%E2%80%9D官方的文档