Apollo配置中心搭建全指南:从0到1实现动态配置管理

Apollo配置中心搭建全指南:从0到1实现动态配置管理

一、Apollo 平台简介

1. 平台定位

Apollo 是一款开源的分布式配置管理平台,由携程框架团队开发并开源,用于集中管理应用的配置文件,实现配置的统一管理和动态更新,无需重启应用即可让配置生效,解决了传统配置管理中配置分散、更新繁琐、版本混乱等痛点。

2. 核心功能

  • 统一配置管理:集中管理所有应用的配置,避免配置分散在各个应用中,便于统一维护

  • 动态配置更新:配置修改后实时推送到应用,无需重启应用即可生效

  • 版本控制:记录配置的历史版本,支持配置回滚,便于排查问题

  • 权限管理:细粒度的权限控制,不同角色拥有不同的配置操作权限,保障配置安全

  • 监控告警:配置变更的监控和告警,及时通知相关人员

  • 多环境支持:支持开发、测试、生产等多环境的配置管理

二、环境准备

1. 硬件要求

  • 最低配置:2 核 4G 内存,100G 硬盘(适合小型团队,10 个以下应用使用)

  • 推荐配置:4 核 8G 内存,500G 硬盘(适合中型团队,50 个以下应用使用)

  • 集群配置:每个节点至少 2 核 4G 内存,建议 3 个节点以上,实现高可用

2. 软件要求

  • Java:1.8 及以上版本(Apollo 基于 Java 开发,推荐使用 Java 11)

  • MySQL:5.6 及以上版本,字符集需设置为 utf8mb4

  • Maven:3.5 及以上版本(源码部署时需要)

  • Docker:20.0 及以上版本(Docker 部署时需要)

3. 操作系统

  • Linux:Ubuntu 20.04+/CentOS 7+/Debian 10+

  • Windows:Windows 10 2004+/Windows 11(仅适合开发环境)

  • macOS:macOS 11.0+(仅适合开发环境)

三、数据库搭建

1. 创建数据库

Apollo 服务端需要两个数据库:

  • ApolloPortalDB:用于存储 Portal 的配置数据,如用户、权限、项目信息等

  • ApolloConfigDB:用于存储配置数据,如应用配置、环境配置等

创建数据库的 SQL 命令:

sql 复制代码
CREATE DATABASE ApolloPortalDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE ApolloConfigDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 导入 SQL 脚本

SQL 脚本可以从 Apollo 的 GitHub 仓库下载:https://github.com/ctripcorp/apollo/tree/master/scripts/sql

导入脚本的命令:

bash 复制代码
# 导入ApolloPortalDB脚本
mysql -u root -p ApolloPortalDB < apolloportaldb.sql
# 导入ApolloConfigDB脚本
mysql -u root -p ApolloConfigDB < apolloconfigdb.sql

3. 数据库权限配置

创建 Apollo 用户并授权:

sql 复制代码
CREATE USER 'apollo'@'%' IDENTIFIED BY 'apollo123';
GRANT ALL PRIVILEGES ON ApolloPortalDB.* TO 'apollo'@'%';
GRANT ALL PRIVILEGES ON ApolloConfigDB.* TO 'apollo'@'%';
FLUSH PRIVILEGES;

四、服务端部署

1. 单机部署(Docker 方式,推荐)

1.1 编写 docker-compose.yml 文件
yaml 复制代码
version: '3'
services:
  apollo-db:
    image: mysql:5.7
    container_name: apollo-db
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: ApolloConfigDB
      MYSQL_USER: apollo
      MYSQL_PASSWORD: apollo123
    ports:
      - "3306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
      - mysql-data:/var/lib/mysql
  apollo-configservice:
    image: apolloconfig/apollo-configservice:2.1.0
    container_name: apollo-configservice
    depends_on:
      - apollo-db
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8
      SPRING_DATASOURCE_USERNAME: apollo
      SPRING_DATASOURCE_PASSWORD: apollo123
  apollo-adminservice:
    image: apolloconfig/apollo-adminservice:2.1.0
    container_name: apollo-adminservice
    depends_on:
      - apollo-db
      - apollo-configservice
    ports:
      - "8090:8090"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8
      SPRING_DATASOURCE_USERNAME: apollo
      SPRING_DATASOURCE_PASSWORD: apollo123
volumes:
  mysql-data:
1.2 启动服务
bash 复制代码
docker-compose up -d

2. 集群部署(生产环境推荐)

2.1 部署 Config Service 集群

在多个节点上部署 Config Service,修改 application.properties 文件:

properties 复制代码
spring.datasource.url=jdbc:mysql://mysql-cluster:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username=apollo
spring.datasource.password=apollo123
eureka.client.serviceUrl.defaultZone=http://node1:8080/eureka/,http://node2:8080/eureka/,http://node3:8080/eureka/

