es有9台机器,3台master,6台data节点,那么kibana配置文件中elasticsearch.url怎么写?
Kibana • Leeeo 回复了问题 • 5 人关注 • 2 个回复 • 1997 次浏览 • 2018-12-21 16:22
Day 21 - ECE 版本升级扫雷实战
Elasticsearch • Ben_Wu 发表了文章 • 1 个评论 • 3357 次浏览 • 2018-12-21 10:50
下面分享的这个案例是当我们在把集群从5.4.1 升级到5.6.12 的过程中,遇到节点关闭受阻,升级不完整等情景。以及对应的处理方法。
首先在ECE中,版本是通过stack的方式管理
Ref : https://www.elastic.co/guide/e ... .html
这些版本都是以docker images的形式存储
因此,ECE根据不同的版本,然后选择对应的docker image就可以创建一个节点了. 那么升级的过程就可以简单分成几个步骤
1.exclude准备升级的节点。
2.停止节点ES进程,更换container 版本。
3.重新启动节点,加入集群。
4.在其他节点上重复以上流程。
在这个过程中, 实际使用的时候发现有一些需要注意的雷区.
扫雷一:使用UI触发升级,必须保证集群没有自定义插件和bundles
ECE 里面的集群操作是通过plan来控制的
任何的集群操作最终都会生成一个plan的diff。如上图,把集群从5.4.1 升级到 5.6.12 会产生以上diff.
正常情况下是没有问题的.
如果集群配置了自定义bundles, 比如LDAP bundles, ref:https://www.elastic.co/guide/e ... .html
那么在集群的plan里面就会存在这么一段配置
那么当我们在按下升级按钮的时候
ECE 只在plan中修改了集群大版本的配置, 但是并没有修改自定义bundles中的版本号(仍然是5.4.1).
在这种情况下去执行升级,会直接产生报错.
界面上没有显示原因, 但是这是因为plan里面大版本和bundle中的版本不一致,然后会导致新增的节点无法启动. 于是ECE 就认为集群升级失败了.
解决方法是手动编辑plan,把自定义bundles中的版本号改成和集群版本一致
然后使用ECE 提供的一种手动使用plan进行集群升级的方式进行升级.
扫雷二:节点无法关闭
ECE 控制container 是通过一个叫做 constructor的服务。constructor 通过接收集群的更改需求,制定具体的更改计划与步骤,指导allocator对container进行操作。同时也负责保证集群高可靠性,通过Availability Zone的数量在不同的AZ上面部署节点。
当Allocator接受到关闭container命令的时候,会尝试去关闭container,如果container处于一个阻塞状态无法响应, 那么关闭命令无法执行成功。这个时候constructor会等待节点关闭,但是allocator又认为节点已经接受到关闭命令了。又或者constructor发送给allocator的过程中网络丢包, 这个时候allocator 没有正确接受关闭container的命令. 整个升级进程就卡住了。 这种情况十分罕见,通常发现一个container如果处于”正在关闭”时间太久了, 那么通常就是中间的通信出现问题了.
解决办法是可以通过手动停止container, 在对应的allocator上面找到container,使用
docker stop <container_name>
停止container,这样可以出发allocator更新container的健康状态,上报这个container已经关闭了, 从而打通流程并执行下一步。
扫雷三: 多版本并存
如果使用上面的方式强行关闭docker container, 虽然可以让升级进程继续进行下去. 但是被手动关闭的节点会保留原来的版本。于是在升级后查看各个节点的版本,会发现部分节点是5.4.1, 部分是5.6.12.
因为节点是强制关闭的, ECE直接认为节点已经完成升级,并重新启动这个container. 而在这个处理中,跳过了升级docker image的一步.
为什么不是生成一个新的container呢? 因为从plan里面可以看到
在默认情况下, ECE 处理版本升级是使用rolling 策略 Ref: https://www.elastic.co/guide/e ... .html
在这个策略下,ECE会停止当前container并直接修改重启。
如果ECE集群容量允许, 可以改成grow_and_shrink 策略, 这样ECE 会创建新的container并且销毁旧的container, 避免集群出现多版本.
如果出现了多版本的集群,可以通过更改集群任意一个配置来触发 grow_and_shrink 同样可以使到版本回归一致.
总结来说ECE 在版本升级方面还是有很多需要改进的地方. 对于ECE用户再说在使用ECE的版本升级功能的时候主要有以下建议
1. 自己学会手动修改plan. 这也是每一个ECE support engineer 都会干的事情.
2.如果集群容量允许,尽量使用 grow_and_shrink的策略来进行集群操作.
kibana页面的Dev Tools模块为什么不断得进行两个post请求?
Kibana • rochy 回复了问题 • 2 人关注 • 1 个回复 • 2375 次浏览 • 2018-12-21 14:02
社区日报 第484期 (2018-12-20)
社区日报 • 白衬衣 发表了文章 • 0 个评论 • 1526 次浏览 • 2018-12-20 19:24
http://t.cn/E45chlT
2.有赞全链路压测实战
http://t.cn/E45cViJ
3.Elasticsearch bool query小结
http://t.cn/E45cKEi
编辑:金桥
归档:https://elasticsearch.cn/article/6212
订阅:https://tinyletter.com/elastic-daily
kibana query 大于值问题。
Kibana • trycatchfinal 回复了问题 • 2 人关注 • 1 个回复 • 5863 次浏览 • 2018-12-26 21:13
Logstash中input-redis如何配置集群
Logstash • zqc0512 回复了问题 • 4 人关注 • 4 个回复 • 2990 次浏览 • 2018-12-24 08:52
能不能根据查询的文档数量进行排序
Elasticsearch • psc0606 回复了问题 • 3 人关注 • 2 个回复 • 2758 次浏览 • 2018-12-20 23:25
logstash sql_last_value 记录的时间比SQL查到的最后一条数据的时间大十四个小时
Logstash • zqc0512 回复了问题 • 4 人关注 • 3 个回复 • 5482 次浏览 • 2018-12-24 08:54
有没有什么办法在对查询影响较小的情况下进行segment操作
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 1957 次浏览 • 2018-12-20 15:37
不定内容的新闻搜索
Elasticsearch • rochy 回复了问题 • 4 人关注 • 4 个回复 • 3946 次浏览 • 2018-12-20 15:33
elasticsearch主从配置问题。
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 2023 次浏览 • 2018-12-20 11:28
logstash消费kafka的问题
Logstash • zhangxinhong 回复了问题 • 8 人关注 • 4 个回复 • 8748 次浏览 • 2019-05-08 09:21
Day 20 - Elastic性能实战指南
Advent • laoyang360 发表了文章 • 10 个评论 • 5563 次浏览 • 2018-12-20 09:14
让Elasticsearch飞起来!——性能优化实践干货
0、题记
Elasticsearch性能优化的最终目的:用户体验爽
。
关于爽的定义——著名产品人梁宁曾经说过“人在满足时候的状态叫做愉悦,人不被满足就会难受,就会开始寻求。如果这个人在寻求中,能立刻得到即时满足,这种感觉就是爽!”。
Elasticsearch的爽点就是:快、准、全
!
关于Elasticsearch性能优化,阿里、腾讯、京东、携程、滴滴、58等都有过很多深入的实践总结,都是非常好的参考。本文换一个思路,基于Elasticsearch的爽点
,进行性能优化相关探讨。
1、集群规划优化实践
1.1 基于目标数据量规划集群
在业务初期,经常被问到的问题,要几个节点的集群,内存、CPU要多大,要不要SSD?
最主要的考虑点是:你的目标存储数据量
是多大?可以针对目标数据量反推节点多少。
1.2 要留出容量Buffer
注意:Elasticsearch有三个警戒水位线,磁盘使用率达到85%、90%、95%。
不同警戒水位线会有不同的应急处理策略。
这点,磁盘容量选型中要规划在内。控制在85%之下
是合理的。
当然,也可以通过配置做调整。
1.3 ES集群各节点尽量不要和其他业务功能复用一台机器。
除非内存非常大。
举例:普通服务器,安装了ES+Mysql+redis,业务数据量大了之后,势必会出现内存不足等问题。
1.4 磁盘尽量选择SSD
Elasticsearch官方文档肯定推荐SSD
,考虑到成本的原因。需要结合业务场景,
如果业务对写入、检索速率有较高的速率要求,建议使用SSD磁盘。
阿里的业务场景,SSD磁盘比机械硬盘的速率提升了5倍。
但要因业务场景而异。
1.5 内存配置要合理
官方建议:堆内存的大小是官方建议是:Min(32GB,机器内存大小/2)。
Medcl和wood大叔都有明确说过,不必要设置32/31GB那么大,建议:热数据设置:26GB,冷数据:31GB
。
总体内存大小没有具体要求,但肯定是内容越大,检索性能越好。
经验值供参考:每天200GB+增量数据的业务场景,服务器至少要64GB内存。
除了JVM之外的预留内存要充足,否则也会经常OOM。
1.6 CPU核数不要太小
CPU核数是和ESThread pool关联的。和写入、检索性能都有关联。
建议:16核+
。
1.7 超大量级的业务场景,可以考虑跨集群检索
除非业务量级非常大,例如:滴滴、携程的PB+的业务场景,否则基本不太需要跨集群检索。
1.8 集群节点个数无需奇数
ES内部维护集群通信,不是基于zookeeper的分发部署机制,所以,无需奇数
。
但是discovery.zen.minimum_master_nodes的值要设置为:候选主节点的个数/2+1,才能有效避免脑裂。
1.9 节点类型优化分配
集群节点数:<=3,建议:所有节点的master:true, data:true。既是主节点也是路由节点。
集群节点数:>3, 根据业务场景需要,建议:逐步独立出Master节点和协调/路由节点。
1.10 建议冷热数据分离
热数据存储SSD
和普通历史数据存储机械磁盘,物理上提高检索效率。
2、索引优化实践
Mysql等关系型数据库要分库、分表。Elasticserach的话也要做好充分的考虑。
2.1 设置多少个索引?
建议根据业务场景进行存储。
不同通道类型的数据要分索引存储
。举例:知乎采集信息存储到知乎索引;APP采集信息存储到APP索引。
2.2 设置多少分片?
建议根据数据量衡量。
经验值:建议每个分片大小不要超过30GB
。
2.3 分片数设置?
建议根据集群节点的个数规模,分片个数建议>=集群节点的个数。
5节点的集群,5个分片就比较合理。
注意:除非reindex操作,分片数是不可以修改
的。
2.4副本数设置?
除非你对系统的健壮性有异常高的要求,比如:银行系统。可以考虑2个副本以上。
否则,1个副本足够。
注意:副本数是可以通过配置随时修改
的。
2.5不要再在一个索引下创建多个type
即便你是5.X版本,考虑到未来版本升级等后续的可扩展性。
建议:一个索引对应一个type。6.x默认对应_doc,5.x你就直接对应type统一为doc。
2.6 按照日期规划索引
随着业务量的增加,单一索引和数据量激增给的矛盾凸显。
按照日期规划索引是必然选择。
好处1:可以实现历史数据秒删。很对历史索引delete即可。注意:一个索引的话需要借助delete_by_query+force_merge操作,慢且删除不彻底。
好处2:便于冷热数据分开管理,检索最近几天的数据,直接物理上指定对应日期的索引,速度快的一逼!
操作参考:模板使用+rollover API使用
。
2.7 务必使用别名
ES不像mysql方面的更改索引名称。使用别名就是一个相对灵活的选择。
3、数据模型优化实践
3.1 不要使用默认的Mapping
默认Mapping的字段类型是系统自动识别
的。其中:string类型默认分成:text和keyword两种类型。如果你的业务中不需要分词、检索,仅需要精确匹配,仅设置为keyword即可。
根据业务需要选择合适的类型,有利于节省空间和提升精度,如:浮点型的选择。
3.2 Mapping各字段的选型流程
3.3 选择合理的分词器
常见的开源中文分词器包括:ik分词器、ansj分词器、hanlp分词器、结巴分词器、海量分词器、“ElasticSearch最全分词器比较及使用方法” 搜索可查看对比效果。
如果选择ik,建议使用ik_max_word。因为:粗粒度的分词结果基本包含细粒度ik_smart的结果。
3.4 date、long、还是keyword
根据业务需要,如果需要基于时间轴做分析,必须date类型;
如果仅需要秒级返回,建议使用keyword
。
4、数据写入优化实践
4.1 要不要秒级响应?
Elasticsearch近实时的本质是:最快1s写入的数据可以被查询到。
如果refresh_interval
设置为1s,势必会产生大量的segment,检索性能会受到影响。
所以,非实时的场景可以调大,设置为30s,甚至-1。
4.2 减少副本,提升写入性能。
写入前,副本数设置为0,
写入后,副本数设置为原来值。
4.3 能批量就不单条写入
批量接口为bulk,批量的大小要结合队列的大小,而队列大小和线程池大小、机器的cpu核数。
4.4 禁用swap
在Linux系统上,通过运行以下命令临时禁用交换:
sudo swapoff -a
5、检索聚合优化实战
5.1 禁用 wildcard模糊匹配
数据量级达到TB+甚至更高之后,wildcard在多字段组合的情况下很容易出现卡死,甚至导致集群节点崩溃宕机
的情况。
后果不堪设想。
替代方案:
方案一:针对精确度要求高的方案:两套分词器结合,standard和ik结合,使用match_phrase检索。
方案二:针对精确度要求不高的替代方案:建议ik分词,通过match_phrase和slop结合查询。
5.2极小的概率使用match匹配
中文match匹配显然结果是不准确
的。很大的业务场景会使用短语匹配“match_phrase"。
match_phrase结合合理的分词词典、词库,会使得搜索结果精确度更高,避免噪音数据。
5.3 结合业务场景,大量使用filter过滤器
对于不需要使用计算相关度评分的场景,无疑filter缓存机制
会使得检索更快。
举例:过滤某邮编号码。
5.3控制返回字段和结果
和mysql查询一样,业务开发中,select * 操作几乎是不必须的。
同理,ES中,_source 返回全部字段也是非必须的。
要通过_source 控制字段
的返回,只返回业务相关的字段。
网页正文content,网页快照html_content类似字段的批量返回,可能就是业务上的设计缺陷。
显然,摘要字段应该提前写入,而不是查询content后再截取处理。
5.4 分页深度查询和遍历
分页查询使用:from+size;
遍历使用:scroll;
并行遍历使用:scroll+slice
。
斟酌集合业务选型使用。
5.5 聚合Size的合理设置
聚合结果是不精确的。除非你设置size为2的32次幂-1,否则聚合的结果是取每个分片的Top size元素后综合排序后的值。
实际业务场景要求精确反馈结果的要注意。
尽量不要获取全量聚合结果
——从业务层面取TopN聚合结果值是非常合理的。因为的确排序靠后的结果值意义不大。
5.6 聚合分页合理实现
聚合结果展示的时,势必面临聚合后分页的问题,而ES官方基于性能原因不支持聚合后分页。
如果需要聚合后分页
,需要自开发实现。包含但不限于:
方案一:每次取聚合结果,拿到内存中分页返回。
方案二:scroll结合scroll after集合redis实现。
6、业务优化
让Elasticsearch做它擅长的事情,很显然,它更擅长基于倒排索引进行搜索。
业务层面,用户想最快速度看到自己想要的结果,中间的“字段处理、格式化、标准化”等一堆操作,用户是不关注的。
为了让Elasticsearch更高效的检索,建议:
1)要做足“前戏”
字段抽取、倾向性分析、分类/聚类、相关性判定放在写入ES之前的ETL阶段进行;
2)“睡服”产品经理
产品经理基于各种奇葩业务场景可能会提各种无理需求。
作为技术人员,要“通知以情晓之以理”,给产品经理讲解明白搜索引擎的原理、Elasticsearch的原理,哪些能做,哪些真的“臣妾做不到
”。
7、小结
实际业务开发中,公司一般要求又想马儿不吃草,又想马儿飞快跑
。
对于Elasticsearch开发也是,硬件资源不足(cpu、内存、磁盘都爆满)几乎没有办法提升性能的。
除了检索聚合,让Elasticsearch做N多相关、不相干的工作,然后得出结论“Elastic也就那样慢,没有想像的快”。
你脑海中是否也有类似的场景浮现呢?
提供相对NB的硬件资源、做好前期的各种准备工作、让Elasticsearch轻装上阵
,相信你的Elasticsearch也会飞起来!
来日我们再相会......
推荐阅读:
1、阿里:https://elasticsearch.cn/article/6171
2、滴滴:http://t.cn/EUNLkNU
3、腾讯:http://t.cn/E4y9ylL
4、携程:https://elasticsearch.cn/article/6205
5、社区:https://elasticsearch.cn/article/6202
6、社区:https://elasticsearch.cn/article/708
7、社区:https://elasticsearch.cn/article/6202
Elasticsearch基础、进阶、实战第一公众号
社区日报 第483期 (2018-12-19)
社区日报 • elk123 发表了文章 • 0 个评论 • 1944 次浏览 • 2018-12-19 19:35
http://t.cn/E421UUE
2、(自备梯子)如何使用es和react构建电子商务搜索。
http://t.cn/E42BSad
3、Elastic:Beyond Search!
http://t.cn/E42dIzz
编辑:wt
归档:https://elasticsearch.cn/article/6210
订阅:https://tinyletter.com/elastic-daily
支持日韩以及其他语言的搜索实现
Elasticsearch • kennywu76 回复了问题 • 6 人关注 • 2 个回复 • 3340 次浏览 • 2018-12-21 15:47