配置中心Apollo多环境部署

配置中心Apollo多环境部署

  • 关于Apollo
    • Apollo 与 Springcloud config
  • Apollo的部署
    • 多环境部署
    • 源码编译方式传统部署(多环境)
      • 下载项目源码
      • 执行数据库sql
      • 修改build 配置文件,编译项目
      • 启动服务
  • springboot 客户端demo (待续)
  • Docker or Kubernetes 方式 (待续)

关于Apollo

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

github地址:https://github.com/ctripcorp/apollo
在官方的wiki 里,有很多资料,包括部署 客户端应用等
github wiki 地址:https://github.com/ctripcorp/apollo/wiki

Apollo 与 Springcloud config

Apollo 是携程框架研发部门研发的一款基于springboot和springcloud 写的一个配置中心项目,使用长连接实现配置下发,现在已经开源,可以秒级感应热部署配置文件。

Springcloud Config 是springcloud 全家桶里的一员,基于git 做的配置中心,对于热部署配置文件来说,还需要配合 git 的webhook 触发 springcloud bus,达到配置下发,从实现机制来说,Apollo 是要快上许多。而完全依赖于git 的config 不仅配置麻烦,而且感觉会很low。

先说一下我的使用感受,部门里一个微服务支付的项目用的就是springcloud config 配置中心

优点:

  1. 基于git(当然svn,jdbc,本地缓存也支持),对于github 或者 gitlab 来讲比较熟悉,git的优点可以应用于配置文件上
  2. 配置文件管理一幕了然,公有的配置文件或者项目私有的配置,按照规范填写,分类后比较好找,按照项目,按照模块建包,一目了然
  3. … (我是个不善于总结优点的人)

来说说缺点:

  1. 如果要实现热部署配置文件,需要配合springcloud bus,在github上做webhook ,依赖性很强,配置复杂,实时性也一般,不做热加载的配置下发,那配置中心将毫无意义。
  2. 配置复杂意味着,且对代码有侵入,学习成本高,个人不是很喜欢。
  3. 配置文件命名规则,很麻烦,配置都在命名上,根据命名搜索,没有可视化的配置
  4. 权限控制,配置下发基于git的权限,也是成也git 败也git ,不能很好掌控配置下发的权利
  5. 不支持多语言客户端,全家桶的问题
  6. …(我还是个不善于总结缺点的人)

关于Apollo ,使用感受非常爽,先吹他一个彩虹屁。
优点

  • 无需过多的依赖,原生java,.net 都很好应用,多语言客户端无需过多的依赖,原生java,springboot,.net 都很好应用,多语言客户端
  • 依赖少,不基于git,部署简单,即能实现动态加载配置,客户端配置也简单
  • 可视化操作,权限控制,都让人很爽
  • 多环境支持,可以 dev fat uat pro,提供分布式部署

缺点

  • 可能还是使用太少,项目一多,文件数量一多,文件关系一复杂,配置起来比较头晕目眩,查找项目也比较难找
  • 本来以为上面这个是缺点,但是写着写着想到了还是好管理的,否认了我自己,写文章的时候没有参考很多,只是把自己想到的记录下,以后会补充,有很多不正确的地方,也需要读者多多指教。保持着尽量严谨和实践证实的心态写文章。

Apollo的部署

多环境部署

首先是使用多环境部署,关于Apollo 的环境,支持dev,fat,uat,pro 四种部署环境。

Apollo 包括 服务端,页面前端 与 自己的客户

每一个环境就是一个服务端,前端页面portal 可以集成多个环境,多环境就是比单环境多增加了几个服务端罢了。

如果只想建单环境,起一个服务端即可。

例如
单环境:
在192.16.35.11 上部署dev 的服务端(Apollo-adminserver + Apollo-configserver+portal)

多环境:
在192.16.35.11 上部署dev 的服务端(Apollo-adminserver + Apollo-configserver)
在192.16.35.12 上部署pro 的服务端(Apollo-adminserver + Apollo-configserver)

最后在生产的机器192.16.35.12 上配置 前端页面服务就行 (Apollo-portal)

源码编译方式传统部署(多环境)

