今年 6 月,我们发布了一篇关于OpenSearch 上的可搜索快照功能的博文,因为它是一个很酷的项目,旨在满足对真正开源的快速搜索后端的需要。当时,我们重点介绍了使用 MinIO 后端的 OpenSearch 设置 - 并将其余部分留待以后的文章介绍。
现在是重新审视 OpenSearch 和 MinIO 的时候了。在浏览 OpenSearch 文档时,我们注意到了在西雅图举办的OpenSearchCon 2023 的 CFP。我们喜欢 OpenSearch,因为它具有分布式设计,与 MinIO 类似,MinIO 并行存储您的数据并处理请求。MinIO 非常易于使用,只需一个小的二进制文件即可启动和运行。您不仅可以构建分布式 OpenSearch 集群,还可以随着集群的增长细分集群中各个节点的职责。您可以拥有具有大型磁盘来存储数据的节点、拥有大量 RAM 用于索引的节点以及拥有大量 CPU 但磁盘较少的节点来管理集群状态。
由于存在如此多的相似之处,我们想“为什么不试试呢”,并提交了一份提案,将在会议上讨论 OpenSearch 和 MinIO 的其余组合功能集,例如备份和还原快照、通过 ISM(索引状态管理)分层数据,当然还有可搜索快照。显然,OpenSearch 人员像我们一样喜欢 MinIO,我们的演讲被接受了,我们被邀请在西雅图发表演讲。西北部非常寒冷,但我们仍然非常兴奋。
那么我们谈了什么?以下是 OpenSearchCon 2023 演讲的简要概述。
如何创建、还原、分层和搜索存储在对象存储中的快照索引
主题涉及在数据存储生命周期过程中使用 MinIO 存储 OpenSearch 数据的各种方法。一旦会议人员发布,我将在以后的博文中分享演示文稿和视频。
我首先展示了如何通过 Docker 安装 MinIO,但也解释了其他各种安装方法,例如 Kubernetes 和其他本地方法。
docker run -d \
-p 20091:9001 \
-v /home/aj/minio/disk-1:/mnt/disk1 \
-v /home/aj/minio/disk-2:/mnt/disk2 \
-v /home/aj/minio/disk-3:/mnt/disk3 \
-v /home/aj/minio/disk-4:/mnt/disk4 \
--name minio \
--hostname minio \
quay.io/minio/minio server http://minio/mnt/disk{1...4}/minio --console-address ":9001"
一旦 MinIO 后端启动并运行,我就登录并创建了一个名为testbucket123
的存储桶。
接下来,我在 OpenSearch 中设置了访问 MinIO 所需的凭据,首先添加了访问密钥和密钥。
echo minioadmin | ./bin/opensearch-keystore add --stdin s3.client.default.access_key
echo minioadmin | ./bin/opensearch-keystore add --stdin s3.client.default.secret_key
在opensearch.yml
中,更新以下设置
s3.client.default.endpoint: localhost:20091
s3.client.default.protocol: http
在生产环境中,建议使用https
,但在本演示中,我将保持简单并使用http
。
我将进行 API 调用以添加我之前创建的存储桶名称,该存储桶将使用我设置的凭据访问 MinIO 实例。
PUT _snapshot/object-storage-repository
{
"type": "s3",
"settings": {
"bucket": "testbucket123",
"base_path": "openseasrch/snapshot"
}
}
是的,基本路径中有一个错别字,但我还是用了。
备份、还原和可搜索快照非常简单,最有趣的部分是 ISM 或索引状态管理策略。如果您还记得我们关于Elasticsearch 冷冻层的博文,我谈到了索引生命周期管理或 ILM,这与它非常相似,但配置起来容易得多。
我介绍了一个简单的用例,这是 ISM 策略最常用的方法之一。以下是我想到的工作流程
- 14 天后将数据从热层滚动到温层
- 将温层设为只读,并在 30 天后移动到对象存储层
- 从对象存储层拍摄快照,并在 60 天后移动到删除层。
- 从删除层删除索引。
以下策略将在 14 天后将数据从热层滚动到温层。基本上,任何新创建的索引都将首先进入热层。一旦它被滚动并创建了一个新索引,旧索引就会移动到温层。
{
"name": "hot",
"actions": [
{
"rollover": {
"min_index_age": "14d"
}
}
],
"transitions": [
{
"state_name": "warm"
}
]
},
我们使温层成为只读层,因此不会发生其他写入操作。稍后,在 30 天后,它将被移动到objectstorage
层,MinIO 将在此层发挥作用。
{
"name": "warm",
"actions": [
{
"read_only": {}
}
],
"transitions": [
{
"state_name": "objectstorage",
"conditions": {
"min_index_age": "30d"
}
}
]
},
快照实际上是在objectstorage
层中拍摄的。我首先提到了我之前配置的 OpenSearch MinIO 存储库。拍摄快照后,索引将在 60 天后从对象存储层移动到删除层。
{
"name": "objectstorage",
"actions": [
{
"snapshot": {
"repository": "object-storage-repository",
"snapshot": ""
}
}
],
"transitions": [
{
"state_name": "delete",
"conditions": {
"min_index_age": "60d"
}
}
]
},
最后,一旦它移动到删除层,索引将被删除,以便为将来的索引腾出空间。
{
"name": "delete",
"actions": [
{
"delete": {}
}
]
}
],
理想情况下,我将在会议上演示所有这些内容,但我很快就放弃了,因为会议的 Wi-Fi 连接非常……非常……慢。我尝试进行现场演示,但没有结果。这提醒任何在会议上做演示的人,永远不要期望任何会议 Wi-Fi 能提供演示级别的性能。在进行现场演示之前,始终在高峰时段测试 Wi-Fi,并准备备份,例如录制好的演示或幻灯片本身的深入技术内容。

演讲、主题、展望未来…
在分析、可观察性和安全主题中有很多有趣的演讲,这些都是我在监控和指标方面最喜欢的主题。令我惊讶的是,关于如何实际操作 OpenSearch 集群及其组件的演讲并不多。大多数演讲都侧重于更高级别的主题,例如分析,这似乎是社区使用该应用程序的方式。关于我喜欢的基础设施主题的演讲,例如如何在生产环境中维护 OpenSearch 基础设施,如何在生产环境中设置它或何时以及如何备份,很少见。我的演讲就是其中之一,如果这些主题对您有吸引力,它是为数不多的讨论如何操作和维护 OpenSearch 的演讲之一,同时满足 DR、SOC 和 PCI/DSS 合规性要求,并描述了一种长期分层数据的方法。您可以在这里查看演讲和主题的完整列表。
如果您对 OpenSearch 以及如何配置它有任何疑问,请务必在Slack上与我们联系!