![在Kubernetes集群上部署和管理JFrog Artifactory](https://static001.infoq.cn/resource/image/94/a7/94169792dfb9db1fad0d8941ab4faea7.png)
介绍
Elasticsearch 是一个基于 Apache Lucene 并由 Elastic 开发的开源搜索引擎。它可扩展性、弹性和性能等特性都十分优越,全球各地的公司,包括 Mozilla、Facebook、Github、Netflix、eBay、纽约时报等,每天都在使用它。Elasticsearch 是大型数据集最受欢迎的分析平台之一,所有你能看到包含搜索引擎的地方都几乎有 Elasticsearch 的存在。它在操作数据时使用基于文档的方法,并且在用户执行搜索时几乎可以实时解析它。它以 JSON 格式存储数据,并按索引和类型组织数据。
如果我们在传统关系数据库的组件和 Elasticsearch 的组件之间进行类比,它们看起来像这样:
数据库或表 → 索引
行/列 → 包含属性的文档
Elasticsearch 的优势
它源自 Apache Lucene,提供了极其强大的全文搜索功能。
它使用基于文档的体系结构,将复杂的现实世界实体存储为结构化 JSON 文档。默认情况下,它会索引所有字段,这在搜索时提供了巨大的性能。
它不使用带有索引的模式。文档通过包含它们来添加新字段,从而可以自由添加、删除或更改相关字段,而无需与传统数据库模式升级相关的停机时间。
它对文档执行语言搜索,返回与搜索条件匹配的文档。它使用 TFIDF 算法对结果进行评分,使更多相关文档在结果列表中更高。
它允许模糊搜索,即使拼写错误的搜索词也可以帮助查找结果。
它支持实时搜索自动完成,在用户键入搜索查询时返回结果。
它使用 RESTful API,通过简单、轻量级的界面展示其功能。
Elasticsearch 以极快的速度执行复杂查询。它还缓存查询,返回与缓存过滤器匹配的其他请求的缓存结果。
它可以水平扩展,从而可以扩展资源并平衡集群节点之间的负载。
它将索引分解为碎片,每个碎片具有任意数量的副本。每个节点都知道集群中每个文档的位置,并在必要时在内部路由请求以检索数据。
术语
Elasticsearch 使用特定术语来定义其组件。
集群:一起工作的节点集合。
节点:作为集群一部分的单个服务器,存储数据,并参与集群的索引和搜索功能。
索引:具有类似特征的文档集合。
文档:可以编制索引的基本信息单元。
Shard(分片):索引分为多个部分,称为分片,允许索引水平缩放。
副本:索引分片的副本
前期准备
要完成此次 demo,我们至少需要以下之一:
已配置好的 Rancher 部署和 Kubernetes 集群,或
两个节点,在其中部署 Rancher 和 Kubernetes,或
用于部署 Rancher 的节点和在托管提供程序(如 GKE)中运行的 Kubernetes 集群。
本文使用 Google Cloud Platform,但您也可以使用任何其他提供商或基础架构。
启动 Rancher
如果您还没有部署 Rancher,请先启动一个,具体步骤可以参考此处快速上手指南:
https://rancher.com/quick-start/
启动集群
根据这一指南,使用 Rancher 设置和配置最适合您的环境的集群:
https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/
部署 Elasticsearch
如果您已经习惯了 kubectl,可以直接使用 manifest。如果您更喜欢使用 Rancher 用户界面,请继续往下阅读。
我们将 Elasticsearch 部署为具有两个服务的 StatefulSet:一个是用于与 pod 通信的 headless service,另一个则用于从 Kubernetes 集群外部与 Elasticsearch 交互。
svc-cluster.yaml
![](https://static001.infoq.cn/resource/image/8e/a0/8ec10d452eaa65283bfcf7d7049c54a0.png)
svc-loadbalancer.yaml
![](https://static001.infoq.cn/resource/image/fd/6a/fd3a78bbec18fc029fc7a8037bdaef6a.png)
es-sts-deployment.yaml
通过 Rancher UI 部署 Elasticsearch
如果您想的话,可以通过 Rancher UI 将上述每个 manifest 都导入您的集群。下面的屏幕截图显示了每个过程。
导入 svc-cluster.yaml
![](https://static001.infoq.cn/resource/image/16/66/16f0bcf4948c5dd3b8f20492e340cb66.png)
![](https://static001.infoq.cn/resource/image/48/25/481396beae4db85135bfa07f87ad5d25.png)
![](https://static001.infoq.cn/resource/image/ef/cf/ef1ca5149a3a5b04c88e5586374c54cf.png)
![](https://static001.infoq.cn/resource/image/16/96/16c5d7020f1cfd06b743d5130dfe1896.png)
导入 svc-loadbalancer.yaml
![](https://static001.infoq.cn/resource/image/7b/ff/7b280257386393dd500508a3c02c2cff.png)
![](https://static001.infoq.cn/resource/image/60/5f/60a283065753cf0801e03041c575ff5f.png)
导入 es-sts-deployment.yaml
![](https://static001.infoq.cn/resource/image/a9/73/a9479e39dc9164e8603bdf5c192eb473.png)
![](https://static001.infoq.cn/resource/image/1b/18/1b00d649c0243a7bee8c38684d5a5018.png)
![](https://static001.infoq.cn/resource/image/ab/9d/abc63d23655a219331d0d6fdb956769d.png)
![](https://static001.infoq.cn/resource/image/08/47/08a0c4dd8cfb9acc2632cd24073f5f47.png)
检索负载均衡器 IP
您后期会需要我们所部署的负载均衡器的地址的。您可以通过 kubectl 或 UI 检索此内容。
使用 CLI
使用 UI
![](https://static001.infoq.cn/resource/image/7e/9b/7ed1cb3bbada9883ac5c688a8cdd7e9b.png)
测试集群
使用我们在上一步中检索的地址来查询集群以获取基本信息。
![](https://static001.infoq.cn/resource/image/9a/fc/9a5862edf9598a6a5b0396fb68c780fc.png)
查询集群以获取有关其节点的信息。master 列中的星号突出显示当前主节点。
![](https://static001.infoq.cn/resource/image/b0/34/b0f08bbea508c070b7485e2424708a34.png)
检查可用的指数:
![](https://static001.infoq.cn/resource/image/02/89/02cfbe9a7452a2c469033384c696d989.png)
因为这是一个全新的安装,所以它没有任何以前的索引或数据。为了继续本教程,我们将注入一些我们稍后可以使用的示例数据。我们将使用的文件可从 Elastic 网站获得:
https://www.elastic.co/guide/en/kibana/current/tutorial-load-dataset.html
下载它们,然后使用以下命令加载它们:
![](https://static001.infoq.cn/resource/image/d2/d8/d2fe94906f86f4aacd605448dd944bd8.png)
当我们重新检查索引时,我们将看到我们有五个新的索引数据。
其中每个都包含不同类型的文档。对于 shakespeare 索引,我们可以搜索游戏的名称。对于 logstash-2015.05.19 索引,我们可以根据 IP 地址查询和过滤数据,对于 bank 索引,我们可以搜索有关特定帐户的信息。
![](https://static001.infoq.cn/resource/image/bf/80/bfdfc57d98b3dcb0081bb9bf90e95880.png)
![](https://static001.infoq.cn/resource/image/17/05/17c4009851ca3a33911321a3357fb805.png)
![](https://static001.infoq.cn/resource/image/77/48/773f1223195c33f8ef423e11a0490248.png)
结论
Elasticsearch 非常强大。它既简单又复杂——易于部署和使用,而与数据交互的方式也很复杂。
本文向您展示了如何使用 Rancher 和 Kubernetes 部署它以及如何通过 RESTful API 进行查询的基础知识。
如果您希望探索在日常情况下使用 Elasticsearch 的方法,我们建议您探索 ELK 堆栈的其他部分:Kibana、Logstash 和 Beats。这些工具完善了 Elasticsearch 部署,使其可用于存储、检索和可视化来自系统和应用程序的各种数据。
评论