关于面试官:ElasticSearch是什么,它有什么特性与使用场景?和elasticsearch:thedefinitiveguide的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ap
关于面试官:ElasticSearch是什么,它有什么特性与使用场景?和elasticsearch: the definitive guide的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于appsync 使用 elasticsearch 作为数据源:Elasticsearch 响应错误:禁止、ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?、Elasticsearch 的使用场景深入详解、Elasticsearch7.8详尽使用指南(一):ElasticSearch集群部署实践等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 面试官:ElasticSearch是什么,它有什么特性与使用场景?(elasticsearch: the definitive guide)
- appsync 使用 elasticsearch 作为数据源:Elasticsearch 响应错误:禁止
- ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?
- Elasticsearch 的使用场景深入详解
- Elasticsearch7.8详尽使用指南(一):ElasticSearch集群部署实践
面试官:ElasticSearch是什么,它有什么特性与使用场景?(elasticsearch: the definitive guide)
哈喽!大家好,我是小奇,一位热爱分享的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。
文章目录
- 一、前言
- 二、面试
- 三、ElasticSearch是什么
- 四、ElasticSearch索引原理
- 五、ElasticSearch分词器
- 六、ElasticSearch有哪些使用场景呢
- 七、总结
一、前言
书接上回,我本以为我跟面试我的小姐姐情投意合,这次工作肯定是十拿九稳了。
殊不知最后卡在了hr大姐那里了,说我体格太小不合适,我是来面试开发来了,不是面试驴拉磨来了, 我怀疑hr跟刘婶是亲戚吧,以貌取人、以体格取人。。。
由于以为昨天十拿九稳,今天也没有约面试,闲着也是闲着,我准备找我在北京当工程师的发小去玩一天,他跟我说他是什么长方体固体定向移动工程师,我也不懂这是个什么,感觉比Java工程师要厉害,决定今天去拜访他一下。
换乘了四趟地铁,又坐了十几站公交车,终于来到了我发小猴哥这里来了,他之前在电话里跟我说他现在混得特别好,从之前的一无所有,混到现在的。。。,由于地铁上信号不太好后面混成啥样没听清就挂断了,我觉得怎么也混到了呼风唤雨的地步了吧。
到了目的地跟他打电话,他跟我说他在幸福小区顶楼,直接上来吧没有门,我寻思什么房子这么高级没有门呢,结果上来了远远的就看见他的背影了,我终于知道后面说的现在混成什么样了,原来是从之前的一无所有,混成现在的身无分文了啊。。。
我:“猴哥,你不是说你在顶楼没有门吗?”
猴哥:“对啊,你看我现在不就在顶楼正干活呢嘛,这顶楼还没有盖好,所以当然没有门了嘛”。
我:“行吧,说不过你,那你不是工程师吗,什么长方体固体定向移动工程师”。
猴哥:“对啊,你看我手里的砖是长方体吧,我从这边给他移动到这边,我这一套下来不就是长方体固体定向移动工程师嘛”。
我:“得,你来了大城市了以后套路也变深了啊”。
猴哥:“那必须的,对了小奇你来北京不是来面试Java了吗,面试的怎么样了?”
我:“别提了,人家嫌我体格不好,我要是有你这体格那我就杠杠的上班了”。
猴哥:“那你正好也别找开发工作了,你直接跟我干好了,干一个月你体格也就好了”。
我:“那你们这里加班吗?压力大不大?”
猴哥:“一点都不大,你可以看看我们大门口的岗位要求,我感觉简简单单啦,跟你们程序员还是没法比的哦”。
我:“在哪呢?我去看看”。
我:“你们这特么都是跟谁学的,现在工地也这么卷的吗?“
猴哥:“没办法,我们前一段时间空降了一个工头,之前是某大厂程序员,给我们定了规矩,现在我们每天回去还得写ppt呢”。
我:“这特么都是大厂给社会输送的人才,你得好好跟着你们工头干啊”。
猴哥:“必须的,等我我收拾一下,我们出去玩”。
我:“你这就收拾好了啊,不换身衣服啊”。
猴哥:“不用换,一会领导打电话还得赶回来干活呢,你们不是也随时待命,陪女朋友逛商场也得背着电脑嘛”。
我:“以后学我点好的,别学我坏的”。
猴哥:“不是你也没有好的啊”。
我:“我。。。”。
二、面试
从发小那里玩完下午回来的路上突然接到了一个电话,电话那头的小姐姐声音甜美,说是在简历库中看到了我的简历,问我有没有时间去现场面试,我想着反正现在也没有事情,不如就去面试,小姐姐说加我微信,一会发我公司地址。
加了小姐姐微信后,上来肯定是先看一波朋友圈啊,小司机可能不太懂,但是老司机已经开始分析了,该说不说这个小姐姐确实正品啊,比刘婶强多了,为了弥补被我刘婶视觉冲击到的读者,我就把小姐姐的照片分享给大家。
到了地方后小姐姐把我带进一个小黑屋,正在我窃喜可能会发生点什么的时候之间她拿了面试题过来了,说外面没有地方了,就在这个小屋子里做题吧,唉,白期待了。
做完题来了一位面试官,我一看是男的就瞬间没了兴趣,但是来都来了,怎么也得面试完啊。
面试官:“小奇是吧”。
我:“是我”。
面试官:“我看你简历上写的精通ElasticSearch?是真的还是写错了”。
我:“我时而精通时而模糊,你就问吧”。
面试官:“行,那你就先简单的说一下ElasticSearch是什么吧”。
三、ElasticSearch是什么
我:“ElasticSearch是用Java开发的,并且是当前最流行的开源的企业级搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎,它能够达到实时搜索,稳定,可靠,快速,安装使用方便”。
四、ElasticSearch索引原理
面试官:“嗯,你能说一下ElasticSearch使用的什么索引吗,有什么原理吗”。
我:ElasticSearch中分词使用的是倒排索引。
我:ElasticSearch先将文章的内容进行分词,将词和行数关联起来,然后将重复的词去重,将行数记录下来,这样我们上面如果搜索hello这个词的话就会给他展示第1和2行的数据,因为hello就在这两行里面,而不用再全文章扫描了。
面试官:“嗯,为什么有些数据库在数据量变大的时候性能下降的非常厉害,而ElasticSearch数据量越来越大的时候反而性能下降的不明显呢”。
我:因为我们可以看到,无论文章有多少的内容,我们最后都会去重,也就是说最后的索引表中的条数不会超过所有的单词。
也就是说假如世界上只有100个单词,那么最后索引表中只有100条数据,因为文章是由单词组成的,文章内容再多最后去重后也只有100条数据,只不过数据的所在行有所变化而已。
这样我们就看出来了,文章内容越多,他的单词重复率越高,查询性能降低的也越来越慢。
五、ElasticSearch分词器
面试官:“嗯,那我们怎么知道一句话中哪些是词语呢,怎么来分词呢”。
我:如果文章是英文的,那么非常好分词,因为英文单词中间有空格,我们根据空格就可以分词,这样直接使用ElasticSearch自带的分词器就好。
如果文章是中文的,那么使用ElasticSearch自带的分词器就不是很好了,因为它会将中文的每一字都给分开,显然是不合理的,总不能把奇哥很帅分开吧。
所以我们可以使用IK中文分词器,我们使用这个插件就可以实现中文内容的分词了。
六、ElasticSearch有哪些使用场景呢
面试官:“嗯,那你说一下ElasticSearch有哪些使用场景呢”。
我:一般的话像百度这种的专门做搜索的,你搜索关键词,他会帮你找到对应的内容,并且给他标红。
我:还有像淘宝、京东这种购物网站,搜索关键词也会展示内容,并且关键词高亮处理。
面试官:“小伙子不错呀,什么时候能入职呢”
我:“额。。。我后面还约了面试呢,怎么也得一周左右了吧”
面试官:“别面别家的了,就来我这吧,条件随便开”
我:“不不不,容我考虑考虑”。
面试官:“行,那等你考虑好了告诉我,今天就先这样,你还有什么问题要问我的吗”
我:“我有问题要问”。
面试官:“什么问题”
我:“就是带我的那个hr球姐有对象吗。。。”
七、总结
这里关于ElasticSearch还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】阅读更多的好文章,获取我为大家准备的资料。回复【项目】更有开源项目持续更新分享给大家。
appsync 使用 elasticsearch 作为数据源:Elasticsearch 响应错误:禁止
我已经为同样的问题苦苦挣扎了几天。 就我而言,问题是自动生成的 IAM 角色被授予 ES 端点的权限,并且通过更改对整个 ES 域的“资源”引用来解决。例如:
之前:
"Resource": [
"arn:aws:es:us-east-1:11111:domain/search-foo-bar-search-someid123.us-east-1.es.amazonaws.com"
]
之后:
"Resource": [
"arn:aws:es:us-east-1:11111:domain/foo-bar-search/*"
]
ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?
先了解一下数据的分类
结构化数据
又可以称之为行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。其实就是可以能够用数据或者统一的结构加以表示的数据。比如在数据表存储商品的库存,可以用整型表示,存储价格可以用浮点型表示,再比如给用户存储性别,可以用枚举表示,这都是结构化数据。
非结构化数据
无法用数字或者统一的结构表示的数据,称之为飞结构化数据。如:文本、图像、声音、网页。
其实结构化数据又数据非结构化数据。商品标题、描述、文章描述都是文本,其实文本就是非结构化数据。那么就可以说非结构化数据即为全文数据。
什么是全文检索?
一种将文件或者数据库中所有文本与检索项相匹配的文字资料检索方法,称之为全文检索。
全文检索的两种方法
顺序扫描法:将数据表的所有数据逐个扫描,再对文字描述扫描,符合条件的筛选出来,非常慢!
索引扫描法:全文检索的基本思路,也就是将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对快的目的。
全文检索的过程:
先索引的创建,然后索引搜索
为什么要选择用 ElasticSearch?
全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
分布式的实时文件存储,每个字段都被索引可被搜索。
分布式的实时分析搜索引擎。
可以扩展到上百台服务器,处理 PB 级别结构化或者非结构化数据。
所有功能集成在一个服务器里,可以通过 RESTful API、各种语言的客户端甚至命令与之交互。
上手容易,提供了很多合理的缺省值,开箱即用,学习成本低。
可以免费下载、使用和修改。
配置灵活,比 Sphinx 灵活的多。
Elasticsearch 的使用场景深入详解
了解了 ES 的使用场景,ES 的研究、使用、推广才更有价值和意义。
1、场景 —:使用 Elasticsearch 作为主要的后端
传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力。这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能,如统计。
Elasticsearch 是提供持久存储、统计等多项功能的现代搜索引擎。
如果你开始一个新项目,我们建议您考虑使用 Elasticsearch 作为唯一的数据存储,以帮助保持你的设计尽可能简单。
此种场景不支持包含频繁更新、事务(transaction)的操作。
举例如下:新建一个博客系统使用 es 作为存储。
1)我们可以向 ES 提交新的博文;
2)使用 ES 检索、搜索、统计数据。
ES 作为存储的优势:
如果一台服务器出现故障时会发生什么?你可以通过复制 数据到不同的服务器以达到容错的目的。
注意:
整体架构设计时,需要我们权衡是否有必要增加额外的存储。
2、场景二:在现有系统中增加 elasticsearch
由于 ES 不能提供存储的所有功能,一些场景下需要在现有系统数据存储的基础上新增 ES 支持。
举例 1:ES 不支持事务、复杂的关系(至少 1.X 版本不支持,2.X 有改善,但支持的仍然不好),如果你的系统中需要上述特征的支持,需要考虑在原有架构、原有存储的基础上的新增 ES 的支持。
举例 2:如果你已经有一个在运行的复杂的系统,你的需求之一是在现有系统中添加检索服务。一种非常冒险的方式是重构系统以支持 ES。而相对安全的方式是:将 ES 作为新的组件添加到现有系统中。
如果你使用了如下图所示的 SQL 数据库和 ES 存储,你需要找到一种方式使得两存储之间实时同步。需要根据数据的组成、数据库选择对应的同步插件。可供选择的插件包括:
1)mysql、oracle 选择 logstash-input-jdbc 插件。
2)mongo 选择 mongo-connector 工具。
假设你的在线零售商店的产品信息存储在 SQL 数据库中。 为了快速且相关的搜索,你安装 Elasticsearch。
为了索引数据,您需要部署一个同步机制,该同步机制可以是 Elasticsearch 插件或你建立一个自定义的服务。此同步机制可以将对应于每个产品的所有数据和索引都存储在 Elasticsearch,每个产品作为一个 document 存储(这里的 document 相当于关系型数据库中的一行 /row 数据)。
当在该网页上的搜索条件中输入 “用户的类型”,店面网络应用程序通过 Elasticsearch 查询该信息。 Elasticsearch 返回符合标准的产品 documents,并根据你喜欢的方式来分类文档。 排序可以根据每个产品的被搜索次数所得到的相关分数,或任何存储在产品 document 信息,例如:最新最近加入的产品、平均得分,或者是那些插入或更新信息。 所以你可以只使用 Elasticsearch 处理搜索。这取决于同步机制来保持 Elasticsearch 获取最新变化。
3、场景三:使用 elasticsearch 和现有的工具
在一些使用情况下,您不必写一行代码就能通过 elasticssearch 完成一项工作。很多工具都可以与 Elasticsearch 一起工作,所以你不必到你从头开始编写。
例如,假设要部署一个大规模的日志框架存储,搜索,并分析了大量的事件。
如图下图,处理日志和输出到 Elasticsearch,您可以使用日志记录工具,如 rsyslog(www.rsyslog.com),Logstash(www.elastic.co/products/logstash),或 Apache Flume(http://flume.apache.org)。
搜索和可视化界面分析这些日志,你可以使用 Kibana(www.elastic.co/ 产品 /kibana)。
为什么那么多工具适配 Elasticsearch?主要原因如下:
1)Elasticsearch 是开源的。
2)Elasticsearch 提供了 JAVA API 接口。
3)Elasticsearch 提供了 RESTful API 接口(不管程序用什么语言开发,任何程序都可以访问)
4)更重要的是,REST 请求和应答是典型的 JSON(JavaScript 对象 符号)格式。通常情况下,一个 REST 请求包含一个 JSON 文件,其回复都 也是一个 JSON 文件。
Elasticsearch7.8详尽使用指南(一):ElasticSearch集群部署实践
日期 | 作者 | 版本 | 备注 |
---|---|---|---|
2020-07-01 | dingbin | v1.0 | |
1. ElasticSearch技术简介
ElasticSearch简称es,是当前流行、强大的基于Lucene的企业级搜索引擎。
1.1. 基础概念
Elasticsearch有几个核心概念。从一开始理解这些概念会对整个学习过程有莫大的帮助。
1.1.1. 接近实时(NRT)
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)。
1.1.2. 集群(cluster)
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是 “elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。在产品环境中显式地设定这个名字是一个好习惯,但是使用默认值来进行测试/开发也是不错的。
1.1.3. 节点(node)
一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况 下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意 味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。
在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
1.1.4. 索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。
在一个集群中,如果你想,可以定义任意多的索引。
1.1.5. 类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
1.1.6. 文档(document)
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,只要你想,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。
1.1.7. 分片和复制(shards & replicas)
一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。
为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
分片之所以重要,主要有两方面的原因:
- 允许你水平分割/扩展你的内容容量
- 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非 常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。
复制之所以重要,有两个主要原因:
- 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
- 扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行
总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和 复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变 分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。
index: es里的index相当于一个数据库。
type: 相当于数据库里的一个表。
id: 唯一,相当于主键。
node:节点是es实例,一台机器可以运行多个实例,但是同一台机器上的实例在配置文件中要确保http和tcp端口不同(下面有讲)。
cluster:代表一个集群,集群中有多个节点,其中有一个会被选为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。
shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
2. ElasticSearch集群部署
本节将叙述从elasticsearch官网https://www.elastic.co/cn/公布的当前最新的es版本:7.8.0版本,在3台centos7.5 操作系统服务器上,以专门的特定用户(本文是用户es,不需要root或sudo权限),安装任意用户指定的路径(本文是/opt/es)的实践流程细节。
此外,鉴于es集群要想提供中文索引和检索的服务,离不开中文分词功能。本文在综合分析了目前市面上多种主流的中文分词组件功能优劣后,选择了效果较好的ik分词组件,嵌入到es中,以提供分词功能。考虑到es版本是7.8.0,ik分词组件版本必须与其一直。因此Ik分词程序包是从ik分词官网git网址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.8.0下载的v7.8.0版本。
注意:
本文所述设计的所有的程序安装包和相关源代码均提供下载:es7.8package.rar 提取码: x4gg
解压后内容如下图:(其中esproj.zip是本文开源的es构建全量或实时索引的相关java源代码)
2.1. 准备工作
2.1.1. 环境准备
分布式es集群至少要求运行在3台或以上服务器上。本文讲述是基于安装在3台vmware虚拟机上,各虚拟机机器结点如下表:
本节使用的所有vmware虚拟机配置均为CPU:8核,内存6G,硬盘足够。
2.1.2. 系统准备
2.1.2.1. 新建专门的es用户和组
新建专门的linux用户es和组es,以便安全方式运行进程
groupadd es
创建group es
vim /etc/group
会发现最后一行有es用户组
adduser -g es es
创建es用户,同时加入es用户组,自动创建es的homedir为/home/es
vim /etc/passwd, 可以看到最后一行是es用户。
passwd es
为es用户新设立密码
将es用户加入sudo权限
注意:本步骤非必须,可选。
chmod +w /etc/sudoers
vim /etc/sudoers
添加如下行:
修改完后不要忘记执行:chmod -w /etc/sudoers以恢复/etc/suders系统文件的非默认可写属性。
2.1.2.2. 创建es集群的basedir路径
在3台机器上统一特定路径位置创建es集群的basedir。后续该basedir目录下将分别创建出es集群的app/data/logs/tmp 4个子目录等。必须保证basedir路径的硬盘空间适应未来业务数据增长的需求,硬盘空间足够大。本文basedir路径为/opt/es。
mkdir /opt/es/app
mkdir /opt/es/data
mkdir /opt/es/tmp
mkdir /opt/es/logs
chown -R es:es /opt/es
以上的data、logs 2个目录将分别是es服务的datadir、logdir;app目录用于存放安装es程序的目录;用于自定义指定的es服务的tmp目录。chown -R es:es /opt/es是修改es集群的basedir路径/opt/es的所属user和group为es用户名和es组。
2.1.2.3. 防火墙、selinux和端口准备
CentOS7 端口的开放关闭查看都是用防火墙来控制的,Centos 从6升级到7之后,不再是用之前的iptables 命令控制linux端口,centos7取而代之的是用firewalld代替了原来centos6的iptables。
2.1.2.3.1. Centos7防火墙用法简述
以下简述centos7防火墙相关操作用法:
1) 查看防火墙状态:(active (running) 即是开启状态)
systemctl status firewalld
systemctl用法简述如下:
2)开启/关闭防火墙:
开启防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
禁止firewalld开机启动:systemctl disable firewalld
firewalld开机启动:systemctl enable firewalld
3)查询端口号3306 是否开启
firewall-cmd --query-port=3306/tcp
可见3306防火墙端口未开启
4)查询有哪些端口是开启的
firewall-cmd --list-port
5)重启防火墙
firewall-cmd --reload
6)开启端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
--zone #作用域
--add-port=3306/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效注意:开启端口后必须执行firewall-cmd --reload 以重启防火墙才能生效,否则不生效。
2.1.2.3.2. es集群部署涉及需要的防火墙端口操作
如前文章节所述,es集群需要默认开放3个端口:9200和9300和54328。其中:
9200: 作为 Http 协议,主要用于外部通讯
9300: 数据传输端口:9300 用于集群之间交换数据
54328: 组播端口(UDP)
要部署es集群,如果打开了防火墙,一定要记得将以上3个端口开放。本文因为体现定制性,将9200和9300端口分别改成了19200和19300。
方案1:关闭防火墙
systemctl stop firewalld
方案2:开启防火墙但是同时开放3个端口如下
systemctl start firewalld
firewall-cmd --zone=public --add-port=19200/tcp --permanent
firewall-cmd --zone=public --add-port=19300/tcp --permanent
firewall-cmd --zone=public --add-port=54328/udp --permanent
firewall-cmd --reload
本文采取方案2,开启防火墙但同时开启以上3个端口,效果如下:注意:开启防火墙要执行一下:systemctl enable firewalld 保证下次开启启动防火墙。
2.1.2.3.3. es集群部署涉及需要的selinux操作
es集群部署需要把 SELINUX 值设置成 disabled
查看现在selinux的状态:sestatus
临时关闭selinux:setenforce 0
临时打开,由permissive转enforcing:setenforce 1
但再次开启时此改变会失效。要想永久生效需要修改文件/etc/selinux/config
vim /etc/selinux/config
修改文件中SELINUX=disable即可。
2.1.2.3.4. Es程序启动必须的linux内核系统配置
在大多数linux版本下,Es程序启动必须设置一些特定的相关系统内核功能,否则es程序是启动不起来的。这非常重要,一定要设置,否则es启动不起来,且会报告各种莫名的错误。Es官网也给出了相关的系统配置建议,可参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html 。本节讲述的是在centos7上必须进行的系统内核相关的系统配置如下:
1) /etc/security/limits.conf 配置
vi /etc/security/limits.conf
打开文件,添加如下红框中3行:
2) /etc/sysctl.conf配置
vi /etc/sysctl.conf
打开文件,添加如下红框中2行:
注意
:以上这几处配置改动涉及到centos内核,建议重启centos操作系统使其永久生效。
至此,es集群安装所需的全部准备工作全部完成。下面开始安装es集群。
2.2. 部署es集群
2.2.1. 下载软件包
如前所述,部署es7.8集群还同时需要安装配套的分词组件包:ik7.8。分别从官网地址:
https://www.elastic.co/cn/
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.8.0下载的v7.8.0
即可下载到当前(20200701)最新的版本7.8。因为下载速度极其缓慢,整个下载过程持续约长达3-4个小时。文本已经下载好了这2个软件包,分别见项目提交列表中的如下文件:
直接解压使用即可,省去漫长的下载过程。
2.2.2. 安装和部署es集群
2.2.2.1. 安装es程序和ik组件
分别在cent7a、cent7b、cent7c 3台机器上解压项目提交列表中的es压缩包文件:elasticsearch-7.8.0-linux-x86_64.tar.gz到 /opt/es/app目录下,如下图所示:
接下来分别在3台机器上的/opt/es/app/elasticsearch-7.8.0/plugins目录下新建ik目录,然后将项目提交列表中的ik组件程序包:elasticsearch-analysis-ik-7.8.0.zip 解压到该ik插件目录下:/opt/es/app/elasticsearch-7.8.0/plugins/ik
最终结果如下:
2.2.2.2. 配置es集群
1) jvm相关配置
注意:es服务是java语言编写的,内部依赖jdk。但自从es6之后,es程序包内部内嵌了新版本的jdk,不再需要用户自己单独安装jdk。
vim /opt/es/app/elasticsearch-7.8.0/config/jvm.options
设置如下图所示最小堆空间和最大堆空间,建议都设置成一样的值。 本文部署实际中因为vmware虚拟机总共6G内存限制同时机器上还部署了其他耗内存的服务,因此只设置了3g 堆内存空间。实际生产环境下为保证es能发挥正常性能,该2值很关键,强烈设置在5g以上,但最大不应超过32g。在此范围内越大越好,越大es能发挥越高的性能。
此外如下图设置heapDumpPath为/opt/es/logs目录下:
2) Es集群配置:elasticsearch.yml
elasticsearch.yml文件是es集群的主要配置文件,一定要设置好。
先在cent7a上:vim /opt/es/app/elasticsearch-7.8.0/config/elasticsearch.yml
依次设置如下:
以上是cent7a的配置,cent7b、cent7c上的配置大体相同,除了:
node.name分别是es-node2/es-node3;
network.host分别是:192.168.0.111、192.168.0.112、192.168.0.113。
2.2.2.3. 启动/关闭es集群服务
1) 启动es:
依次在cent7a/cent7b/cent7c上执行命令:
/opt/es/app/elasticsearch-7.8.0/bin/elasticsearch -d -p /opt/es/app/pid
-d表示以后台服务方式运行, -p表示pid存储的文件。
然后在每个机器上执行:jps –lm和cat /opt/es/app/pid
即可看到如下:
分别是es进程和进程号。
然后在浏览器上输入:http://192.168.0.110:19200
即可看到如下:
输入:http://192.168.0.110:19200/_cat/nodes?v
显示如下:
输入:http://192.168.0.110:19200/_cat/health?v
显示如下:
可见集群共有3个节点,集群健康状态是status:green,绿色表示健康。
至此es集群部署完毕。
2) 关闭es:
分别在3台机器上分别执行:pkill -F /opt/es/app/pid即可。
未完待续,下一篇:Elasticsearch7.8详尽使用指南(二):ElasticSearch集群构建索引实践
今天关于面试官:ElasticSearch是什么,它有什么特性与使用场景?和elasticsearch: the definitive guide的介绍到此结束,谢谢您的阅读,有关appsync 使用 elasticsearch 作为数据源:Elasticsearch 响应错误:禁止、ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?、Elasticsearch 的使用场景深入详解、Elasticsearch7.8详尽使用指南(一):ElasticSearch集群部署实践等更多相关知识的信息可以在本站进行查询。
本文标签: