前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Linux搭建开源配置管理中心apollo

基于Linux搭建开源配置管理中心apollo

原创
作者头像
星哥玩云
发布2022-05-28 13:33:50
1K0
发布2022-05-28 13:33:50
举报
文章被收录于专栏:开源部署

什么是apollo

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

应用什么场景

项目在不同环境对应的配置不同

Apollo优点

1.统一管理不同环境、不同集群的配置

Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。

同一份代码部署在不同的集群,可以有不同的配置,比如zk的地址等

通过命名空间(namespace)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖

2.配置修改实时生效(热发布)

用户在 Apollo 修改完配置并发布后,客户端能实时(1 秒)接收到最新的配置,并通知到应用程序。

3.版本发布管理

所有的配置发布都有版本概念,从而可以方便地支持配置的回滚。

4.灰度发布

支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。

5.权限管理、发布审核、操作审计

应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。所有的操作都有审计日志,可以方便地追踪问题。

6.客户端配置信息监控

可以在界面上方便地看到配置在被哪些实例使用。

7.提供 Java 和.Net 原生客户端,同时提供HTTP接口

提供了 Java 和.Net 的原生客户端,方便应用集成,同时提供了 Http 接口,非 Java 和.Net 应用也可以方便地使用。

go、python、nodejs、PHP等开发语言也提供客户端使用的案例,参考地址

8. 提供开放平台 API

Apollo 自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过 Apollo 出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis 服务地址等。对于这类应用配置,Apollo 支持应用方通过开放平台 API 在 Apollo 进行配置的修改和发布,并且具备完善的授权和权限控制。

9.部署简单

配置中心作为基础服务,可用性要求非常高,这就要求 Apollo 对外部依赖尽可能地少,目前唯一的外部依赖是 MySQL,所以部署非常简单,只要安装好 Java 和 MySQL 就可以让 Apollo 跑起来。Apollo 还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数。

基于Linux搭建开源配置管理中心apollo
基于Linux搭建开源配置管理中心apollo

测试系统介绍

系统

Centos7

java环境

java1.8

数据库

MariaDB-10.2.9

IP

192.168.1.5

Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。

代码语言:javascript
复制
# java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)
# mysql -V
mysql  Ver 15.1 Distrib 10.2.9-MariaDB, for Linux (x86_64) using readline 5.1

安装apollo

下载Quick Start安装包

安装包共50M,如果访问github网速不给力的话,可以从百度网盘下载。

  1. 从GitHub下载
  2. 从百度网盘下载
    • 通过网盘链接下载,提取码: 9wwe
    • 下载到本地后,在本地解压apollo-quick-start.zip
  3. 为啥安装包要58M这么大?
    • 因为这是一个可以自启动的jar包,里面包含了所有依赖jar包以及一个内置的tomcat容器
代码语言:javascript
复制
cd /data/wwwroot/web/
git clone https://github.com/apolloconfig/apollo-build-scripts.git
由于网络原因下载比较慢
​
wget http://js.funet8.com/centos_software/apollo-build-scripts-master.zip
unzip apollo-build-scripts-master.zip
mv apollo-build-scripts-master apollo.chuanqu.ltd
cd apollo.chuanqu.ltd

创建数据库

代码语言:javascript
复制
# mysql -u root -h192.168.1.5 -P 3306 -p123456
# 导入数据 ApolloPortalDB
> source /data/wwwroot/web/apollo.chuanqu.ltd/sql/apolloportaldb.sql
# 验证
> select `Id`, `AppId`, `Name` from ApolloPortalDB.App;
​
# 导入 ApolloConfigDB
> source /data/wwwroot/web/apollo.chuanqu.ltd/sql/apolloconfigdb.sql
​
> select `NamespaceId`, `Key`, `Value`, `Comment` from ApolloConfigDB.Item;
​

配置数据库连接信息

Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。

注意:填入的用户需要具备对ApolloPortalDB和ApolloConfigDB数据的读写权限。

代码语言:javascript
复制
# vi demo.sh
​
#apollo config db info
apollo_config_db_url="jdbc:mysql://192.168.1.5:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=root
apollo_config_db_password=123456
​
# apollo portal db info
apollo_portal_db_url="jdbc:mysql://192.168.1.5:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=root
apollo_portal_db_password=123456
​

执行启动脚本

代码语言:javascript
复制
./demo.sh start

显示

