Apache Stratos 完整教程
目录
- 什么是 Apache Stratos?
- 核心概念与架构
- 为什么选择 Apache Stratos?
- 环境准备
- 安装与部署 Stratos
- 核心功能实践
- 1 创建第一个 Cartridge (应用)
- 2 部署应用
- 3 绑定公有 IP
- 4 自动伸缩
- 5 多租户
- 常见问题与解决方案
- 学习资源与社区
什么是 Apache Stratos?
Apache Stratos 是一个开源的 Platform as a Service (PaaS) 框架,它旨在简化云应用程序的部署、管理和扩展,您可以将其想象成一个“操作系统”或“中间件”,它运行在底层基础设施(如 IaaS)之上,为开发者提供了一个标准化的环境来运行他们的应用。

核心目标:
- 简化运维: 开发者无需关心服务器配置、网络、负载均衡等底层细节。
- 提高效率: 实现应用的快速部署、伸缩和生命周期管理。
- 多租户支持: 在同一个平台上安全地隔离和管理不同用户(租户)的应用。
- 异构云支持: 能够管理部署在不同云环境(如 AWS, Azure, OpenStack)中的应用。
重要提示: Apache Stratos 项目已于 2025 年 11 月 毕业,并进入 Apache 软件基金会 的存档项目 状态,这意味着它不再进行积极的开发和维护,尽管如此,它仍然是学习和理解 PaaS 架构、多租户、自动伸缩等核心概念的绝佳案例,许多商业 PaaS 产品(如 WSO2 Stratosphere,一个商业产品)的理念都源于此。
核心概念与架构
理解 Stratos 的关键在于掌握其核心组件:
1 Cartridge (墨盒)
这是 Stratos 中最核心的概念,一个 Cartridge 代表一个可部署的应用或服务。

- 类型:
- Web Cartridge: Tomcat, Nginx, PHP,用于托管 Web 应用。
- Service Cartridge: MySQL, MongoDB, Cassandra,作为数据库或缓存服务。
- 模板: 每个 Cartridge 都定义了一个模板,描述了如何启动、配置和管理该类型的应用实例。
2 Cartridge Instance (墨盒实例)
一个 Cartridge 的具体运行实例,您可以启动 3 个 Tomcat Cartridge Instances 来构成一个集群。
3 Stratos Component (Stratos 组件)
Stratos 平台自身由多个独立的、分布式的组件构成,每个组件负责特定的功能。
- Cloud Controller: 核心控制器,负责接收来自 API 或管理员的请求,并协调整个平台的操作。
- Cartridge Agent: 部署在每个服务器实例上的轻量级代理,负责与 Cloud Controller 通信,执行启动、停止、状态检查等具体任务。
- Service Bus: (通常使用 WSO2ESB 或 Apache Synapse) 负责组件间的消息通信。
- Identity Server: 负责用户认证、授权和租户管理。
- Load Balancer: 负责将外部流量分发到后端的 Cartridge Instances。
- Iaas Controller: 负责与底层 IaaS (如 OpenStack, AWS) 交互,管理虚拟机的生命周期。
4 Tenant (租户)
使用 Stratos 平台的组织或个人,每个租户拥有自己隔离的资源空间。
5 统一网关
所有外部流量的入口点,它会根据请求的域名、路径等信息,将流量智能地路由到后端正确的 Cartridge Instance 或负载均衡器。
6 架构图
+-----------------+ +-----------------+ +-----------------+
| End User/App | <--> | Stratos UI | | Stratos API |
| | | (管理界面) | | (RESTful API) |
+-----------------+ +-----------------+ +--------+--------+
|
v
+-----------------------------------------------------------+------------------+
| Stratos Core (PaaS Controller) |
| +----------------+ +----------------+ +----------------+ +-------------+ |
| | Cloud Controller|<->| Service Bus |<->| Identity Server|<->| Load Balancer| |
| | | | | | | | | |
| +----------------+ +----------------+ +----------------+ +------+------+ |
| ^ ^ ^ | |
| | | | | |
| +----------------+ +----------------+ +----------------+ | |
| | Iaas Controller| | Cartridge Agent| | ...其他组件 | | |
| | (管理VM/网络) | | (在VM中运行) | | | | |
| +----------------+ +----------------+ +----------------+ | |
| | | | |
| v v | |
| +--------------------------------------------------+ | |
| | Underlying Infrastructure (IaaS) | | |
| | (e.g., OpenStack, AWS, vSphere, Physical Servers) | | |
| +--------------------------------------------------+ | |
+-----------------------------------------------------------------------------+
为什么选择 Apache Stratos?
尽管项目已归档,但其设计思想依然有价值:
- 成熟的架构: 完整地实现了 PaaS 的所有核心功能。
- 强大的多租户能力: 细粒度的资源隔离,适合企业级应用。
- 自动化与编排: 自动部署、伸缩、故障恢复,极大减轻运维负担。
- API 驱动: 提供完整的 REST API,方便与 CI/CD 工具链集成,实现 DevOps。
- 可扩展性: 模块化设计,易于添加新的 Cartridge 类型或与新的 IaaS 集成。
环境准备
Stratos 的部署相对复杂,通常需要一个至少 4vCPU, 8GB RAM 的虚拟机来运行其所有组件。
1 软件要求
- 操作系统: CentOS 7 / RHEL 7 (推荐)
- Java: JDK 1.8
- Maven: 3.x
- Git
- 防火墙: 需要开放多个端口,详见官方文档。
- 底层基础设施: 准备一个 OpenStack 或其他 IaaS 环境,用于创建 Cartridge 实例,如果没有,可以使用 Stratos 自带的 Minikube 或 Docker 模式进行快速体验(功能有限)。
2 下载源码
# 克隆 Stratos 仓库 (建议使用最后一个稳定版本,如 4.1.0) git clone https://github.com/apache/stratos.git cd stratos # 切换到最新的稳定标签 git checkout 4.1.0
安装与部署 Stratos
Stratos 的构建和部署过程通过 Maven 脚本完成。
1 构建项目
在 Stratos 根目录下执行:
mvn clean install -DskipTests
这个过程会下载所有依赖项,编译源码,并打包成可部署的产品,耗时较长。
2 运行分布脚本
构建完成后,使用以下脚本启动所有 Stratos 组件:
./distribution/server/scripts/stratos-server.sh
首次运行时,它会自动下载并解压必要的二进制文件,然后启动所有服务。
3 验证安装
- 检查日志: 查看以下日志文件,确认所有组件都已成功启动。
repository/logs/wso2carbon.logrepository/logs/stratos-agent.logrepository/logs/stratos-cloud-controller.logrepository/logs/stratos-load-balancer.log
- 访问管理控制台:
- 打开浏览器,访问
https://<stratos-server-ip>:9443/carbon - 默认用户名/密码:
admin/admin
- 打开浏览器,访问
- 访问租户控制台:
- 访问
https://<stratos-server-ip>:9443/ - 这是租户登录和使用的界面。
- 访问
核心功能实践
1 创建第一个 Cartridge (应用)
- 登录 Stratos 管理控制台 (
https://<stratos-server-ip>:9443/carbon)。 - 导航到 Cartridge -> Add Cartridge。
- 选择一个类型,Tomcat Cartridge。
- 上传 Cartridge 的 Packing 文件(通常在
modules/distribution/products/stratos-server/4.1.0/packaging/cartridges/目录下可以找到,如wso2carbon.tomcar.cartridge.packing)。 - 填写其他必要信息,如名称、描述、类型(Web/Service)等。
- 点击 Add,系统会解析该 Cartridge 并使其在平台中可用。
2 部署应用
- 登录租户控制台 (
https://<stratos-server-ip>:9443/)。 - 点击 Add Application。
- 输入应用名称,点击 Next。
- 在 Add Cartridge 页面,选择刚刚创建的 Tomcat Cartridge。
- 选择 Single Instance 或 Cluster,然后点击 Add。
- Stratos 会自动向 IaaS 请求创建一个虚拟机,并在该虚拟机上部署和启动 Tomcat 实例,这个过程可能需要几分钟。
- 部署完成后,你可以在 Applications 页面看到你的应用,并获取其 URL。
3 绑定公有 IP
默认情况下,Cartridge 实例可能只有私有 IP,要让外部用户访问,需要绑定一个公网 IP。
- 在租户控制台的 Applications 页面,找到你的应用。
- 点击应用名称,进入详情页。
- 在 Network Configuration 部分,点击 Add Public IP。
- 从你的 IaaS (如 OpenStack) 的网络中分配一个浮动 IP 给这个实例。
- 你就可以通过这个公网 IP 访问你的 Tomcat 应用了。
4 自动伸缩
Stratos 可以根据负载自动增加或减少 Cartridge 实例数量。
- 在应用详情页,导航到 Auto Scaling 选项卡。
- 点击 Add Policy。
- 定义伸缩策略:
- 触发条件: "CPU 使用率持续 5 分钟超过 80%"。
- 执行动作: "增加 2 个实例"。
- 冷却时间: 防止在短时间内频繁伸缩。
- 保存策略,当满足条件时,Stratos 会自动执行伸缩操作。
5 多租户
Stratos 的多租户是内置的。
- 注册新租户: 在租户控制台的登录页面,点击 Sign Up,填写信息即可注册一个新的租户。
- 登录: 使用新租户的凭据登录,你会发现这是一个完全独立的空间,你只能看到和管理自己部署的应用,无法看到其他租户的资源,这种隔离是由底层的 Identity Server 和资源分配策略保证的。
常见问题与解决方案
-
Q: 启动
stratos-server.sh时,某些组件启动失败怎么办?- A: 首先检查
repository/logs/目录下的对应日志文件(如wso2carbon.log),查找错误信息,常见原因包括端口被占用、内存不足、数据库连接失败等。
- A: 首先检查
-
Q: 为什么我看不到 Cartridge 列表?
- A: 确保你已经以管理员身份登录管理控制台,并且已经成功添加了你需要的 Cartridge,租户控制台只能使用管理员已添加的 Cartridge。
-
Q: 部署应用后,访问 URL 超时或无法连接?
- A:
- 检查防火墙是否放行了 Stratos 和 Cartridge 实例所需的端口。
- 检查 Cartridge 实例是否成功启动,可以在 IaaS 控制台(如 OpenStack Dashboard)查看 VM 的状态和日志。
- 检查 Load Balancer 的配置是否正确,是否已将流量路由到后端实例。
- A:
-
Q: Stratos 项目已经归档了,我还能用它吗?
- A: 可以,但需要意识到它不再有官方更新和安全补丁,它非常适合用于学习和实验 PaaS 概念,在生产环境中使用需要谨慎,并自行承担维护风险。
学习资源与社区
由于项目已归档,官方文档和社区资源可能不再更新,但依然非常有价值。
- 官方文档 (存档):
- Apache Stratos Documentation (Archived) - 这是最权威的参考。
- 源码仓库:
- 邮件列表:
- Apache Stratos Mailing List - 可以在存档列表中搜索历史邮件,了解过去的讨论。
- 相关文章和博客:
在 Google 或百度搜索 "Apache Stratos tutorial"、"Apache Stratos architecture" 可以找到很多由社区撰写的博客和文章。
希望这份教程能帮助您顺利入门 Apache Stratos!
