Apollo是什么

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

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

.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。

Apollo整体架构如下图:
apollo

Apollo配置中心被分为portalConfig ServiceAdmin Service三个服务

  • Portal: 提供Apollo配置中心的管理界面,服务对象是开发人员

  • Config Service:提供配置的读取、推送等功能,服务对象是Apollo客户端,该服务包含EurekaConfig ServiceMeta Server,他们在同一个JVM进程中。

  • Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal管理界面

如果需要Apollo配置中心支持多个环境,Portal管理界面只需要部署一处,Config ServiceAdmin Service在每一个环境部署一次。

Github地址:https://github.com/apolloconfig/apollo

文档地址:https://www.apolloconfig.com/

环境与依赖

  • Apollo配置中心支持不同的环境,每个环境互相隔离。Apollo目前支持以下环境:

    • DEV 开发环境
    • FAT 测试环境,相当于alpha环境(功能测试)
    • UAT 集成环境,相当于beta环境(回归测试)
    • PRO 生产环境
  • 要安装Apollo配置中心需要以下:

IP端口配置

Apollo配置中心支持两套环境,需要先规划配置Apollo服务的IP和端口:

  • Portal127.0.0.1:8070
  • Dev Config Service127.0.0.1:8071
  • Dev Admin Service127.0.0.1:8072
  • Fat Config Service127.0.0.1:8073
  • Fat Admin Service127.0.0.1:8074

如果两个环境的数据库和准备部署Apollo的服务器不是同一个,可按需配置,配置方式也是相同的。

数据库配置

ApolloPortalDB

  • 创建ApolloPortalDB数据库
  • 运行apolloportaldb.sql
  • 配置ServerConfig表中apollo.portal.envs的值,该值表示可支持的环境列表(例:DEV,FAT)

开发环境ApolloConfigDB

  • 创建ApolloConfigDB数据库dev环境
  • 运行apolloconfigdb.sql
  • 配置ServerConfig表中eureka.service.url的值,该值就是Config Servicehttp://IP:Port地址(例:http://127.0.0.1:8071/eureka/)

测试环境ApolloConfigDB_Test

  • 创建ApolloConfigDB_Test数据库作为fat环境
  • 运行apolloconfigdb.sql
  • 配置ServerConfig表中eureka.service.url的值,该值就是Config Servicehttp://IP:Port地址(例:http://127.0.0.1:8073/eureka/)

配置Portal

Portal作为管理界面,只需要部署一次即可。
Portal首次登陆的默认账号为apollo,密码为admin

目录结构

解压apollo-portal-2.2.0-github.zip文件,将会得到以下结构目录:

- apollo-portal-2.2.0-github
	- config
		- apollo-env.properties
		- application.properties
		- application-github.properties
	- scripts
		- shutdown.sh
		- startup.sh
	- apollo-portal.conf
	- apollo-portal.jar
	- apollo-portal-2.2.0.jar
	- apollo-portal-2.2.0-sources.jar

文件配置

  • apollo-portal.conf

配置portal的日志文件存储位置

## pid目录
PID_FOLDER=.
## 日志目录
LOG_FOLDER=/data/apollo/logs/portal/
## 日志名称
LOG_FILENAME=apollo-portal.console.log
  • config/apollo-env.properties

配置Portal支持的环境

#local.meta=http://localhost:8080
dev.meta=http://127.0.0.1:8071 ## 配置dev环境(Dev Config Service的IP端口)
fat.meta=http://127.0.0.1:8073 ## 配置fat环境(Fat Config Service的IP端口)
#uat.meta=http://fill-in-uat-meta-server:8080
#pro.meta=http://fill-in-pro-meta-server:8080
  • config/application-github.properties

配置Portal使用的数据库信息

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = your_username
spring.datasource.password = your_password
  • scripts/startup.sh

配置Portal的启动设置

## 配置日志存放位置
LOG_DIR=/data/apollo/logs/portal
## 配置Portal端口
SERVER_PORT=${SERVER_PORT:=8070}
## 配置Portal启动时JAVA选项,一般不进行改动
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
  • 授权

赋予scripts目录下的sh脚本可执行权限

chmod +x *.sh

配置Config Service

Config Service提供配置的读取、推送等功能,所以再不同的环境下,需要再次部署该服务。

目录结构

解压apollo-configservice-2.2.0-github文件,将会得到以下结构目录,可修改目录名称以支持不同的环境

- apollo-configservice-2.2.0-github(dev-configservice)
	- config
		- application.properties
		- application-github.properties
	- scripts
		- shutdown.sh
		- startup.sh
	- apollo-configservice.conf
	- apollo-configservice-2.2.0.jar
	- apollo-configservice-2.2.0-sources.jar

