如何在Rancher上运行Elasticsearch

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

Elasticsearch是当前最流行的大数据集分析平台之一,对于日志聚合、商业智能以及机器学习等各类用例而言,Elasticsearch都是一个很有用的工具。Elasticsearch基于 REST的简单的API,使得创建索引、添加数据和进行复杂的查询变得非常简单,这也是它大受欢迎的一大原因。但是,在你开始构建数据集和运行查询之前,您需要设置一个Elasticsearch集群,这可能会有点难。现在我们来看看Rancher Catalog是如何让配置一个可扩展、高可用的Elasticsearch集群变容易的。


假设你已经有一个运行中的Rancher集群,那么让Elasticsearch在你的集群上运行起来非常简单 。只要通过顶部菜单打开 Catalog,然后搜索Elasticsearch。Elasticsearch条目有两个版本,我们假设你使用的是2.x,这是最新的稳定版本。要从集群启动stack,请选择查看详细信息(View Detail),然后在后续屏幕中选择stack名称( Stack Name),集群名称(Cluster Name),然后选择启动。


wKioL1kVKbyyTcijAADsXsky-ow662.jpg


这个stack会启动以下服务:kopf、client(s)、datanode(s) 和master(s)。kopf容器提供了web界面,用来管理你的elasticsearch 集群。Datanodes储存实际的索引。主节点运行集群管理任务,客户端节点发起和协调你的搜索和其他操作。开始时,你的Elasticsearch集群各种类型的容器都只有一个(master、client、datanodes有两个辅助容器)。但是,您可以根据查询负载和索引的大小扩展每个组件。请注意,你需要不同的物理主机才能使每个datanode容器正常工作。因此,您可能需要注册更多Rancher计算节点。


wKiom1kVKc3zOl1SAADCKwe-kNk466.jpg


当所有容器都处于active状态时,您就可以到运行着kopf容器的主机中,启动kopf界面。点击 nodes选项卡,就会看到我之前提过的各种组件。如你所见,为了为我的索引提供冗余存储,我启动了第二个数据节点。我们将很快看到,当创建索引时,我们可以控制数据片的数量和每个片的备份。这样不仅可以提供冗余,还可以提升查询处理的速度。


wKioL1kVKd3RYczFAAE-ZESumDc436.jpg


在kopf的顶部的菜单中,选择更多(more),然后选择创建索引(create index)。在之后的页面中,你会被要求输入索引名称(Index Name),分片数(Number of Shards)和副本数(Number of replicas)。默认值为5个分片和1个副本。为索引设置的分片数和副本数高度依赖于数据集和查询模型。shard数有助于将数据扩展到多个节点,并且并行处理查询。如果你只有一个datanote,多分片可能看不到很多好处。此外,如果你期望数据快速增长,你可能需要更多分片,以便于你稍后添加节点并将数据移动到这些分片上。另外要注意的一点是,Elasticsearch建议最大的堆大小为32GB,所以最大的分片大小应该约为该大小,以便它可以尽可能地保存在内存中。


另一方面,副本与数据大小不太相关,它与冗余和性能的关系更紧密。所有对索引的查询都需要查看每个分片的一个副本,如果一个分片有多个副本,当一个节点不可用时,数据也依然可用。此外,使用多个副本,对指定分片的查询负载会分散在多个节点间。多个副本只有在集群中具有多个数据容器或节点时才有意义,而且在扩展越来越大的集群时会变得更加重要。


举例来说,我们来定义一个叫movies的索引,给它设置2个分片和2个副本。现在从顶部菜单中选择Rest选项卡,以便我们向索引中添加一些文档并测试一些查询。Elasticsearch是无模式的,所以我们可以向索引中添加任意形式的数据,只要它是合法的JSON格式就行。将path字段更新为 /movies/movie/1。path的格式为 /INDEX_NAME/TYPE/ID,movies是我们刚刚创建的索引,movie是我们给即将提交的文档类型的名称,id是这个索引中文档的唯一ID。ID是可选的,如果你在path中省略了,那么你的文档会被创建一个随机的ID。添加了path之后,选择POST方法,在底部的文本字段中输入你的JSON文档,点击发送。这样将把这个文档添加到索引中,并且向你发送一个确认消息。


wKioL1kVKgCAnVoeAAB3-GbOA10298.jpg


在添加了几个movie到索引中之后,我们就可以用同样的界面从索引中搜索和聚合数据了。将path字段更新为 /movies/movie/_search。path的格式为 /INDEX_NAME/TYPE/_search,INDEX_NAME,TYPE都是可选的。如果省略type,则会搜索所有类型,如果省略索引名,则会搜索所有索引。


Elasticsearch支持多种不同类型的查询,我们在这里只介绍几种常见的类型。第一种类型是自由文本查询,查询字符串参数允许使用Elasticsearch Query DS进行相当复杂的查询。当然我可只输入简单的字符串进行匹配,这将匹配文档任何字段中指定的词。

