话题 (elasicsearch) 已与当前话题合并
elasticsearch

elasticsearch

ES迁移分片时,对于正在更新分片是如何迁移的?

Elasticsearchrockybean 回复了问题 • 3 人关注 • 2 个回复 • 68 次浏览 • 1 天前 • 来自相关话题

elasticsearch有没有类似sql的连表查?

回复

Elasticsearchwincheck 发起了问题 • 1 人关注 • 0 个回复 • 79 次浏览 • 1 天前 • 来自相关话题

profile的内容如何分析?

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 55 次浏览 • 2 天前 • 来自相关话题

elasticsearch之get与search的区别

Elasticsearchrochy 回复了问题 • 2 人关注 • 1 个回复 • 57 次浏览 • 2 天前 • 来自相关话题

如何提高搜索的并发数?

Elasticsearchluoningsun 回复了问题 • 4 人关注 • 1 个回复 • 103 次浏览 • 2 天前 • 来自相关话题

ES TransPortClient 多线程update 数据的时候 数据出现问题,但是没有报错

回复

ElasticsearchTommy Yang 发起了问题 • 1 人关注 • 0 个回复 • 56 次浏览 • 3 天前 • 来自相关话题

ES 官方文档说可以通过配置文件指定节点的类型。但是没有写怎么在配置文件中写啊?求指教

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 57 次浏览 • 3 天前 • 来自相关话题

ES 查询的id太多导致es报错

Elasticsearchsam_d 回复了问题 • 5 人关注 • 3 个回复 • 557 次浏览 • 3 天前 • 来自相关话题

ES有没有什么设置可以禁止向某些节点分配分片,已有的分片不迁移?

Elasticsearchyayg2008 回复了问题 • 2 人关注 • 1 个回复 • 53 次浏览 • 3 天前 • 来自相关话题

java multiMatchQuery 怎么提高某个字段的权重?

ElasticsearchGod_lockin 回复了问题 • 4 人关注 • 4 个回复 • 85 次浏览 • 3 天前 • 来自相关话题

高亮所有匹配到的term。

Elasticsearchjing784512 回复了问题 • 3 人关注 • 1 个回复 • 2170 次浏览 • 3 天前 • 来自相关话题

logstash如何修改elasticsearch子文档的数组数据

Logstashzqc0512 回复了问题 • 2 人关注 • 1 个回复 • 66 次浏览 • 3 天前 • 来自相关话题

我曲解Elasticsearch了吗?

Elasticsearchandy chen 发表了文章 • 4 个评论 • 102 次浏览 • 4 天前 • 来自相关话题

我曲解了Elasticsearch,我以为是每个节点可以存放不同的数据,哈哈哈😄。既然不是这样,引发了我另一个思考,说是Elasticsearch能处理TB以及PB的数据,这样的话,一台存放PB级数据的机器该是个多“可怕”的配置。每个节点的数据都一样,这是真正意义的分布式吗?我觉得按Elasticsearch的概念只是利用了节点的硬件资源。我真心希望我的理解是错的,这样我将欢欣鼓舞。
我曲解了Elasticsearch,我以为是每个节点可以存放不同的数据,哈哈哈😄。既然不是这样,引发了我另一个思考,说是Elasticsearch能处理TB以及PB的数据,这样的话,一台存放PB级数据的机器该是个多“可怕”的配置。每个节点的数据都一样,这是真正意义的分布式吗?我觉得按Elasticsearch的概念只是利用了节点的硬件资源。我真心希望我的理解是错的,这样我将欢欣鼓舞。

function_score最终得分,每个文档都会有1分

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 66 次浏览 • 4 天前 • 来自相关话题

es search timeout参数问题

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 75 次浏览 • 4 天前 • 来自相关话题

【线下活动】2018-06-30 南京Elastic Meetup日程安排

活动swordsmanli 发表了文章 • 22 个评论 • 3162 次浏览 • 2018-05-31 15:33 • 来自相关话题

活动地址: http://meetup.elasticsearch.cn/2018/nanjing.html

Elastic Meetup 南京

主办方

Elastic中文社区、趋势科技

meetup_logo.jpg

协办方

IT 大咖说、阿里云、开源中国

itdks.jpeg
aliyun.jpg
osc.jpg

时间地点

  • 活动时间:2018年6月30日 13:00 - 18:00 

  • 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站)

 

 报名地址

http://elasticsearch.mikecrm.com/fUqiv0T

qr.php_.png

   名额有限,速速报名!

直播地址

IMG_2154.JPG

 

主题

分享一:Elastic 探秘之遗落的珍珠

标签:elastic stack 讲师简介:

medcl.jpg
 

曾勇(Medcl) Elastic 中国首席布道师 Elasticsearch爱好者,2015年加入Elastic,Elastic 中文社区的发起人,Elastic在中国的首位员工。

主题简介: Elastic Stack 功能越来越丰富了,有很多功能可能你只听说过名字,有很多功能也许没有机会尝试过,其实你可能错过了很多宝贝,所以让我们来探究探究,本次分享主要介绍 Elastic Stack 技术栈里面,一些可能看起来不太起眼但却非常有意思的功能,定义为非干货,尽量轻拍,不过相信对于刚接触 Elastic 的同学来说,也会有所收获。  

分享二:基于ELK的大数据分析平台实践

标签:运维、DevOps 讲师简介:

tuhaibo.jpg
 

涂海波 南京云利来有限公司 曾在亚信联创电信事业部从事计费产品工作多年,2年前加入南京云利来。

主题简介: 主题围绕Elasticsearch在集群搭建和运维过程中的使用经验,分享工作期间主要遇到的问题和解决思路,希望能够帮助大家在elasticsearch使用过程中少走一些弯路  

分享三:ElasticLog with ES in CloudEdge

标签:Ops、AWS、Log

讲师简介:

bruce_zhao.jpg

  赵伟,趋势科技CloudEdge Team 负责大数据研发,个人技术兴趣广泛,擅长系统设计与服务调优,目前专注于大数据领域。 主题简介: 作为趋势科技下一代应用安全网关产品,CloudEdge的用户规模不断增长。面对每日数亿级数据,如何实现快速处理与查询?本次演讲,主要分享CloudEdge的大数据架构,介绍如何在AWS云上构建大数据系统,如何利用Elasticsearch实现热数据查询,以及在Elasticsearch方面的诸多实践经验  

分享四:华泰证券Elasticsearch应用实践

标签:金融IT、大数据、DevOps、日志

讲师简介:

WechatIMG148.jpeg

李文强,华泰证券数据平台架构师 负责Hadoop平台和Elasticsearch集群的管理、架构和部分项目管理,目前正积极研究基于k8s的人工智能平台落地方案。

主题简介: 经过几年的发展,Elasticsearch已经在华泰证券内部生根发芽,已经有不少业务都使用了Elasticsearch,其中一个非常重要的应用是日志搜索和分析系统,该系统统一收集和分析各个系统的日志,既提升运维效率,又提高运营质量。在这些实践中,我们也不断地对Elasticsearch进行调优,使其能够长期稳定运行,保障业务稳定。    

分享五:es在苏宁的实践

标签:实践,大数据,平台化

讲师简介:

韩君宝.png

  韩宝君,苏宁大数据平台  ES平台组负责人 2015年从事大数据研究工作,目前负责Elasticsearch的源码研究工作和定制化开发,对苏宁使用Elasticsearch的业务提供技术支持和解决方案。

主题简介: 本次分享大纲如下:

  1. 苏宁ES平台总体介绍,典型使用场景和规模;
  2. ES平台化之路-演进路线以及过程中我们的思考;
  3. 实战经验:遇到的问题及对应的解决方案;  

ES迁移分片时,对于正在更新分片是如何迁移的?

回复

Elasticsearchrockybean 回复了问题 • 3 人关注 • 2 个回复 • 68 次浏览 • 1 天前 • 来自相关话题

elasticsearch有没有类似sql的连表查?

回复

Elasticsearchwincheck 发起了问题 • 1 人关注 • 0 个回复 • 79 次浏览 • 1 天前 • 来自相关话题

profile的内容如何分析?

回复

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 55 次浏览 • 2 天前 • 来自相关话题

elasticsearch之get与search的区别

回复

Elasticsearchrochy 回复了问题 • 2 人关注 • 1 个回复 • 57 次浏览 • 2 天前 • 来自相关话题

如何提高搜索的并发数?

回复

Elasticsearchluoningsun 回复了问题 • 4 人关注 • 1 个回复 • 103 次浏览 • 2 天前 • 来自相关话题

ES TransPortClient 多线程update 数据的时候 数据出现问题,但是没有报错

回复

ElasticsearchTommy Yang 发起了问题 • 1 人关注 • 0 个回复 • 56 次浏览 • 3 天前 • 来自相关话题

ES 官方文档说可以通过配置文件指定节点的类型。但是没有写怎么在配置文件中写啊?求指教

回复

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 57 次浏览 • 3 天前 • 来自相关话题

ES 查询的id太多导致es报错

回复

Elasticsearchsam_d 回复了问题 • 5 人关注 • 3 个回复 • 557 次浏览 • 3 天前 • 来自相关话题

ES有没有什么设置可以禁止向某些节点分配分片,已有的分片不迁移?

回复

Elasticsearchyayg2008 回复了问题 • 2 人关注 • 1 个回复 • 53 次浏览 • 3 天前 • 来自相关话题

java multiMatchQuery 怎么提高某个字段的权重?

回复

ElasticsearchGod_lockin 回复了问题 • 4 人关注 • 4 个回复 • 85 次浏览 • 3 天前 • 来自相关话题

高亮所有匹配到的term。

回复

Elasticsearchjing784512 回复了问题 • 3 人关注 • 1 个回复 • 2170 次浏览 • 3 天前 • 来自相关话题

logstash如何修改elasticsearch子文档的数组数据

回复

Logstashzqc0512 回复了问题 • 2 人关注 • 1 个回复 • 66 次浏览 • 3 天前 • 来自相关话题

function_score最终得分,每个文档都会有1分

