当前位置 : 主页 > 编程语言 > java >

分布式部署指南

来源:互联网 收集:自由互联 发布时间:2023-09-06
一、准备工作 二、部署步骤 三、Portal 实现用户登录功能 本文档介绍了如何按照分布式部署的方式编译、打包、部署Apollo配置中心,从而可以在开发、测试、生产等环境分别部署运行。
  • 一、准备工作
  • 二、部署步骤
  • 三、Portal 实现用户登录功能

本文档介绍了如何按照分布式部署的方式编译、打包、部署Apollo配置中心,从而可以在开发、测试、生产等环境分别部署运行。

如果只是需要在本地快速部署试用Apollo的话,可以参考Quick Start

1.1 运行时环境

1.1.1 OS

服务端基于Spring Boot,启动脚本理论上支持所有Linux发行版,建议CentOS 7

1.1.2 Java

  • Apollo服务端:1.8+
  • Apollo客户端:1.7+

由于需要同时运行服务端和客户端,所以建议安装Java 1.8+。

对于Apollo客户端,运行时环境只需要1.7+即可。

注:对于Apollo客户端,如果有需要的话,可以做少量代码修改来降级到Java 1.6,详细信息可以参考Issue 483

在配置好后,可以通过如下命令检查:

java -version

样例输出:

java version "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

1.2 MySQL

  • 版本要求:5.6.5+

Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。

连接上MySQL后,可以通过如下命令检查:

SHOW VARIABLES WHERE Variable_name = 'version';

Variable_name

Value

version

5.7.11

注1:MySQL版本可以降级到5.5,详见mysql 依赖降级讨论

注2:如果希望使用Oracle的话,可以参考vanpersl在Apollo 0.8.0基础上开发的Oracle适配代码,Oracle版本为10.2.0.1.0。

注3:如果希望使用Postgres的话,可以参考oaksharks在Apollo 0.9.1基础上开发的Pg适配代码,Postgres的版本为9.3.20,也可以参考xiao0yy在Apollo 0.10.2基础上开发的Pg适配代码,Postgres的版本为9.5。

1.3、环境

分布式部署需要事先确定部署的环境以及部署方式。

Apollo目前支持以下环境:

  • DEV
  • 开发环境
  • FAT
  • 测试环境,相当于alpha环境(功能测试)
  • UAT
  • 集成环境,相当于beta环境(回归测试)
  • PRO
  • 生产环境

如果希望添加自定义的环境名称,具体步骤可以参考部署&开发遇到的常见问题#42-添加自定义的环境

以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进程内

另外也可以参考下@lyliyongblue 贡献的样例部署图(建议右键新窗口打开看大图): 

分布式部署指南_Server

1.4、网络策略

分布式部署的时候,apollo-configserviceapollo-adminservice需要把自己的IP和端口注册到Meta Server(apollo-configservice本身)。

Apollo客户端和Portal会从Meta Server获取服务的地址(IP+端口),然后通过服务地址直接访问。

需要注意的是,apollo-configserviceapollo-adminservice是基于内网可信网络设计的,所以出于安全考虑,请不要将apollo-configserviceapollo-adminservice直接暴露在公网。

所以如果实际部署的机器有多块网卡(如docker),或者存在某些网卡的IP是Apollo客户端和Portal无法访问的(如网络安全限制),那么我们就需要在apollo-configserviceapollo-adminservice中做相关限制以避免Eureka将这些网卡的IP注册到Meta Server。

具体文档可以参考Ignore Network Interfaces章节。具体而言,就是分别编辑apollo-configservice/src/main/resources/application.ymlapollo-adminservice/src/main/resources/application.yml,然后把需要忽略的网卡加进去。

如下面这个例子就是对于apollo-configservice,把docker0和veth.*的网卡在注册到Eureka时忽略掉。

spring: application: name: apollo-configservice profiles: active: ${apollo_profile} cloud: inetutils: ignoredInterfaces: - docker0 - veth.*

注意,对于application.yml修改时要小心,千万不要把其它信息改错了,如spring.application.name等。

另外一种方式是直接指定要注册的IP,可以修改startup.sh,通过JVM System Property在运行时传入,如-Deureka.instance.ip-address=${指定的IP},或者也可以修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,加入以下配置

eureka: instance: ip-address: ${指定的IP}

最后一种方式是直接指定要注册的IP+PORT,可以修改startup.sh,通过JVM System Property在运行时传入,如-Deureka.instance.homePageUrl=http://${指定的IP}:${指定的Port},或者也可以修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,加入以下配置

eureka: instance: homePageUrl: http://${指定的IP}:${指定的Port} preferIpAddress: false

做完上述修改并重启后,可以查看Eureka页面(http://${config-service-url:port})检查注册上来的IP信息是否正确。

如果Apollo部署在公有云上,本地开发环境无法连接,但又需要做开发测试的话,客户端可以升级到0.11.0版本及以上,然后通过-Dapollo.configService=http://config-service的公网IP:端口来跳过meta service的服务发现

上一篇:Apollo开发指南
下一篇:没有了
网友评论