1
2
3
4
5
6
7
{
    "query" : {
        "query_string" : {
            "query" "Apocalypse"
        }
    }
}

例如,上面的查询会返回下面的结果。结果中包含处理查询花费的时间、搜索的分片数、结果总数以及每个结果的详细信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
   "took" 139 ,
   "timed_out" false ,
   "_shards" : {
     "total" 2 ,
     "successful" 2 ,
     "failed" 0
  },
  "hits" : {
    "total" 2 ,
    "max_score" 0.5291085 ,
     "hits" : [{
      "_index" "movies" ,
       "_type" "movie" ,
      "_id" "AVSvEC1fG_1bjVtG66mm" ,
      "_score" 0.5291085 ,
      "_source" : {
         "title" "Apocalypse Now" ,
        "director" "Francis Ford Coppola" ,
        "year" 1979 ,
        "genres" : [
          "Drama" ,
          "War"
        ]
      }
    }
....

除了查询文本之外,你还可以指定一个字段或一些字段的估计值,从而将查询限制为搜索文档的一个子集。比如,下面的查询会返回与之前一样的结果,但是必须查看文档的一个子集,且更大的数据集会有更好的性能。这里还有很多其他操作。

1
2
3
4
5
6
7
8
{
  "query" : {
    "query_string" : {
      "query" "Apocalypse"
      "fields" : [ "title" ]
    }
  }
}

我们可以把查询字符串包裹在filtered对象中,这样会对查询的结果进行过滤。这允许我们对初始数据集保持任意格式的查询,但随后过滤出我们查找的特定数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "query" : {
    "filtered" : {
      "query_string" : {
        "query" "Apocalypse"
        "fields" : [ "title" ]
      }
      "filter" : {
        "term" : {  "year" 1979  }
      }
    }
  }
}

最后,聚合可能是你会运行的另外一种形式的查询,它对于计算有关数据的统计信息很有用。下面展示了这些类型的聚合的两个例子。第一个将返回每个导演指挥的电影的数量,第二个将返回我们的数据集中所有电影的平均评分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "aggs" : {
    "group_by_director" : {
      "terms" : {
        "field" "director"
      }
    }
  }
}
{
  "aggs"  : {
    "avg_rating"  : {  "avg"  : {  "field"  "rating"  } }
  }
}

Elasticsearch是在大型非结构化数据集上运行分析的最佳方法之一,在从日志聚合、机器学习到商业智能等许多领域中皆被广泛使用。本文中,我们看到了使用Catalog在Rancher上设置一个功能齐全的Elasticsearch集群是多么简单。此外,我们还快速了解了Elasticsearch使用REST API的强大功能。只要你有Elasticsearch可用并且运行了起来,你就可以使用它作为许多不同的用例与许多可用的可视化和聚合框架的主机,比如实时可视化的Kibana或业务分析的Pentaho框架。


本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1924924

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
43 4
|
2月前
|
SQL 分布式计算 大数据
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
56 2
|
7月前
Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
【4月更文挑战第12天】Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
59 3
|
6月前
|
Docker 容器
docker 运行 elasticsearch + kibana + head 集群
docker 运行 elasticsearch + kibana + head 集群
|
7月前
|
自然语言处理 Java 关系型数据库
Elasticsearch【环境搭建 01】elasticsearch-6.4.3 单机版不能以root用户运行es 及 max_map_count 问题解决(含 安装包+分词插件 云盘资源)
Elasticsearch【环境搭建 01】elasticsearch-6.4.3 单机版不能以root用户运行es 及 max_map_count 问题解决(含 安装包+分词插件 云盘资源)
59 0
|
运维 安全 Java
Elasticsearch生产集群部署之各个节点以daemon模式运行以及优雅关闭
Elasticsearch生产集群部署之各个节点以daemon模式运行以及优雅关闭
|
Java iOS开发 MacOS
MacOS安装、运行ElasticSearch
MacOS安装、运行ElasticSearch
612 0
|
Java
白话Elasticsearch71-ES生产集群部署之各个节点以daemon模式运行以及优雅关闭
白话Elasticsearch71-ES生产集群部署之各个节点以daemon模式运行以及优雅关闭
117 0
|
监控 安全 数据安全/隐私保护
《Elastic(中国)基础开发宝典》——集群安全配置功能大升级,单机模拟运行 Elasticsearch 8.1.2 三节点集群
《Elastic(中国)基础开发宝典》——集群安全配置功能大升级,单机模拟运行 Elasticsearch 8.1.2 三节点集群
|
Docker 容器
使用Docker运行Elasticsearch + Kibana + elasticsearch-head
使用Docker运行Elasticsearch + Kibana + elasticsearch-head
159 0
下一篇
无影云桌面