apollo是一款优秀的分布式配置中心,而且目前公司中也是采用apollo来作为配置中心。关于apollo具体的内容,推荐大家去看官网,本文主要讲在apollo的1.6.0版本之前,基于现有apollo,额外搭建新的环境。
因为在1.6.0之前,apollo需要新增自定义环境,需要修改代码中的枚举类,以及在portal的数据库中进行相关配置。而且1.6.0之后支持在不修改代码的情况下增加环境。
添加自定义环境
假设新环境为BETA
修改com.ctrip.framework.apollo.core.enums.Env类,加入BETA枚举
public enum Env{
LOCAL, DEV, BETA, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
...
}
修改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;
}
}
}
修改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}
修改com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider类,增加读取BETA
环境的meta server地址逻辑
public class LegacyMetaServerProvider {
...
domains.put(Env.BETA, getMetaServerAddress(prop, "beta_meta", "beta.meta"));
...
}
所有修改代码的内容end
配置数据库,以及启动端口日志路径
调整ApolloConfig
zip解压之后
mysql连接地址:config/application-github.properties中 url,username,password即可
启动端口: scripts/startup.sh中SERVER_PORT=8002
日志地址:scripts/startup.sh中LOG_DIR=/opt/logs/beta/100003171
调整ApolloAdmin相关配置与ApolloConfig相同
调整ApolloProtalDB配置
配置项统一存储在ApolloProtalDB.ServerConfig表中,通过管理工具—系统参数页面进行配置,无特殊说明修改完一分钟实时生效
apollo.protal.envs——可支持的环境列表,多个逗号分隔,大小写不敏感
DEV,FAT,UAT,PRO,BETA
configView.memberOnly.envs——只对项目成员显示配置信息的环境列表,多个env英文逗号分隔
对设定了只对项目成员显示配置信息的环境,只有该项目的管理员或拥有该namespace的编辑或发布权限的用户才能看到该私有namespace的配置信息和发布历史。公共namespace始终对所有用户可见。
调整ApolloConfigDB配置
配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置,修改完一分钟实时生效。
在BETA环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://5.5.5.5:8002/eureka/,http://6.6.6.6:8002/eureka/
所有配置内容到此end
重启服务
启动顺序ApolloProtal 、apolloConfig、apolloAdmin
通过观察apolloProtal提供的系统信息,判断新环境是否搭建成功即可。
注意:如果ApolloProtal部署了多台,建议一台台的处理确认,避免发生未知错误,造成apollo服务不可用。但是请不要担心线上正在使用的服务,此时只要业务服务不重启,暂时无关系,因为apollo在具体服务本地是存在缓存的。
额外,运行一段时间的Apollo在搭建新环境的时候会涉及部分历史数据,历史数据迁移
App
导入全部的App
如:insert into 新环境的ApolloConfigDB.App select * from 其它环境的ApolloConfigDB.App where IsDeleted = 0;
AppNamespace
导入全部的AppNamespace
如:insert into 新环境的ApolloConfigDB.AppNamespace select * from 其它环境的ApolloConfigDB.AppNamespace where IsDeleted = 0;
Cluster
导入默认的default集群
如:insert into 新环境的ApolloConfigDB.Cluster select * from 其它环境的ApolloConfigDB.Cluster where Name = 'default' and IsDeleted = 0;
Namespace
导入默认的default集群中的namespace
如:insert into 新环境的ApolloConfigDB.Namespace select * from 其它环境的ApolloConfigDB.Namespace where ClusterName = 'default' and IsDeleted = 0;
如果是为正在运行的环境迁移数据,建议迁移完重启一下config service,因为config service中有appnamespace的缓存数据
之前搭建整体apollo环境的没有,没有注意这些配置细节,最近新增环境,发现很多内容都遗忘,趁此机会,整体温故而知新。也希望可以帮助有需要的朋友。