文件配置

  • apollo-configservice.conf

配置Config Service的日志文件存储位置

## pid目录
PID_FOLDER=.
## 日志目录
LOG_FOLDER=/data/apollo/logs/dev
## 日志名称
LOG_FILENAME=dev-apollo-configservice.console.log
  • config/application-github.properties

配置Config Service使用的数据库信息

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = your_username
spring.datasource.password = your_password
  • scripts/startup.sh

配置Config Service的启动设置

## 配置日志存放位置
LOG_DIR=/data/apollo/logs/dev
## 配置Portal端口
SERVER_PORT=${SERVER_PORT:=8071}
## 配置Portal启动时JAVA选项,一般不进行改动
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
  • 授权

赋予scripts目录下的sh脚本可执行权限

chmod +x *.sh

本地部署出现的问题

Apollo客户端和Portal会从Config Service获取服务的地址(IP+Port),然后通过服务地址直接访问。而从eureka服务发现的页面会发现,服务地址变成了公网IP,这可能会导致Apollo客户端无法连接上Config Service,所以需要修改startup.sh配置JAVA_OPTS

## 可以直接找到JAVA_OPTS,在最末尾加上 -Deureka.instance.ip-address=127.0.0.1
JAVA_OPTS="$JAVA_OPTS -Deureka.instance.ip-address=127.0.0.1"

配置Admin Service

目录结构

解压apollo-adminservice-2.2.0-github文件,将会得到以下结构目录,可修改目录名称以支持不同的环境

- apollo-adminservice-2.2.0-github(dev-adminservice)
	- config
		- application.properties
		- application-github.properties
	- scripts
		- shutdown.sh
		- startup.sh
	- apollo-adminservice.conf
	- apollo-adminservice-2.2.0.jar
	- apollo-adminservice-2.2.0-sources.jar

文件配置

  • apollo-adminservice.conf

配置Admin Service的日志文件存储位置

## pid目录
PID_FOLDER=.
## 日志目录
LOG_FOLDER=/data/apollo/logs/dev
## 日志名称
LOG_FILENAME=dev-apollo-configservice.console.log
  • config/application-github.properties

配置Admin Service使用的数据库信息

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = your_username
spring.datasource.password = your_password
  • scripts/startup.sh

配置Admin Service的启动设置

## 配置日志存放位置
LOG_DIR=/data/apollo/logs/dev
## 配置Portal端口
SERVER_PORT=${SERVER_PORT:=8072}
## 配置Portal启动时JAVA选项,一般不进行改动
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
  • 授权

赋予scripts目录下的sh脚本可执行权限

chmod +x *.sh

本地部署出现的问题

Apollo客户端和Portal会从Config Service获取服务的地址(IP+Port),然后通过服务地址直接访问。而从eureka服务发现的页面会发现,服务地址变成了公网IP,这可能会导致Apollo客户端无法连接上Config Service,所以需要修改startup.sh配置JAVA_OPTS

## 可以直接找到JAVA_OPTS,在最末尾加上 -Deureka.instance.ip-address=127.0.0.1
JAVA_OPTS="$JAVA_OPTS -Deureka.instance.ip-address=127.0.0.1"

部署

Apollo三个服务都需要启动,所以编写脚本启动是比较好的方式。

启动脚本

#!/bin/sh

#description: start apollo

#开发环境
cd /data/apollo/dev-configservice/scripts
./startup.sh

cd /data/apollo/dev-adminservice/scripts
./startup.sh


#测试环境
cd /data/apollo/fat-configservice/scripts
./startup.sh

cd /data/apollo/fat-adminservice/scripts
./startup.sh


#portal
cd /data/apollo/portal/scripts
./startup.sh

停止脚本

#!/bin/sh

#description: stop apollo

#开发环境
cd /data/apollo/dev-configservice/scripts
./shutdown.sh

cd /data/apollo/dev-adminservice/scripts
./shutdown.sh


#测试环境
cd /data/apollo/fat-configservice/scripts
./shutdown.sh

cd /data/apollo/fat-adminservice/scripts
./shutdown.sh


#portal
cd /data/apollo/portal/scripts
./shutdown.sh

Systemd自启脚本

[Unit]
Description=auto run Apollo
After=network.target

[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/jdk1.8.0_281/bin"
User=root
ExecStart=/data/apollo/start.sh
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
文章作者: Willxup
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Willxup
Linux Linux Apollo .Net
喜欢就支持一下吧