回复

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 66 次浏览 • 4 天前 • 来自相关话题

es search timeout参数问题

回复

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 75 次浏览 • 4 天前 • 来自相关话题

如何通过索引UUID查询索引名称

回复

Elasticsearchkennywu76 回复了问题 • 1 人关注 • 1 个回复 • 101 次浏览 • 4 天前 • 来自相关话题

我曲解Elasticsearch了吗?

Elasticsearchandy chen 发表了文章 • 4 个评论 • 102 次浏览 • 4 天前 • 来自相关话题

我曲解了Elasticsearch,我以为是每个节点可以存放不同的数据,哈哈哈😄。既然不是这样,引发了我另一个思考,说是Elasticsearch能处理TB以及PB的数据,这样的话,一台存放PB级数据的机器该是个多“可怕”的配置。每个节点的数据都一样,这是真正意义的分布式吗?我觉得按Elasticsearch的概念只是利用了节点的硬件资源。我真心希望我的理解是错的,这样我将欢欣鼓舞。
我曲解了Elasticsearch,我以为是每个节点可以存放不同的数据,哈哈哈😄。既然不是这样,引发了我另一个思考,说是Elasticsearch能处理TB以及PB的数据,这样的话,一台存放PB级数据的机器该是个多“可怕”的配置。每个节点的数据都一样,这是真正意义的分布式吗?我觉得按Elasticsearch的概念只是利用了节点的硬件资源。我真心希望我的理解是错的,这样我将欢欣鼓舞。

如何解决ES的性能问题

Elasticsearchsterne vencel 发表了文章 • 0 个评论 • 277 次浏览 • 2018-07-10 21:56 • 来自相关话题