启动服务:

bash 复制代码
java -jar apollo-configservice-2.1.0.jar
2.2 部署 Admin Service 集群

同样在多个节点上部署 Admin Service,修改 application.properties 文件:

properties 复制代码
spring.datasource.url=jdbc:mysql://mysql-cluster:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username=apollo
spring.datasource.password=apollo123
eureka.client.serviceUrl.defaultZone=http://node1:8080/eureka/,http://node2:8080/eureka/,http://node3:8080/eureka/

启动服务:

bash 复制代码
java -jar apollo-adminservice-2.1.0.jar

五、Portal 部署

1. 单机部署

1.1 下载 Portal 安装包

从 Apollo 的 GitHub 仓库下载 Portal 安装包:https://github.com/ctripcorp/apollo/releases

1.2 配置 Portal

修改 apollo-env.properties 文件,配置各环境的 Meta Server 地址:

properties 复制代码
dev.meta=http://localhost:8080
pro.meta=http://localhost:8080

修改 application-github.properties 文件,配置 PortalDB 连接:

properties 复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username=apollo
spring.datasource.password=apollo123
1.3 启动 Portal
bash 复制代码
java -jar apollo-portal-2.1.0.jar

访问地址:http://localhost:8070,默认账号:apollo,密码:admin

2. 集群部署

在多个节点上部署 Portal,使用 Nginx 进行负载均衡:

nginx 复制代码
upstream apollo-portal {
    server node1:8070;
    server node2:8070;
    server node3:8070;
}

server {
    listen 80;
    server_name apollo-portal.example.com;

    location / {
        proxy_pass http://apollo-portal;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

六、客户端接入

1. 引入依赖

Maven 依赖:

xml 复制代码
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>2.1.0</version>
</dependency>

2. 配置客户端

在 application.properties 中配置:

properties 复制代码
# 应用ID
app.id=your-app-id
# Apollo Meta地址
apollo.meta=http://localhost:8080
# 环境
env=dev

3. 使用配置

3.1 使用 @Value 注解
java 复制代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ApolloConfigDemo {
    @Value("${demo.config:default value}")
    private String demoConfig;

    public String getDemoConfig() {
        return demoConfig;
    }
}
3.2 使用 ApolloConfig 对象
java 复制代码
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import org.springframework.stereotype.Component;

@Component
public class ApolloConfigDemo {
    private Config config = ConfigService.getAppConfig();

    public String getDemoConfig() {
        return config.getProperty("demo.config", "default value");
    }
}

七、常见问题与解决方案

1. 服务启动失败

  • 问题:服务启动时提示数据库连接失败

  • 解决方案:检查数据库连接配置是否正确,确保数据库服务正常运行,网络连接正常

2. 配置不生效

  • 问题:修改配置后,客户端没有获取到最新配置

  • 解决方案 :检查 <app.id> 是否正确,Apollo Meta 地址是否正确,客户端是否正常连接到服务端

3. 客户端无法连接服务端

  • 问题:客户端启动时提示无法连接到 Apollo 服务端

  • 解决方案:检查服务端是否正常运行,网络连接是否正常,防火墙是否开放了对应的端口

4. 配置回滚失败

  • 问题:配置回滚后,客户端没有获取到历史配置

  • 解决方案:检查回滚的版本是否存在,客户端是否配置了正确的环境

八、结尾互动

如果本文对你有帮助,欢迎点赞、收藏、关注!有任何问题欢迎在评论区交流,我会第一时间回复。如果需要 Apollo 的进阶使用教程或者其他配置管理工具的部署指南,也可以在评论区留言告诉我~

相关推荐
Hi202402171 个月前
Apollo2NuScenes数据转换工具概要设计
自动驾驶·apollo
七夜zippoe1 个月前
分布式配置中心终极对决 Spring Cloud Config与Apollo架构深度解析
分布式·架构·springcloud·apollo·配置中心
qq_317620312 个月前
09.Monitor模块详解
apollo·monitor
qq_317620312 个月前
13.Dreamview模块详解
apollo·dreamview
qq_317620312 个月前
14.Calibration模块详解
apollo·calibration
qq_317620312 个月前
05.Transform模块详解
apollo·transform
Coder个人博客3 个月前
Apollo VehicleState 车辆状态模块接口调用流程图与源码分析
人工智能·自动驾驶·apollo
程序员龙一3 个月前
百度Apollo Cyber RT底层原理解析
自动驾驶·ros·apollo·cyber rt
Coder个人博客3 个月前
Apollo Canbus 底盘通信模块接口调用流程图与源码分析
人工智能·自动驾驶·apollo