

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Logstash 将本地 Oracle 数据库迁移到亚马逊 OpenSearch 服务
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash"></a>

*Aditya Goteti，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-summary"></a>

此模式描述了如何使用 Logstash 将数据从本地 Oracle 数据库移动到亚马逊 OpenSearch 服务。它包括架构注意事项以及一些所需技能集和建议。数据可以来自单个表，也可以来自需要执行全文搜索的多个表。 

OpenSearch 服务可以在虚拟私有云 (VPC) 中配置，也可以在基于 IP 的限制下公开。此模式描述了在 VPC 中配置 OpenSearch 服务的场景。Logstash 用于从 Oracle 数据库收集数据，将其解析为 JSON 格式，然后将数据馈送到服务中。 OpenSearch  

## 先决条件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ Java 8（Logstash 6.4.3 要求）
+ 本地数据库服务器与 VPC 中的亚马逊弹性计算云 (AWS EC2) 实例之间的连接，使用 AWS 虚拟专用网络 (AWS VPN) 建立
+ 用于检索要从数据库推送到 Ser OpenSearch vice 的所需数据的查询
+ Oracle Java 数据库连接JDBC 驱动程序

**限制**
+ Logstash 无法识别从数据库硬删除的记录 

**产品版本**
+ Oracle Database 12c
+ OpenSearch 服务 6.3
+ Logstash 6.4.3

## 架构
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-architecture"></a>

**源技术堆栈**
+ 本地 Oracle 数据库
+ 本地 AWS VPN

**目标技术堆栈**
+ VPC
+ EC2 实例
+ OpenSearch 服务 
+ Logstash
+ NAT 网关（用于 EC2 实例上的操作系统更新以及安装 Java 8、Logstash 和插件）

**数据迁移架构**

![\[如何使用 Logstash 将数据从本地 Oracle 数据库移动到亚马逊 OpenSearch 服务。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/09f6d2de-de2f-4ed6-af93-34b71b75a263/images/df6a61fb-09fb-49d4-a7e8-b04e88c003df.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-tools"></a>
+ Logstash 6.4.3
+ JDBC 输入插件（[下载及更多信息](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)）
+ [Logstash 输出插件 (\$1es) logstash-output-amazon](https://github.com/awslabs/logstash-output-amazon_es)
+ Oracle JDBC 驱动程序

## 操作说明
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定源数据的大小。 | 源数据的大小是用于确定要在索引中配置的分片数量的参数之一。 | 数据库管理员，数据库开发人员 | 
| 分析每一列的数据类型以及对应的数据。 | OpenSearch 当在文档中发现以前看不见的字段时，服务会动态映射数据类型。如果需要显式声明任何特定的数据类型或格式（例如日期字段），请在创建索引时标识这些字段并定义这些字段的映射。 | 应用程序所有者、开发人员、数据库开发人员 | 
| 确定是否有任何具有主键或唯一键的列。 | 为了避免在更新或插入期间在 Amazon S OpenSearch ervice 中重复记录，您需要在`amazon_es`插件的输出部分配置`document_id`设置（例如，主键`document_id => "%{customer_id}"`在`customer_id`哪里）。 | 应用程序所有者、开发人员 | 
| 分析添加新记录的数量和频率；检查记录删除频率。 | 需要执行此任务来了解源数据的增长率。如果数据读取密集且插入很少，则可以使用单个索引。如果频繁插入新记录并且没有删除，则分片大小很容易超过建议的最大大小 50 GB。在这种情况下，您可通过在 Logstash 中配置索引模式以及在可以使用别名访问它的代码中动态创建索引。 | 应用程序所有者、开发人员 | 
| 确定所需副本数量 |  | 应用程序所有者、开发人员 | 
| 确定在索引上配置的分片数量。 |  | 应用程序所有者、开发人员 | 
| 确定专用主节点、数据节点和 EC2 实例的实例类型。 | 有关更多信息，请参阅[相关资源](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources)部分。 | 应用程序所有者、开发人员 | 
| 确定所需专用主节点和数据节点的数量。 | 有关更多信息，请参阅[相关资源](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources)部分。 |  | 

### 迁移数据
<a name="migrate-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动实 EC2 例。 | 在 AWS VPN 所连接的 VPC 内启动一个 EC2 实例。 | Amazon VPC 结构，AWS VPN | 
| 在实例上安装 Logstash。 EC2  |  | 开发者版 | 
| 安装 Logstash 插件。 | 安装所需 Logstash 插件 `jdbc-input` 和 ` logstash-output-amazon_es`。 | 开发者版 | 
| 配置 Logstash。 | 创建 Logstash 密钥库以存储 AWS Secrets Manager 密钥和数据库凭证等敏感信息，然后将引用放置在 Logstash 配置文件中。 | 开发者版 | 
| 配置死信队列与永久队列。 | 默认情况下，当 Logstash 遇到由于数据包含映射错误或其他问题而无法处理的事件时，Logstash 管道会挂起或删除不成功的事件。为了防止这种情况下的数据丢失，您可将 Logstash 配置为将不成功的事件写入死信队列而不是丢弃它们。为了防止异常终止期间的数据丢失，Logstash 具有持久队列功能，可将消息队列存储在磁盘上。持久队列提供 Logstash 中的数据持久性。 | 开发者版 | 
| 创建亚马逊 OpenSearch 服务域名。 | 使用不要求使用 AWS 身份和访问管理 (IAM) 凭证签署请求的访问策略创建亚马逊 OpenSearch 服务域。亚马逊 OpenSearch 服务域必须在同一 VPC 内创建。您还应该根据您的分析选择实例类型并设置专用节点和主节点的数量。 | 开发者版 | 
| 配置所需的亚马逊 OpenSearch 服务日志。 | 有关更多信息，请参阅[OpenSearch 服务文档](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html)。 |  | 
| 创建索引。 |  | 开发者版 | 
| 开启 Logstash。 | 将 Logstash 以后台服务运行。Logstash 运行配置的 SQL 查询，提取数据，将其转换为 JSON 格式，然后将其提供给服务。 OpenSearch 对于初始加载，不要在 Logstash 配置文件中配置调度程序。 | 开发者版 | 
| 检查文档。 | 检查索引上的文档数量以及所有文档是否都存在于源数据库中。初始加载期间，它们会被添加至索引中并用于停止 Logstash。更改 Logstash 配置。以添加根据客户端要求固定间隔运行的调度程序，然后重新启动 Logstash。Logstash 将仅选择上次运行后更新或添加的记录，上次运行时间戳存储在 Logstash 配置文件中使用 `last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"` 属性配置的文件中。 | 开发者版 | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources"></a>
+ [推荐 CloudWatch 警报](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html) 
+ [专用 Amazon OpenSearch 服务主节点](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-dedicatedmasternodes.html) 
+ [调整亚马逊 OpenSearch 服务域名的大小](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/sizing-domains.html) 
+ [Logstash 文档](https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html) 
+ [JDBC 输入插件](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)
+ [Logstash 输出插件](https://github.com/awslabs/logstash-output-amazon_es)
+ [亚马逊 OpenSearch 服务网站](https://aws.amazon.com/elasticsearch-service/) 