Apollo配置中心

上传人:痛*** 文档编号:109997872 上传时间:2022-06-17 格式:DOC 页数:44 大小:1.32MB
收藏 版权申诉 举报 下载
Apollo配置中心_第1页
第1页 / 共44页
Apollo配置中心_第2页
第2页 / 共44页
Apollo配置中心_第3页
第3页 / 共44页
资源描述:

《Apollo配置中心》由会员分享,可在线阅读,更多相关《Apollo配置中心(44页珍藏版)》请在装配图网上搜索。

1、wordApollo配置中心资料来源:更多资料请参考:设计一 总体设计1根底模型2架构模块3 各模块概要介绍1 Config Service 提供配置获取接口 提供配置更新推送接口基于 long polling o 服务端使用Spring DeferredResult实现异步化,从而大大增加长连接数量o 目前使用的tomcat embed默认配置是最多10000个连接可以调整,使用了4C8G的虚拟机实测可以支撑10000个连接,所以满足需求一个应用实例只会发起一个长连接。 接口服务对象为Apollo客户端2 Admin Service 提供配置管理接口 提供配置修改、发布等接口 接口服务对象为

2、Portal3 Meta Server Portal通过域名访问Meta Server获取Admin Service服务列表IP+Port Client通过域名访问Meta Server获取Config Service服务列表IP+Port Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client 增设一个Meta Server的角色主要是为了封装服务发现的细节,对Portal和Client而言,永远通过一个接口获取Admin Service和Config Service的服务信息,而不需要关心背后实际的

3、服务注册和发现组件 Meta Server只是一个逻辑角色,在部署时和Config Service是在一个JVM进程中的4 Eureka 基于Eureka和Spring Cloud Netflix提供服务注册和发现 Config Service和Admin Service会向Eureka注册服务,并保持心跳 为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的通过Spring Cloud Netflix5 Portal 提供Web界面供用户管理配置 通过Meta Server获取Admin Service服务列表IP+Port,通过IP+Port访问服务

4、在Portal侧做load balance、错误重试6 Client Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能 通过Meta Server获取Config Service服务列表IP+Port,通过IP+Port访问服务 在Client侧做load balance、错误重试二、服务端设计1 配置发布后的实时推送设计在配置中心中,一个重要的功能就是配置发布后实时推送到客户端。下面我们简要看一下这块是怎么设计实现的。上图简要描述了配置发布的大致过程:1. 用户在Portal操作配置发布2. Portal调用Admin Service的接口操作发布3. Admin Servi

5、ce发布配置后,发送ReleaseMessage给各个Config Service4. Config Service收到ReleaseMessage后,通知对应的客户端2 发送ReleaseMessage的实现方式Admin Service在配置发布后,需要通知所有的Config Service有配置发布,从而Config Service可以通知对应的客户端来拉取最新的配置。从概念上来看,这是一个典型的消息使用场景,Admin Service作为producer发出消息,各个Config Service作为consumer消费消息。通过一个消息组件Message Queue就能很好的实现Adm

6、in Service和Config Service的解耦。在实现上,考虑到Apollo的实际使用场景,以与为了尽可能减少外部依赖,我们没有采用外部的消息中间件,而是通过数据库实现了一个简单的消息队列。实现方式如下:1. Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的AppId+Cluster+Namespace,参见DatabaseMessageSender2. Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录,参见ReleaseMessageScanner3. Conf

7、ig Service如果发现有新的消息记录,那么就会通知到所有的消息监听器ReleaseMessageListener,如NotificationControllerV2,消息监听器的注册过程参见ConfigServiceAutoConfiguration4. NotificationControllerV2得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端示意图如下:2.1.2 Config Service通知客户端的实现方式上一节中简要描述了NotificationControllerV2是如何得知有配置发布的,那NotificationController

8、V2在得知有配置发布后是如何通知到客户端的呢?实现方式如下:1. 客户端会发起一个请求到Config Service的notifications/v2接口,也就是NotificationControllerV2,参见RemoteConfigLongPollService2. NotificationControllerV2不会立即返回结果,而是通过Spring DeferredResult把请求挂起3. 如果在30秒内没有该客户端关心的配置发布,那么会返回状态码304给客户端4. 如果有该客户端关心的配置发布,NotificationControllerV2会调用DeferredResult的