Part4:如何解决ES的性能问题 本文是对一篇外文博客的翻译 This post is the final part of a 4-part series on monitoring Elasticsearch performance. Part 1 provides an overview of Elasticsearch and its key performance metrics, Part 2 explains how to collect these metrics, and Part 3describes how to monitor Elasticsearch with Datadog. 这篇文章是监控ES性能系列文章的最后一部分。第1部分概述了ES及其关键性能指标,第2部分解释了如何收集这些指标,第3部分描述了如何使用Datadog监视ES。 Like a car, Elasticsearch was designed to allow its users to get up and running quickly, without having to understand all of its inner workings. However, it’s only a matter of time before you run into engine trouble here or there. This article will walk through five common Elasticsearch challenges, and how to deal with them. 就像汽车一样,用户可以在无需了解其所有内部工作原理的情况下,快速地站起来并运行。然而,在这里或那里遇到引擎故障只是时间问题。本文将介绍五种常见的ES的挑战,以及如何处理它们。 Problem #1: My cluster status is red or yellow. What should I do? 问题#1:我的集群状态是红色或黄色。我应该做什么?
21.png
If you recall from Part 1, cluster status is reported as red if one or more primary shards (and its replicas) is missing, and yellow if one or more replica shards is missing. Normally, this happens when a node drops off the cluster for whatever reason (hardware failure, long garbage collection time, etc.). Once the node recovers, its shards will remain in an initializing state before they transition back to active status. 回顾第1部分,如果丢失一个或多个主分片(及其副本),集群状态将报告为红色;如果丢失一个或多个副本分片,则报告为黄色。通常,这种情况发生在节点出于某些原因(硬件故障、长时间的垃圾收集时间等)退出集群时。一旦节点恢复,它的分片在转换会活跃状态之前将保持初始化状态。 The number of initializing shards typically peaks when a node rejoins the cluster, and then drops back down as the shards transition into an active state, as shown in the graph below. 初始化碎片的数量通常在节点重新加入集群时达到峰值,然后随着分片转换为活跃状态而下降,如下图所示。
22.png
During this initialization period, your cluster state may transition from green to yellow or red until the shards on the recovering node regain active status. In many cases, a brief status change to yellow or red may not require any action on your part. 在此初始化期间,集群状态可能从绿色转变为黄色或红色,直到恢复节点上的分片重新恢复到活跃状态。在很多情况下,一个简短的状态变化为黄色或红色可能不需要你的任何行动。
23.png
However, if you notice that your cluster status is lingering in red or yellow state for an extended period of time, verify that the cluster is recognizing the correct number of Elasticsearch nodes, either by consulting Datadog’s dashboard or by querying the Cluster Health API detailed in Part 2. 但是,如果您注意到您的集群状态在红色或黄色状态中徘徊了很长一段时间,请通过查阅Datadog的仪表板或查询第2部分中详细介绍的集群健康API来验证集群是否识别了正确的ES节点数量。
24.png
If the number of active nodes is lower than expected, it means that at least one of your nodes lost its connection and hasn’t been able to rejoin the cluster. To find out which node(s) left the cluster, check the logs (located by default in the logs folder of your Elasticsearch home directory) for a line similar to the following: 如果活动节点的数量低于预期,则意味着至少有一个节点失去了连接,无法重新加入集群。要找出离开集群的节点,请检查日志(默认位于您的Elasticsearch home目录的logs文件夹中),查找与以下内容类似的行::
[TIMESTAMP] ... Cluster health status changed from [GREEN] to [RED]
Reasons for node failure can vary, ranging from hardware or hypervisor failures, to out-of-memory errors. Check any of the monitoring tools outlined here for unusual changes in performance metrics that may have occurred around the same time the node failed, such as a sudden spike in the current rate of search or indexing requests. Once you have an idea of what may have happened, if it is a temporary failure, you can try to get the disconnected node(s) to recover and rejoin the cluster. If it is a permanent failure, and you are not able to recover the node, you can add new nodes and let Elasticsearch take care of recovering from any available replica shards; replica shards can be promoted to primary shards and redistributed on the new nodes you just added. 节点失败的原因可能不同,从硬件失败,管理程序失败到内存不足的错误。检查监视工具,这些工具可能是在节点失败的同时出现的性能指标的异常变化,比如当前搜索或索引请求的速度突然激增。一旦您知道可能发生了什么,如果是临时故障,您可以尝试让断开连接的节点恢复并重新加入集群。如果是永久性故障,您无法恢复节点,您可以添加新节点,并让Elasticsearch负责从任何可用的副本分片中恢复,副本分片可以提升到主分片,并在刚刚添加的新节点上重新分布。 However, if you lost both the primary and replica copy of a shard, you can try to recover as much of the missing data as possible by using Elasticsearch’s snapshot and restore module. If you’re not already familiar with this module, it can be used to store snapshots of indices over time in a remote repository for backup purposes. 但是,如果您同时丢失了分片的主分片和副本,那么您可以使用ES的快照和恢复模块尽可能多地恢复丢失的数据。如果您还不熟悉这个模块,那么可以使用它在远程存储库中存储索引的快照,以便进行备份。 Problem #2: Help! Data nodes are running out of disk space 问题#2:数据节点空间将要耗尽
25.png
If all of your data nodes are running low on disk space, you will need to add more data nodes to your cluster. You will also need to make sure that your indices have enough primary shards to be able to balance their data across all those nodes. 如果所有数据节点的磁盘空间都很低,那么将需要向集群添加更多的数据节点。你还需要确保您的索引拥有足够的主分片,以便能够跨所有这些节点能够平衡它的数据。 However, if only certain nodes are running out of disk space, this is usually a sign that you initialized an index with too few shards. If an index is composed of a few very large shards, it’s hard for Elasticsearch to distribute these shards across nodes in a balanced manner. 但是,如果只有特定的节点耗尽了磁盘空间,这通常是你用了太多的分片在初始化索引的时候。如果一个索引是由一些非常大的分片组成的,那么用ES很难以一种平衡的方式在节点之间分布这些分片。 Elasticsearch takes available disk space into account when allocating shards to nodes. By default, it will not assign shards to nodes that have over 85 percent disk in use. In Datadog, you can set up a threshold alert to notify you when any individual data node’s disk space usage approaches 80 percent, which should give you enough time to take action. 当master将分片分配给节点时,ES会考虑到节点可用的磁盘空间。默认情况下,它不会将分片分配给使用超过85%磁盘的节点。在Datadog中,您可以设置一个阈值警报,当任何单个数据节点的磁盘空间使用量接近80%时通知您,这应该会给您足够的时间采取行动。 There are two remedies for low disk space. One is to remove outdated data and store it off the cluster. This may not be a viable option for all users, but, if you’re storing time-based data, you can store a snapshot of older indices’ data off-cluster for backup, and update the index settings to turn off replication for those indices. 对于低磁盘空间有两种补救方法。一种是删除过时的数据并将其存储在集群之外。对于所有用户来说,这可能不是一个可行的选择,但是,如果您正在存储基于时间的数据,您可以将旧索引的数据快照存储到集群之外进行备份,并更新索引设置,以关闭对这些索引的复制。 The second approach is the only option for you if you need to continue storing all of your data on the cluster: scaling vertically or horizontally. If you choose to scale vertically, that means upgrading your hardware. However, to avoid having to upgrade again down the line, you should take advantage of the fact that Elasticsearch was designed to scale horizontally. To better accommodate future growth, you may be better off reindexing the data and specifying more primary shards in the newly created index (making sure that you have enough nodes to evenly distribute the shards). 如果需要继续将所有数据存储在集群上,那么第二种方法是惟一的选择:垂直或横向地伸缩集群。如果选择垂直伸缩,就意味着升级硬件。然而,为了避免再次升级,最好使用ES的横向伸缩。为了更好地适应未来的增长,你最好对数据进行索引重建,并在新创建的索引中指定更多的主碎片(确保您有足够的节点来均匀分布碎片)。 Another way to scale horizontally is to roll over the index by creating a new index, and using an alias to join the two indices together under one namespace. Though there is technically no limit to how much data you can store on a single shard, Elasticsearch recommends a soft upper limit of 50 GB per shard, which you can use as a general guideline that signals when it’s time to start a new index. 横向扩展的另一种方法是创建一个新索引,并使用别名滚动改变索引。虽然从技术上讲,您可以在一个分片上存储多少数据没有限制,但Elasticsearch建议在每个碎片上设置一个50 GB的软上限,您可以将其作为一个通用指南,在开始创建新索引时发出信号。 Problem #3: My searches are taking too long to execute 问题#3:我的搜索执行时间太长了 Search performance varies widely according to what type of data is being searched and how each query is structured. Depending on the way your data is organized, you may need to experiment with a few different methods before finding one that will help speed up search performance. We’ll cover two of them here: custom routing and force merging. 根据搜索的数据类型以及每个查询的结构,搜索性能会有很大的不同。根据您的数据的组织方式,您可能需要在找到一个有助于提高搜索性能的方法之前尝试一些不同的方法。我们将介绍其中的两个:自定义路由和强制合并。 Typically, when a node receives a search request, it needs to communicate that request to a copy (either primary or replica) of every shard in the index. Custom routing allows you to store related data on the same shard, so that you only have to search a single shard to satisfy a query. 通常,当一个节点收到一个搜索请求时,它需要将该请求传递给索引中的每个分片的副本(主分片和副本分片)。自定义路由允许你将相关数据存储在同一个shard上,这样您只需要搜索一个分片来满足查询。 For example, you can store all of blogger1’s data on the same shard by specifying a _routing value in the mapping for the blogger type within your index, blog_index. 例如,你可以在索引blog_index中为blogger类型指定一个_routing值,从而将blogger1的所有数据存储在相同的分片上。 First, make sure _routing is required so that you don’t forget to specify a custom routing value whenever you index information of the blogger type. 首先,确保需要_routing,以便在索引blogger类型的信息时不会忘记指定一个定制的路由值。
curl -XPUT "localhost:9200/blog_index" -d '
{
  "mappings": {
    "blogger": {
      "_routing": {
        "required": true 
      }
    }
  }
}'
当您准备索引与blogger1相关的文档时,请指定路由值:
curl -XPUT "localhost:9200/blog_index/blogger/1?routing=blogger1" -d '
{
  "comment": "blogger1 made this cool comment"
}'
Now, in order to search through blogger1’s comments, you will need to remember to specify the routing value in the query like this: 现在,为了搜索blogger1的评论,您需要记住在查询中指定如下的路由值:
curl -XGET "localhost:9200/blog_index/_search?routing=blogger1" -d '
{
  "query": {
    "match": {
      "comment": {
        "query": "cool comment"
      }
    }
  }
}'
In Elasticsearch, every search request has to check every segment of each shard it hits. So once you have reduced the number of shards you’ll have to search, you can also reduce the number of segments per shard by triggering the Force Merge API on one or more of your indices. The Force Merge API (or Optimize API in versions prior to 2.1.0) prompts the segments in the index to continue merging until each shard’s segment count is reduced to max_num_segments (1, by default). It’s worth experimenting with this feature, as long as you account for the computational cost of triggering a high number of merges. 在ES中,每个搜索请求都必须检查它所命中的每个分片的每一段。一旦你可以减少了搜索的分片数量,你也可以通过在一个或多个索引上触发Force Merge API来减少每个分片的段数量。强制合并API(或在2.1.0之前的版本中优化API)提示索引中的段合并,直到每个分片的段计数减少到max_num_segment(默认为1)。考虑一下这个成本和查询的时间成本,值得对该特性进行试验。 When it comes to shards with a large number of segments, the force merge process becomes much more computationally expensive. For instance, force merging an index of 10,000 segments down to 5,000 segments doesn’t take much time, but merging 10,000 segments all the way down to one segment can take hours. The more merging that must occur, the more resources you take away from fulfilling search requests, which may defeat the purpose of calling a force merge in the first place. In any case, it’s usually a good idea to schedule a force merge during non-peak hours, such as overnight, when you don’t expect many search or indexing requests. 当涉及到索引具有大量的段,段合并过程的计算开销就会大得多。例如,强制合并10000个段的索引到5000个段并不需要花费太多时间,但是将10000个段一直合并到一个段需要花费数小时。合并越多,搜索请求越快,这是调用force merge的目的。在任何情况下,通常最好在非高峰时间(比如在一夜之间)安排一个force merge,这样就不会有太多的搜索或索引请求。 Problem #4: How can I speed up my index-heavy workload? 问题#4:怎样才能加快我的索引沉重的工作量? Elasticsearch comes pre-configured with many settings that try to ensure that you retain enough resources for searching and indexing data. However, if your usage of Elasticsearch is heavily skewed towards writes, you may find that it makes sense to tweak certain settings to boost indexing performance, even if it means losing some search performance or data replication. Below, we will explore a number of methods to optimize your use case for indexing, rather than searching, data. ES具有许多预先配置的设置,这些设置试图确保您保留足够的资源用于搜索和索引数据。但是,如果您对ES的使用严重偏向于写操作,可能会发现调整某些设置以提高索引性能是有意义的,即使这意味着丢失一些搜索性能或数据副本。下面,我们将探索一些方法来优化索引而不是优化搜索性能。 Shard allocation: As a high-level strategy, if you are creating an index that you plan to update frequently, make sure you designate enough primary shards so that you can spread the indexing load evenly across all of your nodes. The general recommendation is to allocate one primary shard per node in your cluster, and possibly two or more primary shards per node, but only if you have a lot of CPU and disk bandwidth on those nodes. However, keep in mind that shard overallocation adds overhead and may negatively impact search, since search requests need to hit every shard in the index. On the other hand, if you assign fewer primary shards than the number of nodes, you may create hotspots, as the nodes that contain those shards will need to handle more indexing requests than nodes that don’t contain any of the index’s shards. 分片分配:作为一种高级策略,如果你正在创建频繁更新索引的集群,请确保指定了足够的主分片,这样你就可以将索引负载均匀地分布到所有节点上。一般的建议是为集群中的每个节点分配一个主分片,可能为每个节点分配两个或多个主分片,但前提是这些节点上有大量的CPU和磁盘带宽。但是,请记住,分片过度分配会增加开销,并可能对搜索产生负面影响,因为搜索请求需要命中索引中的每个分片。另一方面,如果你分配的主碎片数量少于节点数量,那么您可能会创建热点(热节点),因为包含这些分片的节点将需要处理更多的索引请求,而不包含索引分片的节点将不做什么操作。 Disable merge throttling: Merge throttling is Elasticsearch’s automatic tendency to throttle indexing requests when it detects that merging is falling behind indexing. It makes sense to update your cluster settings to disable merge throttling (by setting indices.store.throttle.type to “none”) if you want to optimize indexing performance, not search. You can make this change persistent (meaning it will persist after a cluster restart) or transient (resets back to default upon restart), based on your use case. 禁用合并节流:合并节流是ES在检测到合并落后于索引时自动抑制索引请求的趋势。更新集群设置以禁用合并节流是有意义的(设置index .store.throttle.type为none)。这样做可以优化索引性能,而不是搜索。根据你的用例,你可以使这个设置为persist(意味着在集群重新启动之后它将持续)或transient(在重新启动时重新设置为默认)。 Increase the size of the indexing buffer: This setting (indices.memory.index_buffer_size) determines how full the buffer can get before its documents are written to a segment on disk. The default setting limits this value to 10 percent of the total heap in order to reserve more of the heap for serving search requests, which doesn’t help you if you’re using Elasticsearch primarily for indexing. 增加索引缓冲区的大小:此设置(indices.memory.index_buffer_size)确定将文档写到磁盘上的段之前缓冲区的容量。默认设置限制为总堆的10%,以便为服务搜索请求保留更多的堆,如果您主要是在使用Elasticsearch进行索引,这对你是没有帮助。 Index first, replicate later: When you initialize an index, specify zero replica shards in the index settings, and add replicas after you’re done indexing. This will boost indexing performance, but it can be a bit risky if the node holding the only copy of the data crashes before you have a chance to replicate it. *先索引,后复制:初始化索引时,在索引设置中指定0个复制碎片,索引完成后添加副本。这将提高索引性能,但如果拥有数据惟一副本的节点在您有机会复制数据之前崩溃,则可能存在一些风险。 Refresh less frequently: Increase the refresh interval in the Index Settings API. By default, the index refresh process occurs every second, but during heavy indexing periods, reducing the refresh frequency can help alleviate some of the workload. 不经常刷新:增加索引设置API中的刷新间隔。默认情况下,索引refresh过程每秒钟发生一次,但是在索引不断更新的时期,减少刷新频率可以帮助减轻一些工作负载。 Tweak your translog settings: As of version 2.0, Elasticsearch will flush translog data to disk after every request, reducing the risk of data loss in the event of hardware failure. If you want to prioritize indexing performance over potential data loss, you can change index.translog.durability to async in the index settings. With this in place, the index will only commit writes to disk upon every sync_interval, rather than after each request, leaving more of its resources free to serve indexing requests. 调整您的translog设置:在2.0版本中,弹性搜索将在每次请求之后将translog数据刷新到磁盘,从而在硬件故障时降低数据丢失的风险。如果希望将索引性能优先于潜在的数据丢失,可以更改index.translog.durability为async。有了这一点,索引将在sync_interval上提交对磁盘的写操作,而不是在每个请求之后,从而使更多的资源可以用于索引请求。 For more suggestions on boosting indexing performance, check out this guide from Elastic. 有关提高索引性能的更多建议,请参阅《ES》。 Problem #5: What should I do about all these bulk thread pool rejections? 问题#5:对于所有这些大容量线程池拒绝,我应该怎么做?
26.png
Thread pool rejections are typically a sign that you are sending too many requests to your nodes, too quickly. If this is a temporary situation (for instance, you have to index an unusually large amount of data this week, and you anticipate that it will return to normal soon), you can try to slow down the rate of your requests. However, if you want your cluster to be able to sustain the current rate of requests, you will probably need to scale out your cluster by adding more data nodes. In order to utilize the processing power of the increased number of nodes, you should also make sure that your indices contain enough shards to be able to spread the load evenly across all of your nodes. 线程池的拒绝通常表明向节点发送了过多的请求或者请求速度太快。如果这是一个临时的情况(例如,本周必须索引超大量的数据,并且预期它将很快恢复正常),可以尝试降低请求的速度。但是,如果您希望集群能够维持当前的请求速率,您可能需要通过添加更多的数据节点来扩展集群。为了利用增加的节点数量的处理能力,还应该确保索引包含足够的分片,以便能够在所有节点上均匀地分配负载。 Go forth and optimize! 优化 Even more performance tips are available in Elasticsearch’s learning resources and documentation. Since results will vary depending on your particular use case and setup, you can test out different settings and indexing/querying strategies to determine which approaches work best for your clusters. 在ES的学习资源和文档中可以找到更多的性能技巧。由于结果将根据您的特定用例和设置而变化,您可以测试不同的设置和索引/查询策略,以确定哪种方法最适合您的集群。 As you experiment with these and other optimizations, make sure to watch your Elasticsearch dashboards closely to monitor the resulting impact on your clusters’ key Elasticsearch performance metrics. 当您尝试这些优化和其他优化时,请确保密切关注您的ES仪表盘,以监视由此对集群的关键ES性能指标的影响。 With a built-in Elasticsearch dashboard that highlights key cluster metrics, Datadog enables you to effectively monitor Elasticsearch in real-time. If you already have a Datadog account, you can set up the Elasticsearch integrationin minutes. If you don’t yet have a Datadog account, sign up for a free trialtoday. 有了一个内置的ES仪表盘,它突出关键的集群指标,Datadog使您能够实时监控弹性搜索。如果您已经有了一个Datadog帐户,那么您可以在几分钟内设置Elasticsearch集成。如果你还没有一个Datadog帐户,那么今天就注册一个免费试用。 Source Markdown for this post is available on GitHub. Questions, corrections, additions, etc.? Please let us know.

