Apollo 配置中心多环境部署及应用

Apollo 简介

Apollo配置中心介绍
微服务架构~携程Apollo配置中心架构剖析

部署情况

Apollo 本地开发组件版本要求

  • Java: 1.8+
  • MySQL: 5.6.5+

注意点

apollo-portal 服务和 ApolloPortalDB 数据库只需要在生产环境部署一套

apollo-configservice、apollo-adminservice 服务和 ApolloConfigDB 需要在每个环境部署各一套

服务、数据库

本地模拟部署DEV(开发)、FAT(测试)、UAT(预发布)、PRO(生产)环境

服务:

环境地址服务名
localhost:8070apollo-portal
DEVlocalhost:8081
localhost:8091
apollo-configservice
apollo-adminservice
FATlocalhost:8082
localhost:8092
apollo-configservice
apollo-adminservice
UATlocalhost:8083
localhost:8093
apollo-configservice
apollo-adminservice
PROlocalhost:8084
localhost:8094
apollo-configservice
apollo-adminservice

数据库:

环境地址数据表名称
localhost:3306ApolloPortalDB
DEVlocalhost:3306ApolloConfigDBDev
FATlocalhost:3306ApolloConfigDBFat
UATlocalhost:3306ApolloConfigDBUat
PROlocalhost:3306ApolloConfigDBPro

Apollo 安装

源码下载

Apollo-github 下载源码

初始化数据库

执行sql语句,创建 ApolloConfigDB 和 ApolloPortalDB 两个数据表完成初始化

sql文件路径:

  • scripts/sql/apolloconfigdb.sql
  • scripts/sql/apolloportaldb.sql

调整配置并打包项目

1、找到 scripts/build.sh 文件,修改数据库配置和 各环境 meta 地址

# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDBDev?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=root
 
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=root
 
# meta server url, different environments should have different meta server addresses
dev_meta=http://localhost:8081
fat_meta=http://localhost:8082
uat_meta=http://localhost:8083
pro_meta=http://localhost:8084

2、打包编译,执行命令:

./scripts/build.sh

部署服务

1、多环境部署需要先修改 ApolloPortalDB 数据库 serverconfig 表可支持的环境列表的值为 dev,fat,uat,pro

update `ApolloPortalDB`.`serverconfig` set `Value`='dev,fat,uat,pro' where `Id`='1';

2、apollo-configservice、apollo-adminservice、apollo-portal 三个服务都用相同处理方式,处理完成后必须按照此顺序启动,这里以 apollo-adminservice 为例,步骤如下:

  • 复制 apollo-configservice/target/apollo-configservice-1.7.0-SNAPSHOT-github.zip 到新的文件夹,解压文件

  • 打开解压后的 scripts/startup.sh 文件,修改 LOG_DIR 的值(不修改可能会有创建文件夹权限问题)以及 SERVER_PORT 的值(看需要修改,也可以不改)

## Adjust log dir if necessary
LOG_DIR={path}/100003171
## Adjust server port if necessary
SERVER_PORT=${SERVER_PORT:={port}}
  • 如果 SERVER_PORT 修改了端口号,需要执行 sql 语句:
update `ApolloConfigDB_DEV`.`serverconfig` set `Value`='http://localhost:{port}/eureka/' where `Id`='1';
  • 执行 startup.sh 文件,启动服务

3、访问 http://localhost:{port}/ ({port} 值为 apollo-configservice 的 SERVER_PORT 值),可以查看 apollo-configservice 和 apollo-adminservice 是否启动成功
Eureka页面

4、访问 http://localhost:8070 会出现 Apollo 的登录页面(默认账号/密码:apollo/admin)
Apollo登录页面

5、点击系统信息,查看各环境情况
系统信息

各环境情况

Java客户端接入 Apollo 使用

Apollo 创建配置

1、创建项目
创建项目
2、添加配置项,可以选择不同的环境
配置项
3、创建后需要点击发布才会生效
配置列表

代码部分

1、引入apollo-client 依赖

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.6.0</version>
</dependency>

2、spring boot 启动类文件增加 @EnableApolloConfig 注解

@EnableApolloConfig
public class AppraisalPointsApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(AppraisalPointsApplication.class, args);
    }
}

3、修改 application.yml 配置文件:

app:
    id: crm
apollo:
    meta: http://localhost:8081
    cacheDir: /opt/data/apollo-config
  • app.id 是上面创建的项目 AppId
  • apollo.meta 是 apollo-configservice 服务地址
  • apollo.cacheDir 是配置的本地缓存目录,可不配置,默认路径为:target/classes/config-cache

4、测试

代码部分:

@Controller("ReportController")
@RequestMapping("/admin/report")
public class ReportController extends AbstractBaseController {
    
    @Value("${test}")
    private String val;

    @ResponseBody
    @GetMapping(value = "/test")
    public ResultInfo test() {
        return ResultInfo.success(val);
    }

}

接口请求结果:

{
    "code": 200,
    "message": "操作成功",
    "data": "i am dev",
    "status": true
}

更多应用

公共配置项

1、创建 Namespace
创建 Namespace
2、将项目关联到公共 Namespace
关联公共 Namespace
3、创建公共配置项
创建公共配置项
4、修改application.yml 配置文件,注入非默认 application 的 namespace或多个 namespace 的配置

app:
    id: crm
apollo:
    meta: http://localhost:8081
    bootstrap:
        enabled: true
        namespaces : application,TEST1.common

请求结果:

{
    "code": 200,
    "message": "操作成功",
    "data": "i am common",
    "status": true
}

5、如果私有 properties 也有公共 Namespace 中的配置,会覆盖公共配置项
在这里插入图片描述
请求结果:

{
    "code": 200,
    "message": "操作成功",
    "data": "i am dev-common",
    "status": true
}

灰度发布

通过灰度发布功能,可以实现:

  • 对于一些对程序有比较大影响的配置,可以先在一个或者多个实例生效,观察一段时间没问题后再全量发布配置
  • 对于一些需要调优的配置参数,可以通过灰度发布功能来实现A/B测试。可以在不同的机器上应用不同的配置,不断调整、测评一段时间后找出较优的配置再全量发布配置
使用场景

1、查看实例列表,有 192.168.31.198 和 192.168.31.200 两个客户端使用当前配置;希望修改配置项 test 的值,只对 192.168.31.200 生效
在这里插入图片描述

2、创建灰度版本,修改回复配置 test 的值
在这里插入图片描述
3、配置灰度规则,只对 192.168.31.200 生效,修改后需要点击”灰度发布“
在这里插入图片描述

192.168.31.200 上的请求结果:

{
    "code": 200,
    "message": "操作成功",
    "data": "i am dev-gray",
    "status": true
}

4、如果灰度的配置测试下来比较理想,符合预期,那么就可以点击”全量发布“;不符合预期可以点击”放弃灰度“

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值