zoukankan      html  css  js  c++  java
  • 布署配置管理中心apollo

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

    服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

    Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

    它具有以下特点

    统一管理不同环境、不同集群的配置
    
    Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
    同一份代码部署在不同的集群,可以有不同的配置,比如zk的地址等
    通过命名空间(namespace)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
    配置修改实时生效(热发布)
    
    用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。
    版本发布管理
    
    所有的配置发布都有版本概念,从而可以方便的支持配置的回滚。
    灰度发布
    
    支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。
    权限管理、发布审核、操作审计
    
    应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
    所有的操作都有审计日志,可以方便的追踪问题。
    客户端配置信息监控
    
    可以方便的看到配置在被哪些实例使用
    提供Java和.Net原生客户端
    
    提供了Java和.Net的原生客户端,方便应用集成
    支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
    同时提供了Http接口,非Java和.Net应用也可以方便的使用
    提供开放平台API
    
    Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。
    不过Apollo出于通用性考虑,对配置的修改不会做过多限制,只要符合基本的格式就能够保存。
    在我们的调研中发现,对于有些使用方,它们的配置可能会有比较复杂的格式,如xml, json,需要对格式做校验。
    还有一些使用方如DAL,不仅有特定的格式,而且对输入的值也需要进行校验后方可保存,如检查数据库、用户名和密码是否匹配。
    对于这类应用,Apollo支持应用方通过开放接口在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制
    部署简单
    
    配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少
    目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来
    Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

    一 快速部署 (单机,单环境)

    详情可参考官方文档https://github.com/ctripcorp/apollo/wiki/Quick-Start

    这里做简单记录:

    1.下载安装包

    2.安装mysql数据库。版本要求为5.6+

    3.创建数据库。包括两个。一个是元数据库,ApolloPortalDB。一个是环境数据库,ApolloConfigDB。相应的sql存放在安装包的sql目录下。库名可自定义。

    4.修改配置。主要是启动脚本。demo.sh.

    #apollo config db info
    apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
    apollo_config_db_username=用户名
    apollo_config_db_password=密码(如果没有密码,留空即可)
    
    # apollo portal db info
    apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
    apollo_portal_db_username=用户名
    apollo_portal_db_password=密码(如果没有密码,留空即可)

    5.启动。

    Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。

    执行demo.sh start命令。启动会很慢。

    如果遇到以下错误是正常的。

    注:在启动apollo-configservice的过程中会在日志中输出eureka注册失败的信息,如com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused。需要注意的是,这个是预期的情况,因为apollo-configservice需要向Meta Server(它自己)注册服务,但是因为在启动过程中,自己还没起来,所以会报这个错。后面会进行重试的动作,所以等自己服务起来后就会注册正常了

    6.如果一切正常的话。通过8080端口可以看到注册中心界面如下。

     通过8090端口可以看到哪下界面:

    通过8070端口可以看到如下界面:

     

     用户可以通过此界面创建一个项目。新增修改删除配置。并发布。如有错误可回滚上一版本。可创建灰度版本。可创建不同环境的配置。可查看配置发布历史,并选择版本回滚。

     7.创建

       创建一个项目,并发布一个配置:test->apollo

     8使用

    官方提供了java,.net客户端。也有网友提供了go,php,python等语言的http接口。这里使用java客户端。

    8.1 新建一个项目,加入pom.xml

    <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.0.0</version>
        </dependency>

    8.2创建appid,即哪一个项目,比如刚才我们创建了一个test项目的时候,会填写一个app.id,假如为test.

    官方实际上提供了3种配置方式 ,这里只选择在项目中配置文件的方式 。

    在resource目录下新建目录META-INF,然后创建文件app.properties.内容为app.id=test

     8.3创建Apollo Meta Server。即每一个环境的服务地址。

    官方同样提供了很多种创建方式。这里在本地的话,使用在项目中通过配置文件的方式指定。

    在resource目录下创建apollo-env.properties,内容为

    dev.meta=http://localhost:8080
    fat.meta=http://localhost:8180
    uat.meta=http://apollo.uat.xxx.com
    pro.meta=http://apollo.xxx.com

    目前只是单环境,实际上只需要修改dev.meta的内容。其它环境在多环境部署时介绍。

    8.4 指定环境 。哪怕是在单环境下,要使用配置,也是需要指定一个环境的。

    官方提供的指定方式也蛮多。在开发环境下,可直接在eclipse里设定。

    windon->preferences->java->Installed JREs

     8.5 java的api

    Config config = ConfigService.getAppConfig(); 
            String value = config.getProperty("test", "default");
            System.out.println("value = " + value);

    输出

    value = hello apollo

    应用非常简单。

    9 一些疑问。

    9.1 在服务器修改了配置后,它真的能做到官方所言1秒钟实时推送到客户端吗?

    可以。

    Config config = ConfigService.getAppConfig(); 
            while (true) {
                String value = config.getProperty("test", "default");
                System.out.println("time = " + System.currentTimeMillis() + " value = " + value);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

    输出

     9.2 配置实际上是保存在mysql里面的,频繁读取会有额外的性能压力吗?

    没有去调试去源码,但本地保存有一个缓存文件。在/opt/data/test/config-cache目录下,会有一个文件,保存有最新的配置数据。每次读取都是到这里获取。

     二多环境部署。

    1.直观上的区别 。首先我们来看快速单环境部署的目录。

    直接从官网下载安装包,解压,得到这样的目录,修改配置,直接启动demo.sh就可以启动了。非常简单。

    但是多环境布署的目录是这样的,假设部署DEV和FAT两个环境。

    dev下

    2.同样需要安装数据库。跟快速部署一样。一个是元数据库,ApolloPortalDB。环境数据库则需创建多个,ApolloConfigDB_DEV,ApolloConfigDB_FAT。相应的sql存放在安装包的sql目录下。库名可自定义。

    3.打开ApolloPortalDB库serverconfig表,修改apollo.portal.envs值,默认为dev,加入需要配置的其它环境。如fat,如自定义。不区分大小写。

    4.打开ApolloConfigDB_DEV或者 ApolloConfigDB_FAT库,打开serverconfig表,修改eureka.service.url注册服务中心地址。

    具体怎么修改呢?

    假设我们现在是要部署dev和fat两个环境,由单环境部署可知,服务启动会有三个端口,分别是配置中心8070,注册服务8080,admin服务8090,

    假设我们规划,由于8070端口只有一个

    dev环境中三个端口分别为 8070,8080,8090

    fat环境中三个端口分别为  8070,8180,8090

    那么ApolloConfigDB_DEV中由于默认关系可以不用修改,而ApolloConfigDB_FAT中则需要把eureka.service.url修改为http://localhost:8180/eureka/

     5准备工作完成,开始下载或者编译安装包。

    我选择的是下载源码,编译。在script目录下有个build.bat和build.sh文件,点击联网自动完成编译。

    获取三个目录apollo-adminservice apollo-configservice apollo-portal 下的target文件下的zip文件。放入创建好的dev/adminservice dev/configservice 目录下并解压。portal 只需放在一个目录 下。

    6首先启动portal

    首先在config目录下修改application-github.properties文件相关mysql配置

    # DataSource
    spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
    spring.datasource.username = root
    spring.datasource.password = 123456

    然后修改apollo-env.properties中各个环境注册中心的服务地址

    dev.meta=http://localhost:8080
    fat.meta=http://localhost:8180

    然后点击script目录下startup.sh启动。

    7启动dev环境

    7.1首先启动adminservcie,首先修改config目录下application-github.properties文件中mysql配置

    # DataSource
    spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB_DEV?characterEncoding=utf8
    spring.datasource.username = root
    spring.datasource.password = 123456

    修改script目录下start.sh中关于端口SERVER_PORT=8090。

    点击script目录下start.sh启动。

    7.2然后启动configservice,首先修改config目录下application-github.properties文件中mysql配置

    修改script目录下start.sh中关于端口SERVER_PORT=8080。

    点击script目录下start.sh启动。

    8启动fat环境

    8.1首先启动adminservice,首先修改config目录下application-github.properties文件中mysql配置

    # DataSource
    spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB_FAT?characterEncoding=utf8
    spring.datasource.username = root
    spring.datasource.password = 123456

    修改script目录下start.sh中关于端口SERVER_PORT=8190。

    点击script目录下start.sh启动。

    8.2然后启动configservice,首先修改config目录下application-github.properties文件中mysql配置

    修改script目录下start.sh中关于端口SERVER_PORT=8180。

    点击script目录下start.sh启动。

    9.启动成功后,通过8070端口可以看到如下画面,环境列表中出现了两个。

     在dev环境中加入配置test->apollodev,fat环境中加入test->apollofat,通过切换不同的环境可以得到不同的值。

     参考自apollo官方文档

    https://github.com/ctripcorp/apollo

     

  • 相关阅读:
    IE9 Beta首则演示视频泄露 狼人:
    浅析网页界面设计——首页设计 狼人:
    需警惕CSS3属性的书写顺序 狼人:
    IE9 Beta与四大浏览器基准测试对比 狼人:
    Ubuntu 9.04将在10月23日停止更新服务和技术支持 狼人:
    IE9对CSS3的支持情况概述 狼人:
    ASP.NET惊爆新安全漏洞 攻击者可访问任意文件 狼人:
    Rails3之父Yehuda离开Engine Yard投奔HTML5 狼人:
    实用HTML,CSS和JavaScript速查表 狼人:
    20个学习CSS的绝佳网站——让你从入门到精通 狼人:
  • 原文地址:https://www.cnblogs.com/eryuan/p/9590164.html
Copyright © 2011-2022 走看看