SpringCloud 18 —— 配置中心之Apollo (中)

单机部署

GitHub获取

创建数据库:运行apollo-build-scripts-master\sql中的apolloconfigdb.sql和apolloportaldb.sql两个sql文件。

修改配置:修改demo.sh文件的config和portal db配置:

运行demo.sh start,

启动完成后可以访问127.0.0.1:8070,默认用户名/密码:apollo/admin。
如果出现错误可以到提示的对应log文件中查看。

分布式部署

建议直接参考官方分布式部署教程

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

Apollo目前支持以下环境:

  • DEV
    开发环境

  • FAT
    测试环境,相当于alpha环境(功能测试)

  • UAT
    集成环境,相当于beta环境(回归测试)

  • PRO
    生产环境

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

网络策略

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

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

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

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

具体文档可以参考Ignore Network Interfaces章节。具体而言,就是分别编辑apollo-configservice/src/main/resources/application.yml和apollo-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.*

另外一种方式是直接指定要注册的IP,可以修改startup.sh,通过JVM System Property在运行时传入,如-Deureka.instance.ip-address=${指定的IP},也可以通过OS Environment Variable,如EUREKA_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},也可以通过OS Environment Variable,如EUREKA_INSTANCE_HOME_PAGE_URL=http://${指定的IP}:${指定的Port},或者也可以修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,加入以下配置

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

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

如果Apollo部署在公有云上,本地开发环境无法连接,但又需要做开发测试的话,客户端可以升级到0.11.0版本及以上,然后配置跳过Apollo Meta Server服务发现

一种简单部署方式演示:

默认提供的安装都是dev环境的配置,在实际工作中,我们还要有fat、uat、prod等环境。本次我们将演示dev、fat环境的部署。

本次演示在同一台服务器上部署,因此通过端口区别,如果有多台服务器,不用区别即可

应用端口环境
configservice8081dev
adminservice8091dev
configservice8082fat
adminservice8092fat
portal8071dev

安装包下载

创建开发环境的adminservice

mkdir -p /cloud/apollo/dev/adminservice

创建测试环境的adminservice

mkdir -p /cloud/apollo/fat/adminservice

创建开发环境的configservice

mkdir -p /cloud/apollo/dev/configservice

创建测试环境的configservice

mkdir -p /cloud/apollo/fat/configservice

创建开发环境的portal

mkdir -p /cloud/apollo/dev/portal
  • 需要将下载下来的apollo-adminservice-1.6.1-github.zip放到cloud/apollo/dev/adminservice和cloud/apollo/fat/adminservice目录
  • 之后将下载下来的apollo-configservice-1.6.1-github.zip放到/apollo/dev/configservice和cloud/apollo/dev/configservice目录
    最后将apollo-portal-1.6.1-github.zip放到cloud/apollo/dev/portal目录
    准备工作第一段已经结束

创建ApolloConfigDB

新建ApolloConfigDBdev和ApolloConfigDBtest两个环境的配置库(注意库名)
数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可导入apolloconfigdb.sql

创建ApolloPortalDB

新建ApolloPortalDBdev库(注意库名)导入apolloportaldb.sql即可

配置修改

进入 /cloud/apollo/dev/adminservice目录,解压压缩包

unzip apollo-adminservice-1.6.1-github.zip

进入config目录修改

app.properties  
    - appId=100003172 #保证appId 和scripts里面的startup.sh里的日志配置id保持一样,各应用之间保持唯一
    - jdkVersion=1.11  #java 版本
application-github.properties  # 开发数据库连接信息
   - spring.datasource.url  
   - spring.datasource.username
   - spring.datasource.password

修改完之后修改scripts里面的内容
主要修改里面的日志路径和应用端口(根据需要,地址不要冲突)

#!/bin/bash
SERVICE_NAME=apollo-adminservice
## Adjust log dir if necessary
LOG_DIR=/opt/dev/admin/logs/100003172
## Adjust server port if necessary
SERVER_PORT=${SERVER_PORT:=8091}  #端口
......

修改测试环境的配置
进入 /cloud/apollo/dev/adminservice目录
解压压缩包

unzip apollo-adminservice-1.6.1-github.zip

进入config目录修改

app.properties  
    - appId=100004172 #保证appId 和scripts里面的startup.sh里的日志配置id保持一样,各应用之间保持唯一
    - jdkVersion=1.11  #java 版本
application-github.properties  # 测试数据库连接信息
   - spring.datasource.url  
   - spring.datasource.username
   - spring.datasource.password