代码语言:javascript
复制
# ./demo.sh start
==== starting service ====
Service logging file is ./service/apollo-service.log
Application is running as root (UID 0). This is considered insecure.
Started [32028]
Waiting for config service startup.....
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup.
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Application is running as root (UID 0). This is considered insecure.
Started [32251]
Waiting for portal startup....
Portal started. You can visit http://localhost:8070 now!

访问8080端口

image-20220329181451424
image-20220329181451424

访问 http://IP+8070

输入用户名apollo,密码admin后登录

image-20220329181552814
image-20220329181552814
image-20220329181603822
image-20220329181603822

运行客户端程序

运行./demo.sh client启动Demo客户端,忽略前面的调试信息,可以看到如下提示:

代码语言:javascript
复制
Apollo Config Demo. Please input key to get the value. Input quit to exit.

输入timeout,会看到如下信息:

代码语言:javascript
复制
> timeout
> [SimpleApolloConfigDemo] Loading key : timeout with value: 100
修改配置之后
> Changes for namespace application
Change - key: timeout, oldValue: 100, newValue: 250, changeType: MODIFIED
> timeout
Loading key : timeout with value: 250

配置nginx反向代理

域名:

apollo.chuanqu.ltd (接口)

apollo-houtai.chuanqu.ltd (后台)

代码语言:javascript
复制
server {
        listen       80;
        server_name  apollo-houtai.chuanqu.ltd;
        #root /data/wwwroot/web/;
        access_log /data/wwwroot/log/apollo.chuanqu.ltd-access.log main_aliyun;
        error_log off;

        location / {
                index index.php index.html;
                proxy_pass      http://192.168.1.5:8070;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }
}

server {
        listen       80;
        server_name  apollo.chuanqu.ltd;
        #root /data/wwwroot/web/;
        access_log /data/wwwroot/log/apollo.chuanqu.ltd-access.log main_aliyun;
        error_log off;

        location / {
                index index.php index.html;
                proxy_pass      http://192.168.1.5:8080;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }
}

使用新的项目

应用接入Apollo

这部分可以参考Java应用接入指南 https://www.apolloconfig.com/#/zh/usage/java-sdk-user-guide

运行客户端程序

由于使用了新的项目,所以客户端需要修改appId信息。

编辑client/META-INF/app.properties,修改app.id为你新创建的app id。

代码语言:javascript
复制
app.id=你的appId

运行./demo.sh client启动Demo客户端即可。

创建应用

设置appid为 1001,

image-20220330095536959
image-20220330095536959

新增配置

设置,redis_ip和 value为192.168.1.12

image-20220330095647881
image-20220330095647881

点击发布

image-20220330095756015
image-20220330095756015
代码语言:javascript
复制
vim client/META-INF/app.properties
把app.id改成刚才新增的应用的ID
app.id=1001

运行客户端,输入对应key值,看是否能获取到value值。
./demo.sh client
Apollo Config Demo. Please input key to get the value. Input quit to exit.
> redis_ip
Loading key : redis_ip with value: 192.168.1.12
> redis_passwd
Loading key : redis_passwd with value: 123456

新增一个redis_port的KEY
> Changes for namespace application
Change - key: redis_port, oldValue: null, newValue: 6379, changeType: ADDED
> redis_port
Loading key : redis_port with value: 6379

基于Centos7搭建开源配置管理中心apollo,完成。

参考地址

官网文档

分布式部署指南

GitHub仓库

Gitee仓库

知乎:携程开源配置中心Apollo的设计与实现

携程Apollo的PHP客户端

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是apollo
    • 应用什么场景
      • Apollo优点
        • 1.统一管理不同环境、不同集群的配置
        • 2.配置修改实时生效(热发布)
        • 3.版本发布管理
        • 4.灰度发布
        • 5.权限管理、发布审核、操作审计
        • 6.客户端配置信息监控
        • 7.提供 Java 和.Net 原生客户端,同时提供HTTP接口
        • 8. 提供开放平台 API
        • 9.部署简单
      • 测试系统介绍
        • 安装apollo
          • 下载Quick Start安装包
          • 创建数据库
          • 配置数据库连接信息
          • 执行启动脚本
          • 运行客户端程序
      • 配置nginx反向代理
      • 使用新的项目
        • 应用接入Apollo
          • 运行客户端程序
            • 创建应用
        • 参考地址
        相关产品与服务
        云服务器
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档