部署环境:
maven 3.3.9
jdk 1.8
Apollo v0.11.0
dev 服务器 192.16.35.10 (admin-server 与 config-server)
pro 服务器 192.16.35.11(admin-server , config-server,portal)

下载项目源码

v1.0.0 之后是用springboot 2.0 写的,而我们自己还是1.5.10
官方文档部署里有声明springboot的某些配置需要v0.10.0 之后
所以这里选了v0.11.0 版本
下载地址:https://github.com/ctripcorp/apollo/releases
自己选择脚本下载tar.gz 的包

然后上传到linux 服务器上,这里采用的是RedHat7.4,centos同理

tar xvf apollo-0.11.0.tar.gz

解压到自己的服务器上。
在这里插入图片描述
会看到如下项目路径,windows 使用idea 打开也行

执行数据库sql

进入scripts 文件夹 里面有个sql 文件,一个是configdb 服务端的sql,一个是portaldb 的sql,每一个服务端需要一个configdb,如果没有多个mysql服务,暂时建在同一个mysql服务下,但是要修改configdb的数据库名字

以下两处 ApolloConfigDB 改为 ApolloConfigDB2
配置中心Apollo多环境部署_第1张图片
这样在你的mysql 上应该有一个ApolloConfigDB 一个ApolloConfigDB2 一个ApolloPortalDB 三个数据库

分别对应dev环境的数据库 pro 环境的数据库 和 portal 的数据库

修改build 配置文件,编译项目

在刚刚的sql 同级目录下,有个build.sh 。 windows用bat
修改

#!/bin/sh

# apollo config db info
apollo_config_db_url=jdbc:mysql://your-mysqldb:port/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=******

# apollo portal db info
apollo_portal_db_url=jdbc:mysql://your-mysqldb:port/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=******

# meta server url, different environments should have different meta server addresses
dev_meta=http://dev:8080
#fat_meta=http://fill-in-fat-meta-server:8080
#uat_meta=http://fill-in-uat-meta-server:8080
pro_meta=http://fill-in-pro-meta-server:8080

META_SERVERS_OPTS="-Ddev_meta=$dev_meta "

# =============== Please do not modify the following content =============== #

这个就很明白了
dev 服务器上不启动portal ,不需要修改portal 的信息,只需要修改apollo config db 的数据库连接信息,连接到 apollo config db

pro 服务器上需要启动portal ,则需要修改portal 的db 信息,注意修改这里apollo config db 的数据库名字已经变成 ApolloConfigDB2了,
另外 meta server 不建议使用8080 端口,可以改为其他,如7070
dev_meta ip 用dev环境的 ip
pro_meta 使用localhost即可
META_SERVERS_OPTS 使用了哪几个环境就填哪几个

# meta server url, different environments should have different meta server addresses
dev_meta=http://192.16.35.10:7070
#fat_meta=http://fill-in-fat-meta-server:8080
#uat_meta=http://fill-in-uat-meta-server:8080
pro_meta=http://localhost:7070

META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta "

最后两台服务器分别执行 ./build.sh 编译源码

启动服务

第一次编译需要点时间

编译完成后,在各个项目下会出现target文件,里面有个zip文件夹
例如: apollo-adminservice-0.11.0-github.zip
在这里插入图片描述

这里只需要关注三个项目,圈圈出来的
配置中心Apollo多环境部署_第2张图片

在dev服务器下 解压 adminservice 和configservice
在pro服务器下 解压adminservice 和configservice,portal
解压到test文件夹下

unzip apollo-adminservice-0.11.0-github.zip -d test

解压完毕后启动项目,在解压出来的test下有个script文件夹,里面有启动脚本

./startup.sh

注意的是 adminservice 直接启动,configservice 刚刚修改了端口7070,需要修改startup.sh 里的端口设置

SERVER_PORT=7070

portal在启动前修改数据库参数,apollo.portal.envs value 改为 dev,pro 有多个环境的,直接 逗号然后加上去就行,然后启动portal,打开192.16.35.11:8070 (pro服务器:port),登录用户/密码 apollo/admin

配置中心Apollo多环境部署_第3张图片

springboot 客户端demo (待续)

Docker or Kubernetes 方式 (待续)

你可能感兴趣的:(Apollo)