9、setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回。客户端从返回的结果中获取到配置变化的namespace后,会立即请求Config Service获取该namespace的最新配置。三、客户端设计上图简要描述了Apollo客户端的实现原理:1. 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。通过 Long Polling实现2. 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。 o 这是一个fallback机制,为了防止推送机制失效导致配置不更新o 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会

10、返回304 - Not Modifiedo 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: 来覆盖,单位为分钟。3. 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中4. 客户端会把从服务端获取到的配置在本地文件系统缓存一份 o 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置5. 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知Java客户端应用一、准备工作1.1 环境要求 Java: 1.7+ Guava: 15.0+ o1.2 必选设置Apollo客户端依赖于AppId,Environment等

11、环境信息来工作 1.2.1 AppIdAppId是应用的身份信息,是从服务端获取配置的一个重要信息。请确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:app.id=YOUR-APP-ID文件位置参考如下:也可通过System Property传入app.id信息,如-Dapp.id=YOUR-APP-ID注:app.id是用来标识应用身份的唯一id,格式为string。1.2.2 EnvironmentApollo支持应用在不同的环境有不同的配置,所以Environment是另一个从服务器获取配置的重要信息。Environment可以通过以下

12、3种方式的任意一个配置:1. 通过Java System Propertyo 可以通过Java的System Property env来指定环境o 在Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT 如果是运行jar文件,需要注意格式是 o 注意key为全小写2. 通过操作系统的System Environmento 还可以通过操作系统的System Environment ENV来指定o 注意key为全大写3. 通过配置文件o 最后一个推荐的方式是通过配置文件来指定env=YOUR-ENVIRONMENTo 对于Mac/Linux,文件位置为 o 对于Window

13、s,文件位置为 文件内容形如:env=DEV目前,env支持以下几个值大小写不敏感 DEV FAT UAT目前不设UAT环境 PRO注:运行时会通过env信息匹配meta server信息,比如env是DEV的话,就会读取dev_meta信息。如果希望在运行时覆盖meta server信息,有两个方法:1. 通过-Denv_meta=xxx来覆盖,如-Ddev_meta=:/someIp:80802. 准备一份单独的apollo-env.properties,放在程序运行的classpath中,或者放在程序运行目录下,具体可以参考apollo-env.properties的加载逻辑 - Res

14、ourceUtils和,需要注意的是在apollo-env.properties中需要用形如env.meta=xxx来覆盖,如dev.meta=:/someIp:8080。1.2.3 本地缓存路径Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。本地缓存路径位于以下路径,所以请确保/opt/data或C:optdata目录存在,且应用有读写权限。 Mac/Linux: /opt/data/appId/config-cache Windows: C:optdataappIdconfig-cache本

15、地配置文件会以下面的文件名格式放置于本地缓存路径下:appId+cluster+namespace.properties appId就是应用自己的appId,如100004458 cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default namespace就是应用使用的配置namespace,一般是application 文件内容以properties格式存储,比如如果有两个key,一个是request.timeout,另一个是batch,那么文件内容就是如下格式:=2000batch=2000注:本地缓存路径也可用于容灾目录,如果应用在所有config serv

16、ice都挂掉的情况下需要扩容,那么也可以先把配置从已有机器上的缓存路径复制到新机器上的一样缓存路径1.2.4 可选设置Cluster集群Apollo支持配置按照集群划分,也就是说对于一个appId和一个环境,对不同的集群可以有不同的配置。如果需要使用这个功能,你可以通过以下方式来指定运行时的集群:1. 通过Java System Propertyo 我们可以通过Java的System Property设置来指定运行时集群注意key为全小写o 例如,可以在程序启动时通过-Dapollo.cluster=SomeCluster来指定运行时的集群为SomeCluster2. 通过配置文件o 首先确保

17、Mac/Linux或Windows在目标机器上存在o 在这个文件中,可以设置数据中心集群,如idc=xxxo 注意key为全小写Cluster Precedence集群顺序1. 如果和idc同时指定:o 我们会首先尝试从指定的集群加载配置o 如果没找到任何配置,会尝试从idc指定的集群加载配置o 如果还是没找到,会从默认的集群default加载2. 如果只指定了:o 我们会首先尝试从指定的集群加载配置o 如果没找到,会从默认的集群default加载3. 如果只指定了idc:o 我们会首先尝试从idc指定的集群加载配置o 如果没找到,会从默认的集群default加载4. 如果和idc都没有指定:

