在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用于应用程序,还适用于来自每个可以想象的设备的大量日志,这些日志需要保留合理的时间,以便进行合规性和故障排除。但是,在快速存储(例如 NVMe)上存储数月/数年的可搜索数据可能会占用大量昂贵的驱动器空间。通常,过去几周的数据是搜索最多的,因此存储在最快的硬件上。但随着数据变旧,它对于立即进行故障排除的用处变得不那么大,并且不需要在昂贵的硬件上 - 即使它仍然包含一两个秘密。问题变成了,我们如何在不牺牲性能的情况下快速搜索这些存档数据。是否有可能两全其美?
OpenSearch 中的提示;基于 Apache Lucene 的分布式搜索和分析引擎。将数据添加到 OpenSearch 索引后,您可以对数据执行全文搜索。任何需要搜索的应用程序都有使用 OpenSearch 的用例,例如,您可以使用它来在应用程序中构建搜索功能,DevOps 工程师可以将 OpenSearch 用作日志分析引擎,后端工程师可以通过 OpenTelemetry 等收集器放置跟踪数据,以更好地了解应用程序性能。借助功能丰富的内置搜索和可视化功能,您可以查明基础架构问题(如磁盘空间不足、获取错误状态代码等),并在它们对运营造成严重破坏之前将其显示在控制面板中。但是,随着日志数据的增长,有时将所有数据保存在一个节点甚至单个集群上是不切实际的。我们喜欢 OpenSearch,因为它具有分布式设计,与 AIStor 不同,AIStor 可以并行存储您的数据并处理请求。AIStor 非常简单,只需一个简单的二进制文件即可启动和运行。您可以从笔记本电脑的单节点单驱动器配置开始,然后将其扩展到具有多驱动器、多节点和多站点的生产环境 - 具有您在企业级存储软件中期望的相同功能集。您不仅可以构建分布式 OpenSearch 集群,还可以随着集群的增长细分集群中各个节点的职责。您可以使用具有大磁盘的节点来存储数据,具有大量 RAM 的节点用于索引,以及具有大量 CPU 但较少磁盘的节点来管理集群的状态。
随着数据的增长,您可以将旧数据/存档数据分层到 AIStor 存储桶中,以便保留 SSD/NVMe 存储以存储添加到集群的最新数据。此外,当这些快照存储在 AIStor 存储桶中时,您可以直接搜索它们。从逻辑上讲,在移动快照时,重要的是要考虑到从远程驱动器访问数据比从本地驱动器访问数据慢,因此搜索查询的延迟通常较高,但提高存储效率通常是值得的。使用 AIStor,您可以获得最快的网络对象存储。高速网络上的分布式 AIStor 可以胜过本地存储。与其他速度较慢的对象存储不同,AIStor 可以无缝访问这些快照,就像它们在 OpenSearch 集群上的本地快照一样,从而在几秒钟内根据结果的大小在虹吸日志数据中搜索见解时节省宝贵的时间、网络带宽和团队精力。相比之下,本地还原需要数小时才能执行作,然后才能查询数据。OpenSearch 在与存储分层一起使用时效率更高,这降低了它的总拥有成本,此外,您还可以获得将数据写入 AIStor 的额外好处,这些数据是不可变的、受版本控制的,并且受纠删码保护。此外,将 OpenSearch 分层与 AIStor 对象存储结合使用,使数据文件可供其他云原生机器学习和分析应用程序使用。
基础设施
让我们使用 Docker 设置 OpenSearch 和 AIStor,并介绍一些功能来展示它们的功能。
开放搜索
我们将创建自定义 Docker 映像,因为我们将使用自定义插件构建它以连接到我们的 AIStor 对象存储。
FROM opensearchproject/opensearch:2.8.0
ENV MINIO_ACCESS_KEY_ID minioadmin
ENV MINIO_SECRET_ACCESS_KEY minioadmin
ENV MINIO_ENDPOINT minio:9000
ENV MINIO_PROTOCOL http
RUN /usr/share/opensearch/bin/opensearch-plugin install --batch repository-s3
RUN /usr/share/opensearch/bin/opensearch-keystore create
RUN echo $MINIO_ACCESS_KEY_ID | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key
RUN echo $MINIO_SECRET_ACCESS_KEY | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key
RUN echo $MINIO_ENDPOINT | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.endpoint
RUN echo $MINIO_PROTOCOL | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.protocol
构建自定义 Docker 镜像
docker build --tag=opensearch-minio
运行以下 Docker 命令,使用我们之前下载的映像启动容器
docker run -d -p 9200:9200 -p 9600:9600 -v /usr/share/opensearch/data -e "discovery.type=single-node" opensearch-minio
使用默认的“admin”凭据将 curl 到 localhost 端口 9200,以验证 OpenSearch 是否正在运行
curl https://localhost:9200 -ku 'admin:admin'
您应该会看到类似于下面的输出
{
"name" : "a937e018cee5",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "GLAjAG6bTeWErFUy_d-CLw",
"version" : {
"distribution" : "opensearch",
"number" : <version>,
"build_type" : <build-type>,
"build_hash" : <build-hash>,
"build_date" : <build-date>,
"build_snapshot" : false,
"lucene_version" : <lucene-version>,
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
我们也可以检查容器状态
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a937e018cee5 opensearch-minio "./opensearch-docker..." 19 minutes ago Up 19 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, 9650/tcp stupendous_burt
为 AIStor 设置存储库
为了设置可搜索的快照索引,您需要为 OpenSearch 集群设置一些先决条件和配置。我们将在这里详细介绍它们。
在 ‘opensearch.yaml’ 中,创建一个节点并定义节点角色
node.name: snapshots-node
node.roles: [ search ]
让我们使用“_snapshot”API 注册 AIStor 存储桶
curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository" -H 'Content-Type: application/json' -d'
{
"type": "s3",
"settings": {
"bucket": "testbucket123",
"base_path": "my/snapshot/directory"
}
}'
现在我们有了存储库,让我们继续创建一个可搜索的快照。
可搜索快照
为了制作快照,我们需要使用之前创建的存储库进行 API 调用。
curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository/1"
我们来检查一下快照的状态
curl -XGET "http://localhost:9200/_snapshot/my-minio-repository/1"
{
"snapshots": [{
"snapshot": "1",
"version": "6.5.4",
"indices": [
"opensearch_dashboards_sample_data_ecommerce",
"my-index",
"opensearch_dashboards_sample_data_logs",
"opensearch_dashboards_sample_data_flights"
],
"include_global_state": true,
"state": "IN_PROGRESS",
...
}]
}
让我们在 AIStor 端也看看这个快照
root@aj-test-1:~# mc ls testbucket123/my/snapshot/directory
[2023-06-09 17:37:31 UTC] 1.5KiB STANDARD 1/
如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。现在,您一定想知道,“我们已经拍摄了快照,但如何还原它,以便我们可以分析和搜索备份的索引?尽管使用 OpenSearch 非常有可能,但与传统意义上的恢复整个快照不同,我们将向您展示如何在快照仍存储在 AIStor 上时更有效地搜索快照。我们需要做的最重要的配置更改是将 ‘storage_type’ 设置为 'remote_snapshot”。此设置告诉 OpenSearch 快照是将在本地还原以供搜索,还是在存储在 AIStor 上时进行远程搜索。
curl -XPOST "http://localhost:9200/_snapshot/my-minio-repository/1/_restore" -H 'Content-Type: application/json' -d'
{
"indices": "opensearch-dashboards*,my-index*",
"ignore_unavailable": true,
"include_global_state": false,
"include_aliases": false,
"partial": false,
"storage_type": "remote_snapshot",
"rename_pattern": "opensearch-dashboards(.+)",
"rename_replacement": "restored-opensearch-dashboards$1",
"index_settings": {
"index.blocks.read_only": false
},
"ignore_index_settings": [
"index.refresh_interval"
]
}'
让我们列出所有索引,看看是否存在 ‘remote_snapshot’ 类型
curl -XGET "http://localhost:9200/my-index/_settings?pretty"
{
"my-index": {
"settings": {
"index": {
"store": {
"type": "remote_snapshot"
}
}
}
}
}
如您所见,将 AIStor 配置为 OpenSearch 远程存储库非常简单。
取回您的日志
通过利用 AIStor 作为 OpenSearch 的后端,您不仅可以拍摄可搜索的快照,还可以创建不可搜索(也称为“本地”)快照,并将其用作定期备份,这些备份可以恢复到其他集群进行灾难恢复,或者使用其他数据进行丰富以进行进一步分析。话虽如此,我们需要了解使用远程存储库作为快照位置的某些潜在陷阱。访问速度或多或少由 AIStor 的速度和性能决定,而 AIStor 通常受网络带宽限制。请注意,在 AWS S3 等公有云中,您可能还需要按请求支付检索费用,因此用户应密切监控产生的任何费用。搜索远程数据有时会影响在同一节点上运行的其他查询的性能。通常建议工程师利用节点角色,并为性能关键型应用程序创建具有搜索角色的专用节点。
在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用于应用程序,还适用于来自每个可以想象的设备的大量日志,这些日志需要保留合理的时间,以便进行合规性和故障排除。但是,在快速存储(例如 NVMe)上存储数月/数年的可搜索数据可能会占用大量昂贵的驱动器空间。通常,过去几周的数据是搜索最多的,因此存储在最快的硬件上。但随着数据变旧,它对于立即进行故障排除的用处变得不那么大,并且不需要在昂贵的硬件上 - 即使它仍然包含一两个秘密。问题变成了,我们如何在不牺牲性能的情况下快速搜索这些存档数据。是否有可能两全其美?
OpenSearch 中的提示;基于 Apache Lucene 的分布式搜索和分析引擎。将数据添加到 OpenSearch 索引后,您可以对数据执行全文搜索。任何需要搜索的应用程序都有使用 OpenSearch 的用例,例如,您可以使用它来在应用程序中构建搜索功能,DevOps 工程师可以将 OpenSearch 用作日志分析引擎,后端工程师可以通过 OpenTelemetry 等收集器放置跟踪数据,以更好地了解应用程序性能。借助功能丰富的内置搜索和可视化功能,您可以查明基础架构问题(如磁盘空间不足、获取错误状态代码等),并在它们对运营造成严重破坏之前将其显示在控制面板中。但是,随着日志数据的增长,有时将所有数据保存在一个节点甚至单个集群上是不切实际的。我们喜欢 OpenSearch,因为它具有分布式设计,与 AIStor 不同,AIStor 可以并行存储您的数据并处理请求。AIStor 非常简单,只需一个简单的二进制文件即可启动和运行。您可以从笔记本电脑的单节点单驱动器配置开始,然后将其扩展到具有多驱动器、多节点和多站点的生产环境 - 具有您在企业级存储软件中期望的相同功能集。您不仅可以构建分布式 OpenSearch 集群,还可以随着集群的增长细分集群中各个节点的职责。您可以使用具有大磁盘的节点来存储数据,具有大量 RAM 的节点用于索引,以及具有大量 CPU 但较少磁盘的节点来管理集群的状态。
随着数据的增长,您可以将旧数据/存档数据分层到 AIStor 存储桶中,以便保留 SSD/NVMe 存储以存储添加到集群的最新数据。此外,当这些快照存储在 AIStor 存储桶中时,您可以直接搜索它们。从逻辑上讲,在移动快照时,重要的是要考虑到从远程驱动器访问数据比从本地驱动器访问数据慢,因此搜索查询的延迟通常较高,但提高存储效率通常是值得的。使用 AIStor,您可以获得最快的网络对象存储。高速网络上的分布式 AIStor 可以胜过本地存储。与其他速度较慢的对象存储不同,AIStor 可以无缝访问这些快照,就像它们在 OpenSearch 集群上的本地快照一样,从而在几秒钟内根据结果的大小在虹吸日志数据中搜索见解时节省宝贵的时间、网络带宽和团队精力。相比之下,本地还原需要数小时才能执行作,然后才能查询数据。OpenSearch 在与存储分层一起使用时效率更高,这降低了它的总拥有成本,此外,您还可以获得将数据写入 AIStor 的额外好处,这些数据是不可变的、受版本控制的,并且受纠删码保护。此外,将 OpenSearch 分层与 AIStor 对象存储结合使用,使数据文件可供其他云原生机器学习和分析应用程序使用。
基础设施
让我们使用 Docker 设置 OpenSearch 和 AIStor,并介绍一些功能来展示它们的功能。
开放搜索
我们将创建自定义 Docker 映像,因为我们将使用自定义插件构建它以连接到我们的 AIStor 对象存储。
FROM opensearchproject/opensearch:2.8.0
ENV MINIO_ACCESS_KEY_ID minioadmin
ENV MINIO_SECRET_ACCESS_KEY minioadmin
ENV MINIO_ENDPOINT minio:9000
ENV MINIO_PROTOCOL http
RUN /usr/share/opensearch/bin/opensearch-plugin install --batch repository-s3
RUN /usr/share/opensearch/bin/opensearch-keystore create
RUN echo $MINIO_ACCESS_KEY_ID | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key
RUN echo $MINIO_SECRET_ACCESS_KEY | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key
RUN echo $MINIO_ENDPOINT | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.endpoint
RUN echo $MINIO_PROTOCOL | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.protocol
构建自定义 Docker 镜像
docker build --tag=opensearch-minio
运行以下 Docker 命令,使用我们之前下载的映像启动容器
docker run -d -p 9200:9200 -p 9600:9600 -v /usr/share/opensearch/data -e "discovery.type=single-node" opensearch-minio
使用默认的“admin”凭据将 curl 到 localhost 端口 9200,以验证 OpenSearch 是否正在运行
curl https://localhost:9200 -ku 'admin:admin'
您应该会看到类似于下面的输出
{
"name" : "a937e018cee5",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "GLAjAG6bTeWErFUy_d-CLw",
"version" : {
"distribution" : "opensearch",
"number" : <version>,
"build_type" : <build-type>,
"build_hash" : <build-hash>,
"build_date" : <build-date>,
"build_snapshot" : false,
"lucene_version" : <lucene-version>,
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
我们也可以检查容器状态
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a937e018cee5 opensearch-minio "./opensearch-docker..." 19 minutes ago Up 19 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, 9650/tcp stupendous_burt
为 AIStor 设置存储库
为了设置可搜索的快照索引,您需要为 OpenSearch 集群设置一些先决条件和配置。我们将在这里详细介绍它们。
在 ‘opensearch.yaml’ 中,创建一个节点并定义节点角色
node.name: snapshots-node
node.roles: [ search ]
让我们使用“_snapshot”API 注册 AIStor 存储桶
curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository" -H 'Content-Type: application/json' -d'
{
"type": "s3",
"settings": {
"bucket": "testbucket123",
"base_path": "my/snapshot/directory"
}
}'
现在我们有了存储库,让我们继续创建一个可搜索的快照。
可搜索快照
为了制作快照,我们需要使用之前创建的存储库进行 API 调用。
curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository/1"
我们来检查一下快照的状态
curl -XGET "http://localhost:9200/_snapshot/my-minio-repository/1"
{
"snapshots": [{
"snapshot": "1",
"version": "6.5.4",
"indices": [
"opensearch_dashboards_sample_data_ecommerce",
"my-index",
"opensearch_dashboards_sample_data_logs",
"opensearch_dashboards_sample_data_flights"
],
"include_global_state": true,
"state": "IN_PROGRESS",
...
}]
}
让我们在 AIStor 端也看看这个快照
root@aj-test-1:~# mc ls testbucket123/my/snapshot/directory
[2023-06-09 17:37:31 UTC] 1.5KiB STANDARD 1/
如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。现在,您一定想知道,“我们已经拍摄了快照,但如何还原它,以便我们可以分析和搜索备份的索引?尽管使用 OpenSearch 非常有可能,但与传统意义上的恢复整个快照不同,我们将向您展示如何在快照仍存储在 AIStor 上时更有效地搜索快照。我们需要做的最重要的配置更改是将 ‘storage_type’ 设置为 'remote_snapshot”。此设置告诉 OpenSearch 快照是将在本地还原以供搜索,还是在存储在 AIStor 上时进行远程搜索。
curl -XPOST "http://localhost:9200/_snapshot/my-minio-repository/1/_restore" -H 'Content-Type: application/json' -d'
{
"indices": "opensearch-dashboards*,my-index*",
"ignore_unavailable": true,
"include_global_state": false,
"include_aliases": false,
"partial": false,
"storage_type": "remote_snapshot",
"rename_pattern": "opensearch-dashboards(.+)",
"rename_replacement": "restored-opensearch-dashboards$1",
"index_settings": {
"index.blocks.read_only": false
},
"ignore_index_settings": [
"index.refresh_interval"
]
}'
让我们列出所有索引,看看是否存在 ‘remote_snapshot’ 类型
curl -XGET "http://localhost:9200/my-index/_settings?pretty"
{
"my-index": {
"settings": {
"index": {
"store": {
"type": "remote_snapshot"
}
}
}
}
}
如您所见,将 AIStor 配置为 OpenSearch 远程存储库非常简单。
取回您的日志
通过利用 AIStor 作为 OpenSearch 的后端,您不仅可以拍摄可搜索的快照,还可以创建不可搜索(也称为“本地”)快照,并将其用作定期备份,这些备份可以恢复到其他集群进行灾难恢复,或者使用其他数据进行丰富以进行进一步分析。话虽如此,我们需要了解使用远程存储库作为快照位置的某些潜在陷阱。访问速度或多或少由 AIStor 的速度和性能决定,而 AIStor 通常受网络带宽限制。请注意,在 AWS S3 等公有云中,您可能还需要按请求支付检索费用,因此用户应密切监控产生的任何费用。搜索远程数据有时会影响在同一节点上运行的其他查询的性能。通常建议工程师利用节点角色,并为性能关键型应用程序创建具有搜索角色的专用节点。