修改完之后修改scripts里面的内容
主要修改里面的日志路径和应用端口(根据需要,地址不要冲突)

#!/bin/bash
SERVICE_NAME=apollo-adminservice
## Adjust log dir if necessary
LOG_DIR=/opt/fat/admin/logs/100004172
## Adjust server port if necessary
SERVER_PORT=${SERVER_PORT:=8092}  #端口
......

修改开发环境的配置
进入 /cloud/apollo/dev/configservice目录

解压压缩包

unzip apollo-configservice-1.6.1-github.zip

进入config目录修改

app.properties  
    - appId=100003173 #保证appId 和scripts里面的startup.sh里的日志配置id保持一样,各应用之间保持唯一
    - jdkVersion=1.11  #java 版本
application-github.properties  # 开发数据库连接信息
   - spring.datasource.url  
   - spring.datasource.username
   - spring.datasource.password

修改完之后修改scripts里面的内容
主要修改里面的日志路径和应用端口(根据需要,地址不要冲突)

#!/bin/bash
SERVICE_NAME=apollo-configservice
## Adjust log dir if necessary
LOG_DIR=/opt/dev/config/logs/100003173
## Adjust server port if necessary
SERVER_PORT=${SERVER_PORT:=8081}  #端口
......

修改测试环境的配置
进入 /cloud/apollo/fat/configservice目录
解压压缩包

unzip apollo-configservice-1.6.1-github.zip

进入config目录修改

app.properties  
    - appId=100004173 #保证appId 和scripts里面的startup.sh里的日志配置id保持一样,各应用之间保持唯一
    - jdkVersion=1.11  #java 版本
application-github.properties  # 开发数据库连接信息
   - spring.datasource.url  
   - spring.datasource.username
   - spring.datasource.password

修改完之后修改scripts里面的内容
主要修改里面的日志路径和应用端口(根据需要,地址不要冲突)

#!/bin/bash
SERVICE_NAME=apollo-configservice
## Adjust log dir if necessary
LOG_DIR=/opt/fat/config/logs/100004173
## Adjust server port if necessary
SERVER_PORT=${SERVER_PORT:=8082}  #端口
......

portal 配置修改
进入 /cloud/apollo/dev/portal目录
解压压缩包

unzip apollo-portal-1.6.1-github.zip

进入config目录修改

app.properties  
    - appId=100003174 #保证appId 和scripts里面的startup.sh里的日志配置id保持一样,各应用之间保持唯一
    - jdkVersion=1.11  #java 版本
application-github.properties  # 开发数据库连接信息
   - spring.datasource.url  
   - spring.datasource.username
   - spring.datasource.password

修改完之后修改scripts里面的内容
主要修改里面的日志路径和应用端口(根据需要,地址不要冲突)

#!/bin/bash
SERVICE_NAME=apollo-configservice
## Adjust log dir if necessary
LOG_DIR=/opt/fat/config/logs/100003174
## Adjust server port if necessary
SERVER_PORT=${SERVER_PORT:=8071}  #端口
......

apollo-env.properties配置修改(重要)

local.meta=http://localhost:8080
dev.meta=http://localhost:8081  #设置的开发地址
fat.meta=http://localhost:8082   #设置的测试地址
lpt.meta=${lpt_meta}

以上针对应用的配置修改结束。

数据库修改

进入ApolloConfigDBdev修改ServerConfig表注册中心的地址(eureka.service.url字段),修改为自己的,多个用逗号隔开

进入ApolloConfigDBtest修改ServerConfig表注册中心的地址(eureka.service.url字段,修改为自己的,多个用逗号隔开

进入ApolloPortalDBtest修改ServerConfig表支持的环境(apollo.portal.envs字段),默认是dev,我们在添加一个fat,多个用逗号隔开

以上应用和数据库的配置修改已经完成。配置起来有点繁琐,目前只是两个环境的,uat和prod的可以自行部署。

应用启动

分别进入以下目录
/cloud/apollo/dev/configservice/scripts
/cloud/apollo/fat/configservice/scripts
/cloud/apollo/dev/adminservice/scripts
/cloud/apollo/fat/adminservice/scripts
/cloud/apollo/dev/portal/scripts

执行命令

sh startup.sh

浏览器访问ip:8081和ip:8082

证明configservice和adminservice 配置和启动正确

浏览器输入ip:8071,进入apollo管理界面可以看到DEV和FAT

更新时间:2020-06-07 11:14:58

本文由 寻非 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://www.zhouning.group/archives/springcloud18配置中心之apollo中
最后更新:2020-06-07 11:14:58

评论

Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×