18、o 我们会从默认的集群default加载配置二、Maven Dependency由于客户端jar包中会包含meta server信息,无法上传一个统一的jar包到中央仓库,所以请按照分布式部署指南的文档说明打包并上传到自己公司的Maven私服。应用在实际使用时只需要按照如下方式引入即可。 .ctrip.framework.apollo apollo-client 0.9.1 三、客户端用法Apollo支持API方式和Spring整合方式,该怎么选择用哪一种方式? API方式灵活,功能完备,配置值实时更新热发布,支持所有Java环境。 Spring方式接入简单,结合Spring有N种酷炫的玩法,

19、如 o Placeholder方式: 代码中使用,如:Value($someKeyFromApollo:someDefaultValue) application.properties中使用,如:spring.datasource.url: $someKeyFromApollo:someDefaultValueo Spring boot的ConfigurationProperties方式o 缺点是这类注入的值在变化后不会重新注入,需要重启才会更新,如果需要配置值实时更新,可以参考后续3.2.2 Spring Placeholder的使用的说明 Spring方式也可以结合API方式使用,如注入A

20、pollo的Config对象,就可以照常通过API方式获取配置了: ApolloConfigprivateConfig config; /inject config for namespace application3.1 API使用方式API方式是最简单、高效使用Apollo配置的方式,不依赖Spring框架即可使用。3.1.1 获取默认namespace的配置applicationConfig config =ConfigService.getAppConfig(); /config instance is singleton for each namespace and is never

21、 nullString someKey =someKeyFromDefaultNamespace;String someDefaultValue =someDefaultValueForTheKey;String value = config.getProperty(someKey, someDefaultValue);通过上述的可以获取到someKey对应的实时最新的配置值。另外,配置值从内存中获取,所以不需要应用自己做缓存。3.1.2 监听配置变化事件监听配置变化事件只在应用真的关心配置变化,需要在配置变化时得到通知时使用,比如:数据库连接串变化后需要重建连接等。如果只是希望每次都取到最新

22、的配置的话,只需要按照上面的例子,调用即可。Config config =ConfigService.getAppConfig(); /config instance is singleton for each namespace and is never nullconfig.addChangeListener(newConfigChangeListener() OverridepublicvoidonChange(ConfigChangeEventchangeEvent) System.out.println(Changes for namespace + changeEvent.getN

23、amespace();for (String key : changeEvent.changedKeys() ConfigChange change = changeEvent.getChange(key);System.out.println(String.format(Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s, change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType(); )

24、;3.1.3 获取公共Namespace的配置String somePubliamespace =CAT;Config config =ConfigService.getConfig(somePubliamespace); /config instance is singleton for each namespace and is never nullString someKey =someKeyFromPubliamespace;String someDefaultValue =someDefaultValueForTheKey;String value = config.getPrope

25、rty(someKey, someDefaultValue);3.2 Spring整合方式3.2.1 配置Apollo也支持和Spring整合Spring 3.1.1+,只需要做一些简单的配置就可以了。Apollo目前既支持比拟传统的基于XML的配置,也支持目前比拟流行的基于Java推荐的配置。需要注意的是,如果之前有使用的,请替换成。Spring 3.1以后就不建议使用PropertyPlaceholderConfigurer了,要改用PropertySourcesPlaceholderConfigurer。3.2.1.1 基于XML的配置注:需要把apollo相关的xml namespac

26、e加到配置文件头上,不然会报xml语法错误。 3.注入多个namespace,并且指定顺序Spring的配置是有顺序的,如果多个property source都有同一个key,那么最终是顺序在前的配置生效。apollo:config如果不指定order,那么默认是最低优先级。 3.2.1.2 基于Java的配置推荐相对于基于XML的配置,基于Java的配置是目前比拟流行的方式,也是Spring Boot的默认配置方式。注意EnableApolloConfig要和Configuration一起使用,不然不会生效。/这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入app

27、lication namespace的配置到Spring环境中ConfigurationEnableApolloConfigpublicclassAppConfig BeanpublicTestJavaConfigBeanjavaConfigBean() returnnewTestJavaConfigBean(); ConfigurationEnableApolloConfigpublicclassSomeAppConfig BeanpublicTestJavaConfigBeanjavaConfigBean() returnnewTestJavaConfigBean(); /这个是稍微复杂一

28、些的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中ConfigurationEnableApolloConfig(, )publicclassAnotherAppConfig 3.注入多个namespace,并且指定顺序/这个是最复杂的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中,并且顺序在application前面ConfigurationEnableApolloConfig(order=2)publicclassSomeAppConfig BeanpublicTes

29、tJavaConfigBeanjavaConfigBean() returnnewTestJavaConfigBean(); ConfigurationEnableApolloConfig(value= , , order=1)publicclassAnotherAppConfig 3.2.2 Spring Placeholder的使用Spring应用通常会使用Placeholder来注入配置,使用的格式形如$someKey:someDefaultValue,如$timeout:100。冒号前面的是key,冒号后面的是默认值。建议在实际使用时尽量给出默认值,以免由于key没有定义导致运行时错误

30、。出于安全性考虑,目前placeholder只会在启动的时候赋值,在运行过程中即便在Apollo上修改发布了配置,placeholder的值也不会更新。如果需要运行时动态更新placeholder的值,有以下几种方式:1. 程序监听Apollo的ConfigChangeListener如ApolloConfigChangeListener,然后通过自己的代码来更新placeholder的值。2. 不使用placeholder方式获取配置,而是直接从config对象中获取配置。样例代码可以参考3.2.3 Spring Annotation支持的getBatch和getTimeout方法。3. 【

31、推荐】使用Spring Cloud的RefreshScopeo 在需要刷新配置的bean上加RefreshScopeo 加一个Apollo的ConfigChangeListener,然后在配置变化时调用RefreshScope的refreshAll()或者refresh(String name)的方法。o 如果要刷新的不是自己的bean,而是spring cloud的bean,如spring cloud zuul,那么可以调用org.springframework.cloud.context.refresh.ContextRefresher#refresh来刷新配置o 相关代码实现,可以参考a

32、pollo-demo项目中的和o 在非Spring Boot环境使用RefreshScope需要引入RefreshAutoConfiguration,引入方式可以参考apollo-demo项目中的相关配置代码:JavaConfig示例,XmlConfig示例3.2.2.1 XML使用方式假设我有一个TestXmlBean,它有两个配置项需要注入:publicclassTestXmlBean privateint timeout;privateint batch;publicvoidsetTimeout(inttimeout) this.timeout = timeout; publicvoid

33、setBatch(intbatch) this.batch = batch; publicintgetTimeout() return timeout; publicintgetBatch() return batch; 那么,我在XML中会使用如下方式来定义假设应用默认的application namespace中有timeout和batch的配置项: 3.2.2.2 Java Config使用方式假设我有一个TestJavaConfigBean,通过Java Config的方式还可以使用Value的方式注入:publicclassTestJavaConfigBean Value($time

34、out:100)privateint timeout;privateint batch;Value($batch:200)publicvoidsetBatch(intbatch) this.batch = batch; publicintgetTimeout() return timeout; publicintgetBatch() return batch; 在Configuration类中按照下面的方式使用假设应用默认的application namespace中有timeout和batch的配置项:ConfigurationEnableApolloConfigpublicclassApp

35、Config BeanpublicTestJavaConfigBeanjavaConfigBean() returnnewTestJavaConfigBean(); 3.2.2.3 ConfigurationProperties使用方式Spring Boot提供了ConfigurationProperties把配置注入到bean对象中。Apollo也支持这种方式,下面的例子会把和分别注入到SampleRedisConfig的expireSeconds和mandTimeout字段中。ConfigurationProperties(prefix=)publicclassSampleRedisCon

36、fig privateint expireSeconds;privateint mandTimeout;publicvoidsetExpireSeconds(intexpireSeconds) this.expireSeconds = expireSeconds; publicvoidsetmandTimeout(intmandTimeout) thismandTimeout = mandTimeout; 在Configuration类中按照下面的方式使用假设应用默认的application namespace中有和的配置项:ConfigurationEnableApolloConfigpub

37、licclassAppConfig BeanpublicSampleRedisConfigsampleRedisConfig() returnnewSampleRedisConfig(); 3.2.3 Spring Annotation支持Apollo同时还增加了两个新的Annotation来简化在Spring环境中的使用。1. ApolloConfig o 用来自动注入Config对象2. ApolloConfigChangeListener o 用来自动注册ConfigChangeListener使用样例如下:publicclassTestApolloAnnotationBean Apol

38、loConfigprivateConfig config; /inject config for namespace applicationApolloConfig(application)privateConfig anotherConfig; /inject config for namespace applicationApolloConfig()privateConfig yetAnotherConfig; Value($batch:100)privateint batch;/config change listener for namespace applicationApolloC

39、onfigChangeListenerprivatevoidsomeOnChange(ConfigChangeEventchangeEvent) /update injected value of batch if it is changed in Apolloif (changeEvent.isChanged(batch) batch = config.getIntProperty(batch, 100); /config change listener for namespace applicationApolloConfigChangeListener(application)priva

40、tevoidanotherOnChange(ConfigChangeEventchangeEvent) /do something ApolloConfigChangeListener(application, )privatevoidyetAnotherOnChange(ConfigChangeEventchangeEvent) /do something /example of getting config from Apollo directly/this will always return the latest value of timeoutpublicintgetTimeout(

41、) return config.getIntProperty(timeout, 200); /example of getting config from injected value/the program needs to update the injected value when batch is changed in Apollo using ApolloConfigChangeListener shown abovepublicintgetBatch() returnthis.batch; 在Configuration类中按照下面的方式使用:ConfigurationEnableA

42、polloConfigpublicclassAppConfig BeanpublicTestApolloAnnotationBeantestApolloAnnotationBean() returnnewTestApolloAnnotationBean(); 3.2.4 已有配置迁移很多情况下,应用可能已经有不少配置了,比如Spring Boot的应用,就会有bootstrap.properties, application.properties等配置。在应用接入Apollo之后,这些配置是可以非常方便的迁移到Apollo的,具体步骤如下:1. 在Apollo为应用新建项目2.3. 把原先配置

43、必须是properties格式复制一下,然后通过Apollo提供的文本编辑模式全部粘帖到应用的application namespace,发布配置 o 如果原来是其它格式,如yml,请先转成properties格式4.如: = reservation-service = 8080 = ERROR = :/127.0.0.1:8761/eureka/ = true = true = true = 60 = true3.3 Demo项目中有一个样例客户端的项目:apollo-demo,具体信息可以参考Apollo开发指南中的2.3 Java样例客户端启动局部。四、客户端设计上图简要描述了Apoll

44、o客户端的实现原理:1. 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。通过 Long Polling实现2. 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。 o 这是一个fallback机制,为了防止推送机制失效导致配置不更新o 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modifiedo 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: 来覆盖,单位为分钟。3. 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中4. 客户端会把从服

45、务端获取到的配置在本地文件系统缓存一份 o 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置5. 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知五、本地开发模式Apollo客户端还支持本地开发模式,这个主要用于当开发环境无法连接Apollo服务器的时候,比如在邮轮、飞机上做相关功能开发。在本地开发模式下,Apollo只会从本地文件读取配置信息,不会从Apollo服务器读取配置。可以通过下面的步骤开启Apollo本地开发模式。5.1 修改环境修改/opt/settings/server.propertiesMac/Linux或C:optsettingsserver.pr

46、opertiesWindows文件,设置env为Local:env=Local更多配置环境的方式请参考1.2.2 Environment5.2 准备本地配置文件在本地开发模式下,Apollo客户端会从本地读取文件,所以我们需要事先准备好配置文件。5.2.1 本地配置目录本地配置目录位于: Mac/Linux: /opt/data/appId/config-cache Windows: C:optdataappIdconfig-cacheappId就是应用的appId,如100004458。请确保该目录存在,且应用程序对该目录有读权限。【小技巧】 推荐的方式是先在普通模式下使用Apollo,这样

47、Apollo会自动创建该目录并在目录下生成配置文件。5.2.2 本地配置文件本地配置文件需要按照一定的文件名格式放置于本地配置目录下,文件名格式如下:appId+cluster+namespace.properties appId就是应用自己的appId,如100004458 cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default namespace就是应用使用的配置namespace,一般是application 文件内容以properties格式存储,比如如果有两个key,一个是request.timeout,另一个是batch,那么文件内容就是如下格式:=

48、2000batch=20005.3 修改配置在本地开发模式下,Apollo不会实时监测文件内容是否有变化,所以如果修改了配置,需要重启应用生效。分布式部署一、准备工作1.1 Java Apollo服务端:1.8+ Apollo客户端:1.7+1.2 MySQL 版本要求:5.6.5+连接上MySQL后,可以通过如下命令检查:SHOW VARIABLES WHERE Variable_name =version;Variable_nameValueversion环境分布式部署需要事先确定部署的环境以与部署方式。Apollo目前支持以下环境: DEV o 开发环境 FAT o 测试环境,相当于al

49、pha环境(功能测试) UAT o 集成环境,相当于beta环境回归测试 PRO o 生产环境以ctrip为例,我们的部署策略如下: Portal部署在生产环境的机房,通过它来直接收理FAT、UAT、PRO等环境的配置 Meta Server、Config Service和Admin Service在每个环境都单独部署,使用独立的数据库 Meta Server、Config Service和Admin Service在生产环境部署在两个机房,实现双活 Meta Server和Config Service部署在同一个JVM进程内,Admin Service部署在同一台服务器的另一个JVM进程内我

50、们的部署策略网络策略分布式部署的时候,apollo-configservice和apollo-adminservice需要把自己的IP和端口注册到Meta Serverapollo-configservice本身。Apollo客户端和Portal会从Meta Server获取服务的地址IP+端口,然后通过服务地址直接访问。所以如果实际部署的机器有多块网卡如docker,或者存在某些网卡的IP是Apollo客户端和Portal无法访问的如网络安全限制,那么我们就需要在apollo-configservice和apollo-adminservice中做相关限制以防止Eureka将这些网卡的IP注册

51、到Meta Server。具体文档可以参考Ignore Network Interfaces章节。具体而言,就是分别编辑和,然后把需要忽略的网卡加进去。如下面这个例子就是对于apollo-configservice,把docker0和veth.*的网卡在注册到Eureka时忽略掉。 spring: application: name: apollo-configservice profiles: active: $apollo_profile cloud: inetutils: ignoredInterfaces: - docker0 - veth.*注意,对于application.yml修

52、改时要小心,千万不要把其它信息改错了,如spring.application.name等。另外一种方式是直接指定要注册的IP,可以修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,参加以下配置eureka:instance:ip-address: $指定的IP最后一种方式是直接指定要注册的IP+PORT,可以修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,参加以下配置eureka:instance:homePageUrl: :/$指定的IP:$指定的Po

53、rtpreferIpAddress: false值得注意的一点是,上述的配置都可以通过JVM System Property在运行时传入,如-Deureka.instance.homePageUrl=:/$指定的IP:$指定的Port二、部署步骤2.1 创建数据库Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。2.1.1 创建ApolloPortalDB通过各种

54、MySQL客户端导入即可。下面以MySQL原生客户端为例:source /your_local_path/sql/apolloportaldb.sql导入成功后,可以通过执行以下sql语句来验证:selectId, Key, Value, mentfromApolloPortalDB.ServerConfiglimit1;IdKeyValuement1dev可支持的环境列表注:ApolloPortalDB只需要在生产环境部署一个即可2.1.2 创建ApolloConfigDB通过各种MySQL客户端导入即可。下面以MySQL原生客户端为例:source /your_local_path/sql

55、/apolloconfigdb.sql导入成功后,可以通过执行以下sql语句来验证:selectId, Key, Value, mentfromApolloConfigDB.ServerConfiglimit1;IdKeyValuement1:/127.0.0.1:8080/eureka/Eureka服务Url注:ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB2.1.3 调整服务端配置Apollo自身的一些配置是放在数据库里面的,所以需要针对实际情况做一些调整。2.1.3.1 调整ApolloPortalDB配置配置项统一存储在ApolloPortalDB.ServerConfig表中。1.apollo.portal.envs - 可支持的环境列表默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可大小写不敏感,如:DEV,FAT,UAT,PRO注意:只在数据库添加环境是不起作用的,需要配合修改scripts/build.sh

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!