一、Apollo包的介绍
apollo
一共三个包:apollo-portal.zip
、apollo-configservice.zip
、apollo-adminservice.zip
说明:
portal
:后台配置管理页面;
config
:提供配置的读取、推送等功能;
admin
:提供配置的修改、发布等功能
二、环境准备
测试环境
单机多环境部署:将dev
、letest
、photondev
、photontest
、test
部署到一台机器;
数据库部署:每套环境一个apolloconfigdb
数据库,可共用一个apolloportaldb
数据库
设置每个环境端口号:
dev
: config-8080
,admin-8090
,portal-8087
test
: config-8081
,admin-8091
,portal-8087
photondev
: config-8082
,admin-8092
,portal-8087
photontest
: config-8083
,admin-8093
,portal-8087
letest
: config-8084
,admin-8094
,portal-8087
连接数据库
dev
—>dev_apolloconfigdb
test
—>test_apolloconfigdb
photondev
—>photondev_apolloconfigdb
photontest
—>photontest_apolloconfigdb
letest
—>letest_apolloconfigdb
portal
只需要连接apolloportaldb
样例:
spring.datasource.url = jdbc:mysql://localhost:3306/dev_ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
修改startup.sh脚本
dev
:LOG_DIR=/opt/logs/config-dev
、LOG_DIR=/opt/logs/admin-dev
test
:LOG_DIR=/opt/logs/config-test
、LOG_DIR=/opt/logs/admin-test
photondev
:LOG_DIR=/opt/logs/config-photondev
、LOG_DIR=/opt/logs/admin-photondev
photontest
:LOG_DIR=/opt/logs/config-photontest
、LOG_DIR=/opt/logs/admin-photontest
letest
:LOG_DIR=/opt/logs/config-letest
、LOG_DIR=/opt/logs/admin-letest
添加eureka注册地址
在admin和config的startup.sh中添加最好添加在其他export JAVA_OPTS的下面:
export JAVA_OPTS="$JAVA_OPTS -Deureka.instance.ip-address=localhost"
startup.sh启动顺序
config-dev—>config-test—>cofig-photondev—>photontest—>letest—>portal
查看所有端口是否已启动
netstat -lnpt
连接Apollo
给java应用启动参数上添加:-Dapollo.meta=http://localhost:8080 -Denv=dev
生产环境
多机多环境部署:keanonline
、lejiaonline
、leonline
、online
、photononline
、sdbonline
每套环境独立一台机器,可集群部署;
数据库部署:每套环境一个apolloconfigdb
数据库,可共用一个apolloportaldb
数据库
生产环境部署
设置每个环境ip,如下:
keanonline
:1.1.1.1,连接对应数据库:keanonline_apolloconfigdb
lejiaonline
:2.2.2.2,连接对应数据库:lejiaonline_apolloconfigdb
leonline
:3.3.3.3,连接对应数据库:leonline_apolloconfigdb
online
:4.4.4.4,连接对应数据库:online_apolloconfigdb
photononline
:5.5.5.5,连接对应数据库:photononline_apolloconfigdb
sdbonline
:6.6.6.6,连接对应数据库:sdbonline_apolloconfigdb
1、以上6台服务器都部署上(admin
、config
)这两个包;
2、使用7.7.7.7服务器部署(portal
)包;并且连接apolloportaldb
数据库
小结:
所有环境需要将admin
和config
部署到同一台服务器上,并且连接不同数据库;portal
包只需要一台服务器;
上传文件并解压
将apollo-configservice-1.0.0-github.zip
、apollo-adminservice-1.0.0-github.zip
、apollo-portal-1.0.0-github.zip
上传到对应的服务器
修改数据库连接
admin和config数据库配置修改:
修改文件路径:
1、/tonder/app/apollo/config-dev/config/application-github.properties
2、/tonder/app/apollo/admin-dev/config/application-github.properties
admin
和config
连接同一个{env}_aplloconfigDB
数据库连接
spring.datasource.url = jdbc:mysql://localhost:3306/dev_ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
portal
数据库配置修改:
修改文件路径:
1、/tonder/app/apollo/config-dev/config/application-github.properties
portal
比较简单,只需要修改一个:
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
修改启动脚本
admin
和config
:
1、修改日志路径:LOG_DIR=/opt/logs/config-{env}
、LOG_DIR=/opt/logs/admin-{env}
2、添加eureka
指定ip
地址注册:
export JAVA_OPTS="$JAVA_OPTS -Deureka.instance.ip-address=localhost"
portla
:
修改日志路径:LOG_DIR=/opt/logs/portal
执行数据库脚本:
config.sql和portal.sql
修改数据库配置:
注意⚠️:请修改对应库名和对应的ip
修改eureka
注册地址:
update keanonline_ApolloConfigDB.ServerConfig set value='http://1.1.1.1:8080/eureka/' where `key`='eureka.service.url';
update lejiaonline_ApolloConfigDB.ServerConfig set value='http://2.2.2.2:8080/eureka/' where `key`='eureka.service.url';
update leonline_ApolloConfigDB.ServerConfig set value='http://3.3.3.3:8080/eureka/' where `key`='eureka.service.url';
update online_ApolloConfigDB.ServerConfig set value='http://4.4.4.4:8080/eureka/' where `key`='eureka.service.url';
update photononline_ApolloConfigDB.ServerConfig set value='http://5.5.5.5:8080/eureka/' where `key`='eureka.service.url';
update sdbonline_ApolloConfigDB.ServerConfig set value='http://6.6.6.6:8080/eureka/' where `key`='eureka.service.url';
修改支持的环境变量:
update ApolloPortalDB.ServerConfig set value='keanonline,lejiaonline,leonline,online,photononline,sdbonline' where `key`='apollo.portal.envs';
启动脚本
启动所有config->启动所有admin->portal
验证
1、在浏览器上访问http://localhost:8070
2、输入账号:apollo;密码:admin;
3、点击SampleApp进入环境管理页面;
4、进入管理页面后,右上角没有红色弹窗,表示没有异常,如有异常到/opt/logs/portal/看报错信息
5、第四步,没有问题,就基本上apollo搭建成功了
生产应用接入方式
利用jenkines
打包时添加两个java启动参数,-Dapollo.meta=http://{env_config_ipAdress}:8080 -Denv=online
,可参照测试环境的配置方式
Apollo
本地缓存
Apollo
客户端会把从服务端获取到的配置在java应用系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
本地缓存路径默认为:/opt/data
,注意⚠️查看应用是否有读写权限
开启本地缓存开关:
update keanonline_ApolloConfigDB.ServerConfig set value='true' where `key`='config-service.cache.enabled';
update lejiaonline_ApolloConfigDB.ServerConfig set value='true' where `key`='config-service.cache.enabled';
update leonline_ApolloConfigDB.ServerConfig set value='true' where `key`='config-service.cache.enabled';
update online_ApolloConfigDB.ServerConfig set value='true' where `key`='config-service.cache.enabled';
update photononline_ApolloConfigDB.ServerConfig set value='true' where `key`='config-service.cache.enabled';
update sdbonline_ApolloConfigDB.ServerConfig set value='true' where `key`='config-service.cache.enabled';
三、java应用接入教程
1.引入jar包
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.3.0</version>
</dependency>
2.在springboot
启动类Application.java
上添加注解
@Configuration
@EnableApolloConfig
以上是springboot
配置方式,其他配置方式见:https://github.com/ctripcorp/apollo/wiki/Java客户端使用指南
3.META-INF
下创建app.properties
文件
内容为:app.id=tc-manage
,app.id
是在apollo
管理页面上创建的应用ID
4.应用启动配置方式
方式一:
在Run/Debug Configurations->Application->Environment->vm options中添加-Dapollo.meta=http://120.79.232.74:8080 -Denv=dev
方式二:
在本地环境创建/opt/settings/server.properties,内容为:
env=dev
apollo.meta=http://120.79.232.74:8080
四、踩坑总结
第一个坑
在搭建环境时,注意⚠️服务器是否开放制定环境的端口号
第二个坑
Apollo
不支持很多环境,目前只支持LOCAL
, DEV
, FWS
, FAT
, UAT
, LPT
, PRO
, TOOLS
解决方案:
修改`Apollo`源码,添加环境变量后重新打包部署到服务器上,并将`jar`包上传到`nexus`,然后修改`java`程序`maven`依赖
涉及到的类有:`Env,EnvUtils#transformEnv,LegacyMetaServerProvider#initialize`
第三个坑
apollo.meta=http://119.23.240.225:6060这个地址一定要跟env=dev对应上
第四个坑
本地环境修改配置后,会自动重启服务器,热部署是罪魁祸首:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
第五个坑
单机多环境部署时,要注意内存是否足够,因为我在测试环境【内存配置:4GB】部署五个环境,启动了11个java
应用,内存不足会将其他java
应用kill掉,替换新的java
应用.
查看内存使用情况:free -h
查看所有环境是否全部启动,可查看端口号:netstat -nlpt
第六个坑
在java应用中查看是否成功连接上Apollo
,是否可实时更新配置:
方法一:
登录apollo
的管理页面中的实例列表,查看是否存在你的ip
方法二:
如果看到这个日志,说明成功连接上了
c.c.f.a.i.DefaultMetaServerProvider:42 ## Located meta services from apollo.meta configuration: http://localhost:8080!
c.c.f.apollo.core.MetaDomainConsts:93 ## Located meta server address http://localhost:8080 for env DEV from com.ctrip.framework.apollo.internals.DefaultMetaServerProvider
如果看到这个日志说明在后台管理修改配置后,能够实时推送到java
应用
[Apollo-Config-1] ## INFO ## c.c.f.a.s.p.AutoUpdateConfigChangeListener:93 ## Auto update apollo changed value successfully, new value: 66666666, key: test, beanName: javaConfigBean, field: com.tongcaipay.manage.config.TestJavaConfigBean.name
第七个坑
有时候在停apollo
应用程序时,个人建议不要执行shutdown.sh
,直接kill -9,有时候你执行那个脚本后,会出现诡异事件,eureka
连接不上的问题。