![image.png](https://dev-media.amazoncloud.cn/3c1d8ae2e01b4a2e9a38b1d047cc27df_image.png "image.png")
## 简介
好消息,ApacheDolphinScheduler正式登陆AWS EC2 AMI应用市场了!
这意味着如果你想要在 AWS 中使用或者体验 DolphinScheduler,可以直接使用 EC2 的 AMI 启动 DolphinScheduler 服务。当启动完成后,你的 EC2 instance 会启动一个 DolphinScheduler 的 Standalone 服务,这是完整的 DolphinScheduler 组件,可以执行 DolphinScheduler 的各种任务。
需要注意的是,不要将Standalone用于生产环境,因为其全部服务都是在一个进程中,并且默认是将元数据存储在内存中,当服务终止数据也不复存在。但是它依旧非常有用,因为我们可以快速启动一个服务,进行体验的快速验证。如果你想要启动一个 DolphinScheduler 的集群,可以参考本文的 Launch Cluster 章节。想了解更多 AMI 相关信息,请查看 https://aws.amazon.com/marketplace/pp/prodview-cbwnzxolq46yo
## 为什么要登陆AWS?
Amazon Web Services (AWS) 是全球最全面、应用最广泛的云平台,从全球数据中心提供超过 200 项功能齐全的服务。数百万客户(包括增长最快速的初创公司、最大型企业和主要的政府机构)都在使用 AWS 来降低成本、提高敏捷性并加速创新。拥有非常多实用的 SaaS 服务,包括 EC2,EMR,Redshift,SageMaker,DMS等,除了提供的服务数量多外,AWS 还在全球有多机房,向全球开发者和用户提供了方便、高效,安全的服务。
## EC2是什么?
**Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services (AWS) 云中提供可扩展的计算容量。** 使用AmazonEC2可避免前期的硬件投入,因此能够快速开发和部署应用程序。你可以使用 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)启动所需数量的虚拟服务器,配置安全性和联网以及管理存储。AmazonEC2 可扩展或缩减以处理需求变化或使用高峰,从而减少预测流量的需求。用户可以在 EC2 上选择适合自己需求的服务,可以选择任务容量, CPU,内存的机型。在 launch EC2 instance 之前,用户可以选择不同的操作系统,例如 windows,linux, mac,这些操作系统在 EC2 中被称为 Amazon Machine Images (AMI)。
## EC2 AMI是什么?
上面所说的,启动EC2instance时,可以指定一个镜像,这就是Amazon Machine Image(AMI)。AMI 是由 AWS 或者社区提供的支持和维护映像,后者提供启动实例所需的信息。在启动实例时,必须指定 (AMI)。在需要具有相同配置的多个实例时,我们可以从单个 AMI 启动多个实例。在需要不同的配置的实例时,可以使用其他 AMI 启动实例。
AMI 包括以下内容:
- 一个或多个 [Amazon Elastic Block Store](https://aws.amazon.com/cn/ebs/?trk=cndc-detail) ([Amazon EBS](https://aws.amazon.com/cn/ebs/?trk=cndc-detail)) 快照;对于由实例存储支持的 AMI,包括一个用于实例(例如,操作系统、应用程序服务器和应用程序)根卷的模板。
- 控制可以使用 AMI 启动实例的 AWS 账户的启动许可。
- 数据块设备映射,指定在实例启动时要附加到实例的卷。
AWS 官方提供的 AMI 都是基础镜像,一般只含有操作系统,如 Windows,Linux,Mac。AMI 另一个强大的功能是,允许用户基于基础镜像自定义 AMI,意味着用户可以运行的 EC2 intance 中安装任意的软件,最后将 instance 的内容进行快照,就能定义一个 AMI 了。
## 使用
### Launch Single Instance
通过 DolphinScheduler AMI launch EC2 instance 的方式非常简单, 只需要在 EC2 页面点击 launch instance,然后点击browsemoreAMIs,在输入框输入DolphinScheduler。然后选择 AMI 后填写 instance type,key pair,network 之后点击 launch instance 就能启动 instance。
![image.png](https://dev-media.amazoncloud.cn/670f7e8b30b04b38ab8b96fe65100b66_image.png "image.png")
Launch instance
![image.png](https://dev-media.amazoncloud.cn/045f20a4a3444b71b4835c9546859830_image.png "image.png")
Browse more AMI
![image.png](https://dev-media.amazoncloud.cn/8d43b505531b488ea5a98e0ee1ab7d4f_image.png "image.png")
Search for DolphinScheduler
![image.png](https://dev-media.amazoncloud.cn/2010c0e8536b4573aa42bfbc1969c665_image.png "image.png")
Launch instance based on DolphinSchduler AMI
实例的启动需要一点时间, 我们可以这时去查看 network 配置,需要确保开启了 12345 和 22 端口,分别是 DolphinScheduler 服务的端口和 ssh 端口。
![image.png](https://dev-media.amazoncloud.cn/6d8d68541fe44c77afded58b5390b625_image.png "image.png")
等待大概 3-5 分钟,就可以通过 EC2 instance 的 public DNS 或者 public IPv4 加上 12345 端口访问 DolphinScheduler 服务了, 登录 DolphinScheduler 服务的用户名和密码分别为 user 以及当前 EC2 实例 ID。
注意:DolphinScheduler的密码是动态的,它会在EC2实例启动后自动更改,以确保你的服务安全。你可以在 EC2 控制台主页中找到它。有关 AWS 对 AMI 提供商的请求的更多详细信息,请参阅 AMI 容器产品。
## Launch Cluster
https://github.com/WhaleOps/packer_tmpl/blob/main/aws/ami/dolphinscheduler/README.md#cluster-server
上面教程告诉我们如何启动单个实例,那**如果用户想要启动一个 DolphinScheduler 集群应该怎么办呢**?
### 为集群添加新的密钥对
下一步,我们将使用 ssh 连接到现有的 EC2 实例,目前我们的 cluster.sh 脚本仅支持一个密钥对。所以我们需要创建一个新的,在启动实例时使用。步骤是 EC2 -> 网络和安全 -> 密钥对 -> 创建密钥对。请小心保存,否则将无法登录你的实例。
### 为集群添加新的安全组
通过 EC2 -> Network & Security -> Security Groups -> Create Security Group 来创建新的安全组,你应该为这个安全组的入站规则添加以下几点:
- 22:默认ssh点
- 2181:Zookeeper 连接点
- 5432:Postgresql 连接点
- 1234: DolphinScheduler 的 MasterServer 点
- 5678: DolphinScheduler 的 WorkerServer 点
- 12345: DolphinScheduler 的 web UI 点
![image.png](https://dev-media.amazoncloud.cn/34515b4476234e2380b62a6f0de4185d_image.png "image.png")
### 启动多个 EC2 实例
目前,这个 AMI 需要用户自己构建,然后从 EC2 -> Images -> AMI 侧边栏路径启动新的 EC2 实例,选择你构建的 AMI,单击 Launch instance from AMI bottom,在 EC2 -> Instances -> 登录一个实例页面,你应该选择你在集群部分的新密钥对中创建的现有密钥对,它可以在密钥对 - >选择密钥对中找到。你还需要选择你集群部分的新安全组中创建的现有安全组,它可以在网络设置中找到: - >选择现有安全组 - >选择安全组。最后,基于你的需要启动多个实例,在EC2 启动页面的 “Number of instances” 中输入你想要的数量。(这个例子中我们启动了8个实例)
### 获取 cluster.sh 和 cluster_env.sh 脚本
如果你已经克隆了这个项目,那么你可以在目录 packer_tmpl/aws/ami/dolphinscheduler/bin 看到两个名为 cluster.sh 和 cluster_env.sh 的脚本。如果不从 GitHub 克隆此存储库,则可以通过以下命令获取这两个脚本:
```
wget https://raw.githubusercontent.com/WhaleOps/packer_tmpl/main/aws/ami/dolphinscheduler/bin/cluster.sh
wget https://raw.githubusercontent.com/WhaleOps/packer_tmpl/main/aws/ami/dolphinscheduler/bin/cluster_env.sh
```
注意:如果你的网络无法连接到 GitHub,上述命令将失败并显示错误日志,例如 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|0.0.0.0|:443... failed: Connection refused.. 你得想办法让你的网络可接到主机 raw.githubusercontent.com 或从 GitHub 网站下载这两个脚本。
### 修改 cluster_env.sh 脚本
用户需要修改 cluster_env.sh 脚本,包括密钥对和 EC2 实例 IPv4 地址或 IPv4 DNS。例如我们启动 8 个 EC2 实例,我们要部署 2 个master-server,3 个 worker-server,1 个 API-server,1 个 Alert-server,1 个database 和 Zookeeper server,每个实例的IPv4地址如下:
- 192.168.1.1:主服务器
- 192.168.1.2:主服务器
- 192.168.1.3:工作服务器
- 192.168.1.4:工作服务器
- 192.168.1.5:工作服务器
- 192.168.1.6: API 服务器
- 192.168.1.7:警报服务器
- 192.168.1.8:元数据数据库(postgresql),Zookeeper
我们需要将部署计划传递给 cluster_env.sh,否则,它将永远不知道如何进行部署(这里我们只显示一些必要的无注释的更改内容)。
```export ips="192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7,192.168.1.8"
export masters="192.168.1.1,192.168.1.2"
export workers="192.168.1.3:default,192.168.1.4:default,192.168.1.5:default"
export alertServer="192.168.1.6"
export apiServers="192.168.1.7"
export DATABASE_SERVER="192.168.1.8"
export REGISTRY_SERVER="192.168.1.8"
```
还应该添加你在集群的新密钥对中创建的密钥对位置,推荐使用绝对路径(这里我们只显示一些必要的更改内容,不做评论)。
# 如果使用此 AMI 启动实例,请不要更改此设置
导出 INSTANCE_USER=${INSTANCE_USER:-"ubuntu"}
# 必须更改为自己的密钥对路径
export INSTANCE_KEY_PAIR="/change/to/your/personal/to/key/pair"
### 执行 cluster.sh 脚本
修改cluster_env.sh 后可以通过命令执行脚本
```
./cluster.sh start
```
它会根据你的网络速度执行一些任务,完成后,你的 EC2 实例将合并到 DolphinScheduler 集群。
### 执行cluster.sh后接着怎么做?
之后,你可以通过实例的 [API-SERVER-Public-IPv4-address]:12345/dolphinscheduler/ui 或 [API-SERVER-Public-IPv4-DNS]:12345 使用 user/EC2_DYNAMIC_INSTANCE_ID 作为默认用户名/密码登录 DolphinScheduler 服务/海豚调度程序/用户界面。
DolphinScheduler 的使用方法详见DolphinScheduler 函数(https://dolphinscheduler.apache.org/en-us/docs/dev/user_doc/guide/homepage.html)。
注意:DolphinScheduler 的密码是动态的,它会在 EC2 实例启动后自动更改,以确保服务安全。你可以在 EC2 控制台主页中找到它。有关 AWS 对 AMI 提供商的请求的更多详细信息,请参阅 AMI 容器产品。
## 注意
需要注意的是不要将 Standalone 用于生产环境,因为全部服务都是在一个进程中,并且默认是将元数据存储在内存中,当服务终止数据也不复存在。但是 Standalone 依旧非常有用,因为我们可以快速启动一个服务,进行体验的快速验证。如果你想要启动一个 DolphinScheduler 的集群,可以参考本文的 Launch Cluster 章节。
## 贡献
我们通过 packer 构建 AMI 并将它完全开源,并非常欢迎对项目感兴趣的小伙伴查看、贡献代码,DolphinSchedulerAMI源码可以在ami-dolphinscheduler(https://github.com/WhaleOps/packer_tmpl/blob/main/aws/ami/dolphinscheduler/README.md)查看,构建关于如何贡献代码,可以通过查如何贡献(https://github.com/WhaleOps/packer_tmpl/blob/main/aws/ami/dolphinscheduler/README.md#contributing)了解。
## 总结
简单介绍了下 AWS、EC2、EC2 AMI 分别是什么,以及如何通过 AMI 创建一个 EC2 的 instance;
- 介绍了如果使用 DolphinScheduler AMI 镜像,如何启动单个实例,以及组建集群;
- 再次强调 Standalone 仅仅用于测试和体验;
- 如果对项目感兴趣应该如何贡献。