Apollo 单环境与多环境搭建部署体验

1. 前言

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

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

***本文使用docker 快速搭建 Apollo 服务端 版本为1.7.0版本 目的是提供一个对Apollo的初步认识 ,避免踩坑,官方文档对无基础看着有点吃力了 ,如果需要详细介绍文档 移步官方 ***

2 单环境(Dev)搭建

2.1 架构简介

首先,Apollo 有三个服务:

  • config-service 提供配置的读取、推送等功能,服务对象是Apollo客户端
  • admin-service 提供配置的修改、发布等功能,服务对象是portal(管理界面)
  • portal 提供运维人员/程序员 操作管理界面

其中 config 与 admin 是多实例的对应标题中的多环境 , 因此如果单环境只需要各部署一个config,admin,portal ,其中eureka 是在config 中的,因此需要提前启动config ,并在配置项数据库中提供eureka访问地址

2.2 单环境搭建

需要提前安装好 docker(最好换下国内源) ,最好关闭防火墙(一般部署在内网,默认安全)

我这里的IP是 192.168.203.101 ,数据库 192.168.203.101 3306 root root

2.2.1 环境准备

  1. 拉取镜像

docker pull apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-portal:1.7.0-SNAPSHOT

  1. 导入数据库脚本

链接: https://pan.baidu.com/s/1wc7srmvwD7xZ9ZUa4h0S7Q 提取码: rv7p

完成后在数据库中把 ApolloConfigDB 中的ServerConfig 的 eureka.service.url value 改成 http://192.168.203.101:8080/eureka/ 对应下面的 config 的eureka地址

2.2.2 启动

  1. 启动

需要先启动config,因为eureka在config,需要它提供注册服务 ,然后启动admin 最后启动portal

在启动过程中可能出现eureka 注册失败,需要等eureka启动后就不会了

config


docker run -p 8080:8080 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs apolloconfig/apollo-configservice:1.7.0-SNAPSHOT 

admin

docker run -p 8090:8090 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT

portal


    docker run -p 8070:8070 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -e APOLLO_PORTAL_ENVS=dev \
    -e DEV_META=http://192.168.203.101:8080 \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT

也可以启动一个看下日志有没有出错

docker tail -f apollo-cs/apollo-as/apollo-web

  1. 最后验证

输入 http://192.168.203.101:8070/ 验证 初始账号密码 : apollo/admin

官方文档详细介绍各参数含义在这

2. 多环境(dev,prod) 部署

2.1 架构

前面讲到 config 与 admin 是 多实例 ,我们一般应用部署多实例是为了负载,多数都是单一数据源,而Apollo 使用多实例是为了环境隔离,因此需要多个数据源 , 同时如果需要测试与生产环境操作隔离也可以部署多个portal 这样也需要多个portaldb 数据库 ,我们这里使用dev,prod 两个 然后前台一个,具体分布如下:

机器 config-服务 admin-服务 portal-服务 数据库
192.168.203.101 apollo-cs1 apollo-as1 3306/3307
192.168.203.102 apollo-cs2 apollo-as2 apollo-web

其中cs1 as1 连接 3306 ,cs2 as2 连接3307 , 同时我们需要在3306与3307的配置项中标明eureka 地址 逗号隔开 , 同时在portal 中 写多个配置环境

如果是从单版本搭建复用,最好把config 重新建一下 , 不然两个configdb 数据不一致会报错

在1.7中 只支持以下环境
com.ctrip.framework.apollo.core.enums.Env
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;

2.2 开始

开始操作,在192.168.203.101-102 上面分别启动apollo-cs1 , apollo-cs2

2.2.1 启动前准备

当然 如果 docker 目录未创建需要提前创建并且授权

授权语句:

chcon -Rt svirt_sandbox_file_t /yourdir

在3306 3307 数据库中 ApolloConfigDB.ServerConfig中的 key=eureka.service.url 修改对应的value为: http://192.168.203.101:8080/eureka/,http://192.168.203.102:8080/eureka/

2.2.2 启动config

# 101 启动
docker run -p 8080:8080 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs1 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT 


## 102 启动
docker run -p 8080:8080 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs2 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT 


2.2.3 启动admin


# 101 启动
    docker run -p 8090:8090 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as1 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT

# 102 启动

    docker run -p 8090:8090 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as2 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT

2.2.4 启动portal

101 已经有两个数据库服务了 ,所以把前台放在102 上面 , 这里与单机改动的点是:

  • APOLLO_PORTAL_ENVS 几个环境就写几个
  • DEV_META 分别指向不同环境的eureka 服务地址
  • 这台服务器web服务只有一个 所以我把端口映射到了80


    docker run -p 80:8070 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -e APOLLO_PORTAL_ENVS=dev,prod \
    -e DEV_META=http://192.168.203.101:8080 \
    -e PROD_META=http://192.168.203.102:8080 \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT


至此可以访问 http://192.168.203.102/

Apollo 前端登录

然后登录进去apollo/admin , 愉快的体验吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章