Elastic日报 第323期 (2018-07-05)

Elastic日报sterne vencel 发表了文章 • 0 个评论 • 90 次浏览 • 2018-07-05 09:34 • 来自相关话题

1.使用python操作ES http://t.cn/RBzKP6H 2.使用Beats模块将日志和指标导入ES http://t.cn/RdLtJJp 3.如何在生产环境中重启Elasticsearch集群 http://t.cn/RdL4oxk  活动预告 1. 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655  编辑:sterne vencel 归档:https://elasticsearch.cn/article/700 订阅:https://tinyletter.com/elastic-daily
1.使用python操作ES http://t.cn/RBzKP6H 2.使用Beats模块将日志和指标导入ES http://t.cn/RdLtJJp 3.如何在生产环境中重启Elasticsearch集群 http://t.cn/RdL4oxk  活动预告 1. 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655  编辑:sterne vencel 归档:https://elasticsearch.cn/article/700 订阅:https://tinyletter.com/elastic-daily

玩转 Elasticsearch 的 SQL 功能

Elasticsearchmedcl 发表了文章 • 8 个评论 • 1478 次浏览 • 2018-06-27 21:54 • 来自相关话题

最近发布的 Elasticsearch 6.3 包含了大家期待已久的 SQL 特性,今天给大家介绍一下具体的使用方法。

首先看看接口的支持情况

目前支持的 SQL 只能进行数据的查询只读操作,不能进行数据的修改,所以我们的数据插入还是要走之前的常规索引接口。

目前 Elasticsearch 的支持 SQL 命令只有以下几个:

命令 说明
DESC table 用来描述索引的字段属性
SHOW COLUMNS 功能同上,只是别名
SHOW FUNCTIONS 列出支持的函数列表,支持通配符过滤
SHOW TABLES 返回索引列表
SELECT .. FROM table_name WHERE .. GROUP BY .. HAVING .. ORDER BY .. LIMIT .. 用来执行查询的命令

我们分别来看一下各自怎么用,以及有什么效果吧,自己也可以动手试一下,看看。

首先,我们创建一条数据:

POST twitter/doc/
{
  "name":"medcl",
  "twitter":"sql is awesome",
  "date":"2018-07-27",
  "id":123
}

RESTful下调用SQL

在 ES 里面执行 SQL 语句,有三种方式,第一种是 RESTful 方式,第二种是 SQL-CLI 命令行工具,第三种是通过 JDBC 来连接 ES,执行的 SQL 语句其实都一样,我们先以 RESTful 方式来说明用法。

RESTful 的语法如下:

POST /_xpack/sql?format=txt
{
    "query": "SELECT * FROM twitter"
}

因为 SQL 特性是 xpack 的免费功能,所以是在 _xpack 这个路径下面,我们只需要把 SQL 语句传给 query 字段就行了,注意最后面不要加上 ; 结尾,注意是不要!

我们执行上面的语句,查询返回的结果如下:

          date          |      id       |     name      |    twitter    
------------------------+---------------+---------------+---------------
2018-07-27T00:00:00.000Z|123            |medcl          |sql is awesome 

ES 俨然已经变成 SQL 数据库了,我们再看看如何获取所有的索引列表:

POST /_xpack/sql?format=txt
{
    "query": "SHOW tables"
}

返回如下:

              name               |     type      
---------------------------------+---------------
.kibana                          |BASE TABLE     
.monitoring-alerts-6             |BASE TABLE     
.monitoring-es-6-2018.06.21      |BASE TABLE     
.monitoring-es-6-2018.06.26      |BASE TABLE     
.monitoring-es-6-2018.06.27      |BASE TABLE     
.monitoring-kibana-6-2018.06.21  |BASE TABLE     
.monitoring-kibana-6-2018.06.26  |BASE TABLE     
.monitoring-kibana-6-2018.06.27  |BASE TABLE     
.monitoring-logstash-6-2018.06.20|BASE TABLE     
.reporting-2018.06.24            |BASE TABLE     
.triggered_watches               |BASE TABLE     
.watcher-history-7-2018.06.20    |BASE TABLE     
.watcher-history-7-2018.06.21    |BASE TABLE     
.watcher-history-7-2018.06.26    |BASE TABLE     
.watcher-history-7-2018.06.27    |BASE TABLE     
.watches                         |BASE TABLE     
apache_elastic_example           |BASE TABLE     
forum-mysql                      |BASE TABLE     
twitter      

有点多,我们可以按名称过滤,如 twitt 开头的索引,注意通配符只支持 %_,分别表示多个和单个字符(什么,不记得了,回去翻数据库的书去!):

POST /_xpack/sql?format=txt
{
    "query": "SHOW TABLES 'twit%'"
}

POST /_xpack/sql?format=txt
{
    "query": "SHOW TABLES 'twitte_'"
}

上面返回的结果都是:

     name      |     type      
---------------+---------------
twitter        |BASE TABLE     

如果要查看该索引的字段和元数据,如下:

POST /_xpack/sql?format=txt
{
    "query": "DESC twitter"
}

返回:

    column     |     type      
---------------+---------------
date           |TIMESTAMP      
id             |BIGINT         
name           |VARCHAR        
name.keyword   |VARCHAR        
twitter        |VARCHAR        
twitter.keyword|VARCHAR        

都是动态生成的字段,包含了 .keyword 字段。 还能使用下面的命令来查看,主要是兼容 SQL 语法。

POST /_xpack/sql?format=txt
{
    "query": "SHOW COLUMNS IN twitter"
}

另外,如果不记得 ES 支持哪些函数,只需要执行下面的命令,即可得到完整列表:

SHOW FUNCTIONS

返回结果如下,也就是当前6.3版本支持的所有函数,如下:

      name      |     type      
----------------+---------------
AVG             |AGGREGATE      
COUNT           |AGGREGATE      
MAX             |AGGREGATE      
MIN             |AGGREGATE      
SUM             |AGGREGATE      
STDDEV_POP      |AGGREGATE      
VAR_POP         |AGGREGATE      
PERCENTILE      |AGGREGATE      
PERCENTILE_RANK |AGGREGATE      
SUM_OF_SQUARES  |AGGREGATE      
SKEWNESS        |AGGREGATE      
KURTOSIS        |AGGREGATE      
DAY_OF_MONTH    |SCALAR         
DAY             |SCALAR         
DOM             |SCALAR         
DAY_OF_WEEK     |SCALAR         
DOW             |SCALAR         
DAY_OF_YEAR     |SCALAR         
DOY             |SCALAR         
HOUR_OF_DAY     |SCALAR         
HOUR            |SCALAR         
MINUTE_OF_DAY   |SCALAR         
MINUTE_OF_HOUR  |SCALAR         
MINUTE          |SCALAR         
SECOND_OF_MINUTE|SCALAR         
SECOND          |SCALAR         
MONTH_OF_YEAR   |SCALAR         
MONTH           |SCALAR         
YEAR            |SCALAR         
WEEK_OF_YEAR    |SCALAR         
WEEK            |SCALAR         
ABS             |SCALAR         
ACOS            |SCALAR         
ASIN            |SCALAR         
ATAN            |SCALAR         
ATAN2           |SCALAR         
CBRT            |SCALAR         
CEIL            |SCALAR         
CEILING         |SCALAR         
COS             |SCALAR         
COSH            |SCALAR         
COT             |SCALAR         
DEGREES         |SCALAR         
E               |SCALAR         
EXP             |SCALAR         
EXPM1           |SCALAR         
FLOOR           |SCALAR         
LOG             |SCALAR         
LOG10           |SCALAR         
MOD             |SCALAR         
PI              |SCALAR         
POWER           |SCALAR         
RADIANS         |SCALAR         
RANDOM          |SCALAR         
RAND            |SCALAR         
ROUND           |SCALAR         
SIGN            |SCALAR         
SIGNUM          |SCALAR         
SIN             |SCALAR         
SINH            |SCALAR         
SQRT            |SCALAR         
TAN             |SCALAR         
SCORE           |SCORE          

同样支持通配符进行过滤:

POST /_xpack/sql?format=txt
{
    "query": "SHOW FUNCTIONS 'S__'"
}

结果:

     name      |     type      
---------------+---------------
SUM            |AGGREGATE      
SIN            |SCALAR         

那如果要进行模糊搜索呢,Elasticsearch 的搜索能力大家都知道,强!在 SQL 里面,可以用 match 关键字来写,如下:

