Apollo

Apollo_第1张图片

一. 部署说明

apollo配置中心由三个组件组成:

  • ConfigService

配置中心,客户端从这个服务拉配置,同时内置了Eureka、MetaService。每个环境要有一个

  • AdminService

配置管理服务,管理数据库配置,Portal调这个服务修改、发布配置,每个环境要有一个

  • PortalService

管理后台服务,就是那个用账号密码登录的后台,此服务只需部署一个

多环境指的是由DEV、LOCAL、FAT这些环境组成,每套环境必需包含两个服务:ConfigService和 AdminService。

Portal只需部署一个服务,三套环境组件接入到Portal进行配置管理。Portal通过调用AdminService来修改、发布配置。

二. 架构

Apollo_第2张图片

三. 环境准备

  • mysql数据库:一台或多台,dev、fat、local、portal 一共有4个数据库
  • linux服务器:一台或多台,一台服务器通过区分不同端口部署多个服务

四. 部署

1. 创建数据库

  • 数据库

创建数据库用户数据库用户,以及配置数据库权限。

环境 数据库 说明
DEV ApolloConfigDB_DEV 开发环境配置数据库
FAT ApolloConfigDB_FAT 测试环境配置数据库
LOCAL ApolloConfigDB_LOCAL 本地开发环境配置数据库
AplloPortalDB 管理后台数据库(用户、权限管理)
  • 初始化

下载初始化sql,创建表和基础数据,注意:如果是在旧的数据库升级,不要执行此脚本,此脚本会清空数据。

数据库初始化

https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloportaldb.sql

https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloconfigdb.sql

2. 端口/AppId规划

端口 服务 环境 AppID
8080 ConfigService DEV 100003171
8090 AdminService DEV 100003172
8081 ConfigService FAT 100003173
8091 AdminService FAT 100003174
8082 ConfigService LOCAL 100003175
8092 AdminService LOCAL 100003176
8070 Portal - 100003170

3. 安装包下载

  • 到github下载apollo部署程序,这里用的是2.0.1版本。

https://github.com/apolloconfig/apollo/releases/tag/v2.0.1

Apollo_第3张图片

4. 配置修改

  • ConfigService 配置

解压 AdminService,在config目录找到 application-github.properties 配置文件,修改数据库连接配置。

# dev、fat、local连的数据库不一样,每个环境都有独立一个数据库
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB_DEV?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword

同样在config目录修改app.properties中的AppId,不同的服务,AppId不能一样。

appId=100003171
jdkVersion=1.8
  • 在scripts目录,找到 startup.sh脚本,在JAVA_OPTS变量中添加eureka的配置,注意区分环境。
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Deureka.instance.homePageUrl=http://192.168.204.44:9080/env-dev  -Dserver.servlet.context-path=/env-dev  -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
  • AdminService配置

数据库配置:config/application-github.properties

# dev、fat、local连的数据库不一样,每个环境都有独立一个数据库
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB_DEV?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword

appId配置:config/app.properteis

appId=100003172
jdkVersion=1.8
  • Portal配置

数据库配置:application-github.properties

spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword

appId配置

appId=100003170
jdkVersion=1.8

元数据配置:config/apollo-env.properties

local.meta=http://apollo.threegene.cn/env-local
dev.meta=http://apollo.threegene.cn/env-dev
fat.meta=http://apollo.threegene.cn/env-fat
  • 数据库配置修改
    • eureka地址修改
    • 在ApolloConfigDB_DEV 数据库 ServiceConfig表找到 eureka.service.url所在行,将值修改为:
http://apollo.threegene.cn/env-dev/eureka

Apollo_第4张图片

  • 可用环境配置

在ApolloPortalDB数据库找到 ServiceConfig表,修改可用环境变量:

Apollo_第5张图片

5. 部署服务

如果是同一台服务器部署所有服务,在服务器上分别创建 dev、local、fat目录,用于存放三套环境的部署程序。不同环境的部署过程一样,以下以dev环境为例。

启动

将修改好配置的ConfigService、AdminService放到dev目录,分别启动ConfigService和AdminService

# 启动
sh script/startup.sh
# 关闭
sh script/shutdown.sh

验证

打开eureka界面,查看启动的configService和adminService有没有注册上来,能查到,说明启动正常

地址:http://apollo.threegene.cn/env-dev/

Apollo_第6张图片

fat和local环境参照dev的部署过程

Portal部署

apollo portal是管理后台,不用多环境部署,只需要部署一个服务即可。

将修改好的配置的程序传到服务器,启动服务

# 启动
sh script/startup.sh
# 关闭
sh script/shutdown.sh

服务默认端口是8070,启动后,通过ip+8070可以访问到portal后台,apollo默认账号密码是 apollo/admin

登入后台后,检查服务状态是否正常,以下所示:

Apollo_第7张图片

五. 生产环境部署

1. 部署架构

  • 服务器

为了保证配置中心的高可用,生产环境至少要有两台 linux 服务器,架构规划如下:

apollo服务 服务器 端口
ConfigService linux-1 8080
AdminService linux-1 8090
Apollo-Portal linux-1 8070
ConfigService linux-2 8080
AdminService linux-2 8090
  • 数据库

数据库使用mysql云服务,最好是高可用数据库。

数据库 说明
ApolloConfigDB 配置数据库
ApolloPortalDB 管理中心数据库

2. 部署步骤

生产部署可参照开发测试的部署,过程差不多

  • 创建和初始化数据库

ApolloPortalDB初始化 https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloportaldb.sql

ApolloConfigDB初始化 https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloconfigdb.sql

注意:初始化sql会重新建表,将会清空整个数据库。

初始化数据库后,要修改 ApolloConfigDB.ServerConfig 表里的eureka配置

以及 ApolloPortalDB.Service里面的环境配置信息

  • 在Linux-1部署 ConfigService、AdminService、Apollo-Portal

  • 在Linux-2部署 ConfigService、AdminService

  • 配置域名

  • 配置apollo域名,解析到配置中心,参照C端的域名配置。

Apollo_第8张图片

六. 常见问题

  • eureka后台服务没有注册上来

这种情况一般是由于ServiceConfig表和ConfigService服务启动参数中配置的eureka参数不一样导致的,检查数据库和程序的启动参数是否配置正确。

  • 服务日志在哪里看

默认情况下,apollo的日志放在 /opt/logs目录,每个appId对应有一个日志文件

  • 服务拉不到配置

检查 dev/fat/local三套环境的configService启动参数配置的启动参数路径与网关的路径是否一致。

JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Deureka.instance.homePageUrl=http://192.168.204.44:9080/env-dev  -Dserver.servlet.context-path=/env-dev  -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"

你可能感兴趣的:(Apollo,配置中心)