POST /_xpack/sql?format=txt
{
    "query": "SELECT SCORE(), * FROM twitter WHERE match(twitter, 'sql is') ORDER BY id DESC"
}

最后,还能试试 SELECT 里面的一些其他操作,如过滤,别名,如下:

POST /_xpack/sql?format=txt
{
    "query": "SELECT SCORE() as score,name as myname FROM twitter as mytable where name = 'medcl' OR name ='elastic' limit 5"
}

结果如下:

     score     |    myname     
---------------+---------------
0.2876821      |medcl          

或是分组和函数计算:

POST /_xpack/sql?format=txt
{
    "query": "SELECT name,max(id) as max_id FROM twitter as mytable group by name limit 5"
}

结果如下:

     name      |    max_id     
---------------+---------------
medcl          |123.0          

SQL-CLI下的使用

上面的例子基本上把 SQL 的基本命令都介绍了一遍,很多情况下,用 RESTful 可能不是很方便,那么可以试试用 CLI 命令行工具来执行 SQL 语句,妥妥的 SQL 操作体验。

切换到命令行下,启动 cli 程序即可进入命令行交互提示界面,如下:

➜  elasticsearch-6.3.0 ./bin/elasticsearch-sql-cli

     .sssssss.`                     .sssssss.
  .:sXXXXXXXXXXo`                `ohXXXXXXXXXho.
 .yXXXXXXXXXXXXXXo`            `oXXXXXXXXXXXXXXX-
.XXXXXXXXXXXXXXXXXXo`        `oXXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXo.    .oXXXXXXXXXXXXXXXXXXXXh
.XXXXXXXXXXXXXXXXXXXXXXo``oXXXXXXXXXXXXXXXXXXXXXXy
`yXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
 `oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
   `oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
     `oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
       `oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
         `oXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
           .XXXXXXXXXXXXXXXXXXXXXXXXXo`
         .oXXXXXXXXXXXXXXXXXXXXXXXXo`
       `oXXXXXXXXXXXXXXXXXXXXXXXXo`   `odo`
     `oXXXXXXXXXXXXXXXXXXXXXXXXo`   `oXXXXXo`
   `oXXXXXXXXXXXXXXXXXXXXXXXXo`   `oXXXXXXXXXo`
 `oXXXXXXXXXXXXXXXXXXXXXXXXo`   `oXXXXXXXXXXXXXo`
`yXXXXXXXXXXXXXXXXXXXXXXXo`    oXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXXXo`   `oXXXXXXXXXXXXXXXXXXXy
.XXXXXXXXXXXXXXXXXXXXo`     /XXXXXXXXXXXXXXXXXXXXX
.XXXXXXXXXXXXXXXXXXo`        `oXXXXXXXXXXXXXXXXXX-
 -XXXXXXXXXXXXXXXo`            `oXXXXXXXXXXXXXXXo`
  .oXXXXXXXXXXXo`                `oXXXXXXXXXXXo.
    `.sshXXyso`        SQL         `.sshXhss.`

sql> 

当你看到一个硕大的创口贴,表示 SQL 命令行已经准备就绪了,查看一下索引列表,不,数据表的列表:

15301043943573.jpg

各种操作妥妥的,上面已经测试过的命令就不在这里重复了,只是体验不一样罢了。

如果要连接远程的 ES 服务器,只需要启动命令行工具的时候,指定服务器地址,如果有加密,指定 keystone 文件,完整的帮助如下:

➜  elasticsearch-6.3.0 ./bin/elasticsearch-sql-cli --help
Elasticsearch SQL CLI

Non-option arguments:
uri                  

Option                   Description                                           
------                   -----------                                           
-c, --check <Boolean>    Enable initial connection check on startup (default:  
                           true)                                               
-d, --debug              Enable debug logging                                  
-h, --help               show help                                             
-k, --keystore_location  Location of a keystore to use when setting up SSL. If 
                           specified then the CLI will prompt for a keystore   
                           password. If specified when the uri isn't https then
                           an error is thrown.                                 
-s, --silent             show minimal output                                   
-v, --verbose            show verbose output  

JDBC 对接

JDBC 对接的能力,让我们可以与各个 SQL 生态系统打通,利用众多现成的基于 SQL 之上的工具来使用 Elasticsearch,我们以一个工具来举例。

和其他数据库一样,要使用 JDBC,要下载该数据库的 JDBC 的驱动,我们打开: https://www.elastic.co/downloads/jdbc-client

15301048139518.jpg

只有一个 zip 包下载链接,下载即可。

然后,我们这里使用 DbVisualizer 来连接 ES 进行操作,这是一个数据库的操作和分析工具,DbVisualizer 下载地址是:https://www.dbvis.com/

下载安装启动之后的程序主界面如下图:

15301049453527.jpg

我们如果要使用 ES 作为数据源,我们第一件事需要把 ES 的 JDBC 驱动添加到 DbVisualizer 的已知驱动里面。我们打开 DbVisualizer 的菜单【Tools】-> 【Driver Manager】,打开如下设置窗口:

15301054144234.jpg

点击绿色的加号按钮,新增一个名为 Elasticsearch-SQL 的驱动,url format 设置成 jdbc:es:,如下图:

15301054340439.jpg

然后点击上图黄色的文件夹按钮,添加我们刚刚下载好且解压之后的所有 jar 文件,如下:

15301055143574.jpg

添加完成之后,如下图:

15301055446598.jpg

就可以关闭这个 JDBC 驱动的管理窗口了。下面我们来连接到 ES 数据库。

选择主程序左侧的新建连接图标,打开向导,如下:

15301057385898.jpg

选择刚刚加入的 Elasticsearch-SQL 驱动:

15301057824336.jpg

设置连接字符串,此处没有登录信息,如果有可以对应的填上:

15301064989466.jpg

点击 Connect,即可连接到 ES,左侧导航可以展开看到对应的 ES 索引信息:

15301065711818.jpg

同样可以查看相应的库表结果和具体的数据:

15301066251658.jpg

用他自带的工具执行 SQL 也是不在话下:

15301068015599.jpg

同理,各种 ETL 工具和基于 SQL 的 BI 和可视化分析工具都能把 Elasticsearch 当做 SQL 数据库来连接获取数据了。

最后一个小贴士,如果你的索引名称包含横线,如 logstash-201811,只需要做一个用双引号包含,对双引号进行转义即可,如下:

POST /_xpack/sql?format=txt
{
"query":"SELECT COUNT(*) FROM \"logstash-*\""
}

关于 SQL 操作的文档在这里:

https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-jdbc.html

Enjoy!

【线下活动】【袋鼠云技术团队】2018-06-30-杭州-Devops运维沙龙

活动moyu 发表了文章 • 1 个评论 • 111 次浏览 • 2018-06-25 16:32 • 来自相关话题

Devops运维沙龙.png
 活动简介: 互联网时代,创新、高效、速度是企业保持核心竞争力的必要条件。DevOps被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。本次活动邀请到阿里云Docker团队,ES团队、袋鼠云日志团队的同学从各个方面向大家介绍Devops的实践经验,帮助企业更敏捷、更自动化、更高效地实现持续交付。   主办方:袋鼠云 特别支持:养码场、高效运维社区、DBAPLUS、Elastic中文社区、阿里云、跨星、杭州创业大街 报名平台:活动行 直播支持:IT大咖说 活动时间:2018年6月30日13:00-17:00 活动地点:杭州市滨江区阡陌路459号聚光中心内 杭州创业大街C1-105室跨星空间   分享嘉宾:
赵汉青圆形.jpg
赵汉青 阿里巴巴集团搜索事业部 高级工程师 Elasticsearch运维实践分享 简介:2014年硕士毕业于中国科学技术大学 曾就职于思科系统(中国)研发有限公司云服务部,本次主题针对Elasticsearch集群运维:监控,诊断,优化,升级进行详细的介绍,并向大家分享阿里云Elasticsearch服务。
30943092626455172.jpg
南方   袋鼠云日志产品经理 企业日志中心建设思路   简介:企业日志中心建设是一个整体和复杂的过程,本次主题向大家分享袋鼠云日志产品在迭代过程踩过的坑,并通过什么样的方案去解决这些问题,同时向大家分享我们在天弘基金、新网银行中建设企业日志中心中的几个实践案例。
朱延生圆形.jpg
朱延生   阿里云Docker团队专家 ​Kubernetes日志实践 简介:从第一代PaaS平台cloudfoundry到现在的kubernetes容器编排平台,一直从事关于容器云平台研发及解决方案相关工作。容器时代越来越多的传统应用将会逐渐容器化,那么如何在应用容器化过程中方便快捷地自动发现和采集应用日志、如何与日志存储系统协同来高效存储和搜索应用日志将会是关键;本次分享主要介绍容器原生日志输出到容器日志的自动发现与采集,以及高性能容器日志采集部署架构及性能测试。
30363093978132308.png
直播报名
30963093980632463.jpeg
​线下报名 欢迎关注“袋鼠云技术团队”微信公众号,获取最新线下及线上活动信息。
qrcode_for_gh_cd7aa4cb729b_258.jpg
Devops运维沙龙.png

Elasticsearch snapshot 备份的使用方法

Elasticsearchrockybean 发表了文章 • 1 个评论 • 467 次浏览 • 2018-05-31 23:23 • 来自相关话题

常见的数据库都会提供备份的机制,以解决在数据库无法使用的情况下,可以开启新的实例,然后通过备份来恢复数据减少损失。虽然 Elasticsearch 有良好的容灾性,但由于以下原因,其依然需要备份机制。

  1. 数据灾备。在整个集群无法正常工作时,可以及时从备份中恢复数据。
  2. 归档数据。随着数据的积累,比如日志类的数据,集群的存储压力会越来越大,不管是内存还是磁盘都要承担数据增多带来的压力,此时我们往往会选择只保留最近一段时间的数据,比如1个月,而将1个月之前的数据删除。如果你不想删除这些数据,以备后续有查看的需求,那么你就可以将这些数据以备份的形式归档。
  3. 迁移数据。当你需要将数据从一个集群迁移到另一个集群时,也可以用备份的方式来实现。

Elasticsearch 做备份有两种方式,一是将数据导出成文本文件,比如通过 elasticdumpesm 等工具将存储在 Elasticsearch 中的数据导出到文件中。二是以备份 elasticsearch data 目录中文件的形式来做快照,也就是 Elasticsearch 中 snapshot 接口实现的功能。第一种方式相对简单,在数据量小的时候比较实用,当应对大数据量场景效率就大打折扣。我们今天就着重讲解下第二种备份的方式,即 snapshot api 的使用。

备份要解决备份到哪里、如何备份、何时备份和如何恢复的问题,那么我们接下来一个个解决。

1. 备份到哪里

在 Elasticsearch 中通过 repository 定义备份存储类型和位置,存储类型有共享文件系统、AWS 的 S3存储、HDFS、微软 Azure的存储、Google Cloud 的存储等,当然你也可以自己写代码实现国内阿里云的存储。我们这里以最简单的共享文件系统为例,你也可以在本地做实验。

首先,你要在 elasticsearch.yml 的配置文件中注明可以用作备份路径 path.repo ,如下所示:

path.repo: ["/mount/backups", "/mount/longterm_backups"]

配置好后,就可以使用 snapshot api 来创建一个 repository 了,如下我们创建一个名为 my_backup 的 repository。

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_backup"
  }
}

之后我们就可以在这个 repository 中来备份数据了。

2. 如何备份

有了 repostiroy 后,我们就可以做备份了,也叫快照,也就是记录当下数据的状态。如下所示我们创建一个名为 snapshot_1 的快照。

PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

wait_for_completion 为 true 是指该 api 在备份执行完毕后再返回结果,否则默认是异步执行的,我们这里为了立刻看到效果,所以设置了该参数,线上执行时不用设置该参数,让其在后台异步执行即可。

执行成功后会返回如下结果,用于说明备份的情况:

{
  "snapshots": [
    {
      "snapshot": "snapshot_1",
      "uuid": "52Lr4aFuQYGjMEv5ZFeFEg",
      "version_id": 6030099,
      "version": "6.3.0",
      "indices": [
        ".monitoring-kibana-6-2018.05.30",
        ".monitoring-es-6-2018.05.28",
        ".watcher-history-7-2018.05.30",
        ".monitoring-beats-6-2018.05.29",
        "metricbeat-6.2.4-2018.05.28",
        ".monitoring-alerts-6",
        "metricbeat-6.2.4-2018.05.30"
      ],
      "include_global_state": true,
      "state": "SUCCESS",
      "start_time": "2018-05-31T12:45:57.492Z",
      "start_time_in_millis": 1527770757492,
      "end_time": "2018-05-31T12:46:15.214Z",
      "end_time_in_millis": 1527770775214,
      "duration_in_millis": 17722,
      "failures": [],
      "shards": {
        "total": 28,
        "failed": 0,
        "successful": 28
      }
    }
  ]
}

返回结果的参数意义都是比较直观的,比如 indices 指明此次备份涉及到的索引名称,由于我们没有指定需要备份的索引,这里备份了所有索引;state 指明状态;duration_in_millis 指明备份任务执行时长等。

我们可以通过 GET _snapshot/my_backup/snapshot_1获取 snapshot_1 的执行状态。

此时如果去 /mount/backups/my_backup 查看,会发现里面多了很多文件,这些文件其实都是基于 elasticsearch data 目录中的文件生成的压缩存储的备份文件。大家可以通过 du -sh . 命令看一下该目录的大小,方便后续做对比。

3. 何时备份

通过上面的步骤我们成功创建了一个备份,但随着数据的新增,我们需要对新增的数据也做备份,那么我们如何做呢?方法很简单,只要再创建一个快照 snapshot_2 就可以了。

PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true

当执行完毕后,你会发现 /mount/backups/my_backup 体积变大了。这说明新数据备份进来了。要说明的一点是,当你在同一个 repository 中做多次 snapshot 时,elasticsearch 会检查要备份的数据 segment 文件是否有变化,如果没有变化则不处理,否则只会把发生变化的 segment file 备份下来。这其实就实现了增量备份。

elasticsearch 的资深用户应该了解 force merge 功能,即可以强行将一个索引的 segment file 合并成指定数目,这里要注意的是如果你主动调用 force merge api,那么 snapshot 功能的增量备份功能就失效了,因为 api 调用完毕后,数据目录中的所有 segment file 都发生变化了。

另一个就是备份时机的问题,虽然 snapshot 不会占用太多的 cpu、磁盘和网络资源,但还是建议大家尽量在闲时做备份。

4. 如何恢复

所谓“养兵千日,用兵一时”,我们该演练下备份的成果,将其恢复出来。通过调用如下 api 即可快速实现恢复功能。

POST /_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
{
  "indices": "index_1",
  "rename_replacement": "restored_index_1"
}

通过上面的 api,我们可以将 index_1 索引恢复到 restored_index_1 中。这个恢复过程完全是基于文件的,因此效率会比较高。

虽然我们这里演示的是在同一个集群做备份与恢复,你也可以在另一个集群上连接该 repository 做恢复。我们这里就不做说明了。

5. 其他

由于 Elasticsearch 版本更新比较快,因此大家在做备份与恢复的时候,要注意版本问题,同一个大版本之间的备份与恢复是没有问题的,比如都是 5.1 和 5.6 之间可以互相备份恢复。但你不能把一个高版本的备份在低版本恢复,比如将 6.x 的备份在 5.x 中恢复。而低版本备份在高版本恢复有一定要求:

1) 5.x 可以在 6.x 恢复

2) 2.x 可以在 5.x 恢复

3) 1.x 可以在 2.x 恢复

其他跨大版本的升级都是不可用的,比如1.x 的无法在 5.x 恢复。这里主要原因还是 Lucene 版本问题导致的,每一次 ES 的大版本升级都会伴随 Lucene 的大版本,而 Lucene 的版本是尽量保证向前兼容,即新版可以读旧版的文件,但版本跨越太多,无法实现兼容的情况也在所难免了。

6. 继续学习

本文只是简单对 snapshot 功能做了一个演示,希望这足够引起你的兴趣。如果你想进一步深入的了解该功能,比如备份的时候如何指定部分索引、如何查询备份和还原的进度、如何跨集群恢复数据、如何备份到 HDFS 等,可以详细阅读官方手册https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html,如果在使用的过程中遇到了问题,欢迎留言讨论。

【线下活动】2018-06-30 南京Elastic Meetup日程安排

活动swordsmanli 发表了文章 • 22 个评论 • 3162 次浏览 • 2018-05-31 15:33 • 来自相关话题

活动地址: http://meetup.elasticsearch.cn/2018/nanjing.html

Elastic Meetup 南京

主办方

Elastic中文社区、趋势科技

meetup_logo.jpg

协办方

IT 大咖说、阿里云、开源中国

itdks.jpeg
aliyun.jpg
osc.jpg

时间地点

  • 活动时间:2018年6月30日 13:00 - 18:00 

  • 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站)

 

 报名地址

http://elasticsearch.mikecrm.com/fUqiv0T

qr.php_.png

   名额有限,速速报名!

直播地址

IMG_2154.JPG

 

主题

分享一:Elastic 探秘之遗落的珍珠

标签:elastic stack 讲师简介:

medcl.jpg
 

曾勇(Medcl) Elastic 中国首席布道师 Elasticsearch爱好者,2015年加入Elastic,Elastic 中文社区的发起人,Elastic在中国的首位员工。

主题简介: Elastic Stack 功能越来越丰富了,有很多功能可能你只听说过名字,有很多功能也许没有机会尝试过,其实你可能错过了很多宝贝,所以让我们来探究探究,本次分享主要介绍 Elastic Stack 技术栈里面,一些可能看起来不太起眼但却非常有意思的功能,定义为非干货,尽量轻拍,不过相信对于刚接触 Elastic 的同学来说,也会有所收获。  

分享二:基于ELK的大数据分析平台实践

标签:运维、DevOps 讲师简介:

tuhaibo.jpg
 

涂海波 南京云利来有限公司 曾在亚信联创电信事业部从事计费产品工作多年,2年前加入南京云利来。

主题简介: 主题围绕Elasticsearch在集群搭建和运维过程中的使用经验,分享工作期间主要遇到的问题和解决思路,希望能够帮助大家在elasticsearch使用过程中少走一些弯路  

分享三:ElasticLog with ES in CloudEdge

标签:Ops、AWS、Log

讲师简介:

bruce_zhao.jpg

  赵伟,趋势科技CloudEdge Team 负责大数据研发,个人技术兴趣广泛,擅长系统设计与服务调优,目前专注于大数据领域。 主题简介: 作为趋势科技下一代应用安全网关产品,CloudEdge的用户规模不断增长。面对每日数亿级数据,如何实现快速处理与查询?本次演讲,主要分享CloudEdge的大数据架构,介绍如何在AWS云上构建大数据系统,如何利用Elasticsearch实现热数据查询,以及在Elasticsearch方面的诸多实践经验  

分享四:华泰证券Elasticsearch应用实践

标签:金融IT、大数据、DevOps、日志

讲师简介:

WechatIMG148.jpeg

李文强,华泰证券数据平台架构师 负责Hadoop平台和Elasticsearch集群的管理、架构和部分项目管理,目前正积极研究基于k8s的人工智能平台落地方案。

主题简介: 经过几年的发展,Elasticsearch已经在华泰证券内部生根发芽,已经有不少业务都使用了Elasticsearch,其中一个非常重要的应用是日志搜索和分析系统,该系统统一收集和分析各个系统的日志,既提升运维效率,又提高运营质量。在这些实践中,我们也不断地对Elasticsearch进行调优,使其能够长期稳定运行,保障业务稳定。    

分享五:es在苏宁的实践

标签:实践,大数据,平台化

讲师简介:

韩君宝.png

  韩宝君,苏宁大数据平台  ES平台组负责人 2015年从事大数据研究工作,目前负责Elasticsearch的源码研究工作和定制化开发,对苏宁使用Elasticsearch的业务提供技术支持和解决方案。

主题简介: 本次分享大纲如下:

  1. 苏宁ES平台总体介绍,典型使用场景和规模;
  2. ES平台化之路-演进路线以及过程中我们的思考;
  3. 实战经验:遇到的问题及对应的解决方案;  

logstash-filter-elasticsearch的简易安装

Logstashziyou 发表了文章 • 0 个评论 • 220 次浏览 • 2018-05-29 09:38 • 来自相关话题

不同版本的logstash集成的插件不一样,在5.6版本就未集成logstash-filter-elasticsearch插件,所以需要自己安装。 官方提供的方法因为需要联网,并且需要调整插件管理源,比较麻烦,针对logstash-filter-elasticsearch插件,使用下面这种方式安装。 logstash-filter-elasticsearch插件安装 1、在git上下载logstash-filter-elasticsearch压缩包,logstash-filter-elasticsearch.zip, 2、在logstash的目录下新建plugins目录,解压logstash-filter-elasticsearch.zip到此目录下。 3、在logstash目录下的Gemfile中添加一行:
gem "logstash-filter-elasticsearch", :path => "./plugins/logstash-filter-elasticsearch"
4、重启logstash即可。   此方法适用logstash-filter-elasticsearch,但不适用全部logstash插件。

转载一篇关于shard数量设计的文章,很赞

Elasticsearchlz8086 发表了文章 • 2 个评论 • 239 次浏览 • 2018-05-28 18:34 • 来自相关话题

How many shards should I have in my Elasticsearch cluster?   Elasticsearch is a very versatile platform, that supports a variety of use cases, and provides great flexibility around data organisation and replication strategies. This flexibility can however sometimes make it hard to determine up-front how to best organize your data into indices and shards, especially if you are new to the Elastic Stack. While suboptimal choices  will not necessarily cause problems when first starting out, they have the potential to cause performance problems as data volumes grow over time. The more data the cluster holds, the more difficult it also becomes to correct the problem, as reindexing of large amounts of data can sometimes be required. When we come across users that are experiencing performance problems, it is not uncommon that this can be traced back to issues around how data is indexed and number of shards in the cluster. This is especially true for use-cases involving multi-tenancy and/or use of time-based indices. When discussing this with users, either in person at events or meetings or via our forum, some of the most common questions are “How many shards should I have?” and “How large should my shards be?”. This blog post aims to help you answer these questions and provide practical guidelines for use cases that involve the use of time-based indices, e.g. logging or security analytics, in a single place. What is a shard? Before we start, we need to establish some facts and terminology that we will need in later sections. Data in Elasticsearch is organized into indices. Each index is made up of one or more shards. Each shard is an instance of a Lucene index, which you can think of as a self-contained search engine that indexes and handles queries for a subset of the data in an Elasticsearch cluster. As data is written to a shard, it is periodically published into new immutable Lucene segments on disk, and it is at this time it becomes available for querying. This is referred to as a refresh. How this works is described in greater detail in Elasticsearch: the Definitive Guide. As the number of segments grow, these are periodically consolidated into larger segments. This process is referred to as merging. As all segments are immutable, this means that the disk space used will typically fluctuate during indexing, as new, merged segments need to be created before the ones they replace can be deleted. Merging can be quite resource intensive, especially with respect to disk I/O. The shard is the unit at which Elasticsearch distributes data around the cluster. The speed at which Elasticsearch can move shards around when rebalancing data, e.g. following a failure, will depend on the size and number of shards as well as network and disk performance. TIP: Avoid having very large shards as this can negatively affect the cluster's ability to recover from failure. There is no fixed limit on how large shards can be, but a shard size of 50GB is often quoted as a limit that has been seen to work for a variety of use-cases. Index by retention period As segments are immutable, updating a document requires Elasticsearch to first find the existing document, then mark it as deleted and add the updated version. Deleting a document also requires the document to be found and marked as deleted. For this reason, deleted documents will continue to tie up disk space and some system resources until they are merged out, which can consume a lot of system resources. Elasticsearch allows complete indices to be deleted very efficiently directly from the file system, without explicitly having to delete all records individually. This is by far the most efficient way to delete data from Elasticsearch. TIP: Try to use time-based indices for managing data retention whenever possible. Group data into indices based on the retention period. Time-based indices also make it easy to vary the number of primary shards and replicas over time, as this can be changed for the next index to be generated. This simplifies adapting to changing data volumes and requirements. Are indices and shards not free? For each Elasticsearch index, information about mappings and state is stored in the cluster state. This is kept in memory for fast access. Having a large number of indices in a cluster can therefore result in a large cluster state, especially if mappings are large. This can become slow to update as all updates need to be done through a single thread in order to guarantee consistency before the changes are distributed across the cluster. TIP: In order to reduce the number of indices and avoid large and sprawling mappings, consider storing data with similar structure in the same index rather than splitting into separate indices based on where the data comes from. It is important to find a good balance between the number of indices and the mapping size for each individual index. Each shard has data that need to be kept in memory and use heap space. This includes data structures holding information at the shard level, but also at the segment level in order to define where data reside on disk. The size of these data structures is not fixed and will vary depending on the use-case. One important characteristic of the segment related overhead is however that it is not strictly proportional to the size of the segment. This means that larger segments have less overhead per data volume compared to smaller segments. The difference can be substantial. In order to be able to store as much data as possible per node, it becomes important to manage heap usage and reduce the amount of overhead as much as possible. The more heap space a node has, the more data and shards it can handle. Indices and shards are therefore not free from a cluster perspective, as there is some level of resource overhead for each index and shard. TIP: Small shards result in small segments, which increases overhead. Aim to keep the average shard size between a few GB and a few tens of GB. For use-cases with time-based data, it is common to see shards between 20GB and 40GB in size. TIP: As the overhead per shard depends on the segment count and size, forcing smaller segments to merge into larger ones through a forcemerge operation can reduce overhead and improve query performance. This should ideally be done once no more data is written to the index. Be aware that this is an expensive operation that should ideally be performed during off-peak hours. TIP: The number of shards you can hold on a node will be proportional to the amount of heap you have available, but there is no fixed limit enforced by Elasticsearch. A good rule-of-thumb is to ensure you keep the number of shards per node below 20 to 25 per GB heap it has configured. A node with a 30GB heap should therefore have a maximum of 600-750 shards, but the further below this limit you can keep it the better. This will generally help the cluster stay in good health. How does shard size affect performance? In Elasticsearch, each query is executed in a single thread per shard. Multiple shards can however be processed in parallel, as can multiple queries and aggregations against the same shard. This means that the minimum query latency, when no caching is involved, will depend on the data, the type of query, as well as the size of the shard. Querying lots of small shards will make the processing per shard faster, but as many more tasks need to be queued up and processed in sequence, it is not necessarily going to be faster than querying a smaller number of larger shards. Having lots of small shards can also reduce the query throughput if there are multiple concurrent queries. TIP: The best way to determine the maximum shard size from a query performance perspective is to benchmark using realistic data and queries. Always benchmark with a query and indexing load representative of what the node would need to handle in production, as optimizing for a single query might give misleading results. How do I manage shard size? When using time-based indices, each index has traditionally been associated with a fixed time period. Daily indices are very common, and often used for holding data with short retention period or large daily volumes. These allow retention period to be managed with good granularity and makes it easy to adjust for changing volumes on a daily basis. Data with a longer retention period, especially if the daily volumes do not warrant the use of daily indices, often use weekly or monthly induces in order to keep the shard size up. This reduces the number of indices and shards that need to be stored in the cluster over time. TIP: If using time-based indices covering a fixed period, adjust the period each index covers based on the retention period and expected data volumes in order to reach the target shard size. Time-based indices with a fixed time interval works well when data volumes are reasonably predictable and change slowly. If the indexing rate can vary quickly, it is very difficult to maintain a uniform target shard size. In order to be able to better handle this type of scenarios, the Rollover and Shrink APIs were introduced. These add a lot of flexibility to how indices and shards are managed, specifically for time-based indices. The rollover index API makes it possible to specify the number of documents and index should contain and/or the maximum period documents should be written to it. Once one of these criteria has been exceeded, Elasticsearch can trigger a new index to be created for writing without downtime. Instead of having each index cover a specific time-period, it is now possible to switch to a new index at a specific size, which makes it possible to more easily achieve an even shard size for all indices. In cases where data might be updated, there is no longer a distinct link between the timestamp of the event and the index it resides in when using this API, which may make updates significantly less efficient as each update my need to be preceded by a search. TIP: If you have time-based, immutable data where volumes can vary significantly over time, consider using the rollover index API to achieve an optimal target shard size by dynamically varying the time-period each index covers. This gives great flexibility and can help avoid having too large or too small shards when volumes are unpredictable. The shrink index API allows you to shrink an existing index into a new index with fewer primary shards. If an even spread of shards across nodes is desired during indexing, but this will result in too small shards, this API can be used to reduce the number of primary shards once the index is no longer indexed into. This will result in larger shards, better suited for longer term storage of data. TIP: If you need to have each index cover a specific time period but still want to be able to spread indexing out across a large number of nodes, consider using the shrink API to reduce the number of primary shards once the index is no longer indexed into. This API can also be used to reduce the number of shards in case you have initially configured too many shards. Conclusions This blog post has provided tips and practical guidelines around how to best manage data in Elasticsearch. If you are interested in learning more, "Elasticsearch: the definitive guide" contains a section about designing for scale, which is well worth reading even though it is a bit old. A lot of the decisions around how to best distribute your data across indices and shards will however depend on the use-case specifics, and it can sometimes be hard to determine how to best apply the advice available. For more in-depth and personal advice you can engage with us commercially through a subscription and let our Support and Consulting teams help accelerate your project. If you are happy to discuss your use-case in the open, you can also get help from our community and through our public forum.

[技术交流] Elasticsearch冉冉升起,几款开源数据引擎对比

Elasticsearchhw_cloudsearch 发表了文章 • 0 个评论 • 276 次浏览 • 2018-05-24 16:35 • 来自相关话题

2018年的数据引擎排名已经出啦,不知道各位小伙伴留意没~~~
排名.png
Elasticsearch强势进入前十,是一颗冉冉升起的新星。   一些小伙伴经常会碰到选取何种数据引擎的情况。在此,我们将把几个热门的开源数据引擎进行对比,供大家参考。
对比.png
从上表看出: MySQL:将数据保存在不同的表中,使用SQL语言进行交互,是目前非常流行的关系型数据库管理系统。如果您需要一个传统的数据库,那么MySQL是不错的选择。 MongoDB:基于分布式文件存储的NoSQL数据库,数据结构由键值对组成,具有可扩展性。如果您需要存储和查询非结构化信息,不太需要分析或全文检索,那么MongoDB是不错的选择。 Redis:高性能的键值对数据库,支持一定程度的事务性。主要应用为缓存,对读写有非常高性能要求的场景中,是不错的选择。但因为是靠全内存加速,所以数据量大的情况下,配置要求也很高。 Elasticsearch:基于Lucene的分布式搜索引擎,具有全文检索,同义词处理,相关度排名,复杂数据分析的能力。如果您想做文本类检索,及相关性排序,以及指标类分析,Elasticsearch会非常适合。它在文档全文检索(网站搜索,APP搜索)和日志分析(运营,运维)领域拥有得天独厚的优势。   此文抛砖引玉,欢迎小伙伴留言讨论不同数据引擎的适用场景~~ 另有想快速体验Elasticsearch欢迎戳下面链接~~~ 华为云搜索服务是云上的Elasticsearch,具有简单易用、无忧运维、弹性灵活、数据可靠等特点,欢迎使用~~~~  

干货 | Elasticsearch 布道者Medcl对话携程Wood大叔核心笔记

Elasticsearchlaoyang360 发表了文章 • 7 个评论 • 688 次浏览 • 2018-05-23 00:28 • 来自相关话题

Elastic Podcast 第二期来啦, 这一次我们来到了位于上海的携程旅行网,携程内部大量运用了 Elasticsearch来进行集中式的运维日志管理和为业务部门提供统一的搜索服务平台, 目前线上总共部署了多达 94 个 Elasticsearch 集群和超过 700 多个 Elasticsearch 节点,每天新增日志 1600 亿条,峰值达到 300 万每秒,存放在 Elasticsearch里面的索引文档达到 2.5 万亿,磁盘存储达到 PB 级。 想知道携程是如何应对这些海量数据下的挑战,以及最佳实践,让我们一起来收听这一期的 Podcast,跟随携程的两位技术负责人吴晓刚和胡航来一探究竟。

音频地址:http://m.ximalaya.com/111156131/sound/89571047

主持人:Elastic 技术布道师,曾勇(Medcl)。 嘉宾: 1、吴晓刚(Wood大叔),携程技术保障部系统研发总监, Elasticsearch 国内早期实践者,中文社区活跃用户。 曾在 eBay, Morgan Stanley, PPTV 等国内外公司从事系统软件研发、系统集成与技术支持工作。对于大规模 IT 系统的运维自动化、可视化、性能优化具有浓厚的兴趣。在技术方面一直抱有知其然知其所以然的态度。

2、胡航,携程旅行网高级技术经理,负责相关搜索实现、SOA服务的开发。曾供职于腾讯、盛大等公司,对新技术持有强烈的好奇心,目前关注于 Elasticsearch 的业务实现、JVM 性能优化等。

1、携程Elasticsearch使用历史

1.1 运维组Wood大叔:

2014年,ES0.9版本。 选型对比:MongoDB——数据量级大了以后,出现性能瓶颈。 调研后,选型:ELK(Elasticsearch、Logstash、Kibana)。 实现效果:实时看效果、查询、聚合。

1.2 胡航业务组:

业务场景:酒店价格。 选型依据:ES分布式、可调试性能好。 版本:ES2.3。 时间:2017年中,逐步转向ES,5.3版本。 效果:显著。专注于后端开发,业务交由业务团队自己去做。

2、携程Elasticsearch规模

2.1 运维组Wood大叔:

集群:94个。最小三个节点,最大:360+节点。 节点:700+。 每日增量:1600亿条。 峰值:300W/s。 总数据量:2.5万亿,PB数量级。 面对挑战: 1)实时写入。 2)业务流程相关,几个月-2年的历史数据。

2.2 胡航业务组:

业务场景:3集群,每集群6个节点。 单个索引:最大1000W-2000W。

关注:ES基础框架,帮业务部分实现写入、查询、DSL调优。 查询:3000-4000/s。

携程ES规模量全国数一数二,有很大挑战。

3、携程Elasticsearch淌过的坑

3.1 运维组Wood大叔:

3.1.1 痛点1:内存溢出。

原因:早期版本,对查询限制做的不充分;数据量上了规模,查询、聚合会非常耗内存。

升级版本后,ES做了很多处理,集群层面做了限制。越来越稳定。

3.1.2 痛点2:集群故障无法恢复。

3.1.3 痛点3:translog做不完。

3.1.4 痛点4:集群的平台化管理。

需要:研究底层工作机制,找到规避方法。 经验丰富后,运维效率提升。

3.2胡航业务组:

3.2.1 痛点1:ES基础不熟悉带来的问题;

3.2.2 痛点2:性能问题——最终排查是ES5.X keyword类型的原因。

4、架构

4.1运维组Wood大叔:

1、早期:ELK+redis(中间缓存)

挑战: 1)redis承受能力差。

2)redis单线程。

改善: 1)redis改为kafka(磁盘级别),数据畅通了。

2)Logstash内存消耗大。——改为:logstash forward,推荐官方Beats。

3)数据规模后,需要很多服务器,Logstash非常耗内存。

优化:用golang开发了一个gohangout (https://github.com/childe/gohangout ) ,

内存比java 版的hangout(https://github.com/childe/hangout) 内存大幅降低。

4.2 胡航搜索业务组:

1)单点集群压力瓶颈。

改为:业务数据导入ES,提供定制客户端。

2)搜索平台,接入更多业务需求。

不方便在kibana做定制开发,自己做了简单网站查询数据、监控,满足业务的贴切需求。

5、ES6.3最新特性(抢先看)

5.1 ES6.3 支持Sql接口

Wood大叔: kibana看DSL,拷贝后修改。新用户不熟悉,会不方便。

BI部分也需要,类似sql的查询。

优点:更简单,发挥更大的作用。

携程BI部门——应用场景:搜索的关键词、 统计热词,目的地等信息。

Kibana满足不了需求,就要写代码。如果有了sql,会非常快的开发。

胡航搜索业务组: 写DSL,还是稍微复杂。借助 NLPChina ElasticsearchSql插件实现。

实际应用发现插件还是有问题,期待ES官方推出Sql查询。

5.2 增加kibana丰富表现力

5.3 更快的索引速度

refresh优化:提升吞吐。

6、ELK Stack最喜欢的特性

Wood大叔: 丰富的扩展能力,用户不必关心底层的实现。通过服务器增加节点,方便大数据量查询。

胡航: ES可视化、可调试特性。 举例: 1)出现问题排查DSL是不是合适?Mapping是不是合适?

2)相信ES的社区,不必关心底层,更多的时间做业务(解放双手)。

3)ES中做好数据模型,实现业务需求。

7、ELK Stack最需要完善的

Wood大叔: 1)集群的保护待更进一步完善 数据丢失后的处理?

节点损毁后的处理?

目的:减轻运维的负担;

2)甄别坏查询,Slow log存在缺陷。 很难判定真正故障是哪个慢查询。

集群发下故障的时候,有API实时分析会更好(比单纯查slow log)。

胡航: 1)ES坑还很多,比较耗费时间。

2)期待社区对常见问题整理。

3)期待官方总结完善的向导,类似:Cookbook。

初级上手的话可以参考借鉴(大家缺乏经验)

8、初学者的建议

1)初学者必读——《Elasticsearch: 权威指南》(英文、中文) WOOD大叔至少看了3遍。

2)不断的实践。

3)带着问题,再去找文档,构建知识体系。

4)多参与社区,尝试理解和解决社区问题,不断学习,以提升自己。 互帮互助,共同成长!

5)中文社区的小建议:问题精华版收集——新手通读,学习前人经验。

9、如何看待Elasticsearch在国内的发展?

1)参与和贡献,国内做的不足;

2)中文分词插件等,如:分词质量要求高,专业语义搜索支持(提高搜索相关性等)、情感标注、NLP等。

3)在中文应用场景应用更加丰富。

4)社区问题比较分散,社区需要意见领袖,加强某领域讨论、深入交流等。

5)medcl:ElasticTips成立,大家都去参与,以图片形式分享。

6) 社区还会做更多的事情,大家多分享、互相交流。

10、小结

非常震惊,wood大叔看了3遍《Elasticsearch: 权威指南》,我们没有理由不努力。

共勉,加油!

_validate/query?explain解释

Elasticsearchhnj1575565068 发表了文章 • 0 个评论 • 174 次浏览 • 2018-04-24 10:33 • 来自相关话题

使用_validate/query?explain API得到的结果如下,Synonym是什么意思啊?同义词吗?求解释{   "valid": true,   "_shards": {     "total": 1,     "successful": 1,     "failed": 0   },   "explanations": [     {       "index": "country",       "valid": true,       "explanation": "name:z Synonym(name:g name:zg)"     }   ] }
使用_validate/query?explain API得到的结果如下,Synonym是什么意思啊?同义词吗?求解释{   "valid": true,   "_shards": {     "total": 1,     "successful": 1,     "failed": 0   },   "explanations": [     {       "index": "country",       "valid": true,       "explanation": "name:z Synonym(name:g name:zg)"     }   ] }

看到一个词语提取小工具,分享给有标签、词库需求的TX们

Elasticsearchtc 发表了文章 • 2 个评论 • 256 次浏览 • 2018-04-23 13:44 • 来自相关话题