百亿级数据搜索引擎,Elasticsearch简介和安装

今天开始,和大家一学习搜素引擎Elasticsearch相关的技术点。后续会和大家持续更新有关Elasticsearch相关的技术点,欢迎大家关注!

Elasticsearch是什么

Elasticsearch是一个高度可扩展的开源全文本搜索和分析引擎。它可以快速,近实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索功能和要求的应用程序的基础引擎。
Elasticsearch的场景
1.电商网站。允许客户搜索产品。可以使用ES存储整个产品目录和库存,并为其提供搜索和自动完成功能。
2.日志或交易数据收集。并且要对数据进行分析和挖掘以查找趋势,统计信息,摘要或异常等。
3.价格警报平台。平台允许客户指定如“如果某商品的价格在下个月内降到X以下,就通知我” 。
4.业务智能分析。想要快速调查,分析,可视化并针对大量数据提出特别问题。

Elasticsearch特点

Elasticsearch封装了Lucene,开箱即用,使用起来更加简单。Elasticsearch支持集群,也支持集群节点动态扩展,在高可用上做了很多工作,是一个搜索引擎,而不是一个索引类库。
1.Elasticsearch基于Lucene构建,Elasticsearch利用Lucene做实际的工作
2.ELasticsearch中的每个分片都是一个分离的Lucene实例.
3.Elasticsearch在Lucene基础上(即利用Lucene的功能)提供了一个分布式的、基于JSON的REST API 来更方便地使用 Lucene的功能。
4.Elasticsearch提供其他支持功能,如:线程池,队列,节点/集群监控API,数据监控API,集群管理等

Elasticsearch基本概念

集群(Cluster)

集群是一个或多个节点(服务器)的集合,这些节点一起保存全部数据,并在所有节点之间提供索引和搜索功能。集群由唯一名称标识,默认情况下为“ elasticsearch”。此名称很重要,因为如果节点被设置为通过名称加入群集,则该节点只能是群集的一部分。

节点(Node)

节点是单个服务器是群集的一部分,用于存储数据并参与群集的索引和搜索。像群集一样,节点由名称标识,该名称默认为在启动时分配给该节点的随机唯一标识符(UUID)。如果不想使用默认的节点名称,可以自定义节点名称。该名称对于管理集群非常重要,命名时尽可能可以通过名称来判别在集群中对应哪个节点。

索引(Index)

索引是具有相似特征的文档的集合。如:可以以客户数据创建索引,以产品目录创建一个索引,以订单数据创建一个索引。

类型(Type)

在索引中,您可以定义一个或多个类型。类型是索引的逻辑类别或分区。通常,为具有一组公共字段的文档定义一种类型

文档(Document)

文件是可以索引的基本信息单位。

Elastic Search 关系型数据库
索引(Indices) 数据库(Databases)
类型(Types) 表(Table)
文档(Document) 行(Row)
字段(Field) 列(Column)
Mapping Schema
结构化查询语言(query DSL) SQL
字段(Field) 列(Column)
GET http:9200/index... SELECT * FROM table... where ...

分片(Shard)

实际项目中,索引数据可能会非常庞大,而这些数据可能超过了单个节点的硬件条件。如:十亿个文档的单个索引占用了1TB的磁盘空间,这时无法使用单个节点的磁盘存储,或者因为检索过程太慢而无法满足搜索请求。
为了解决此问题,Elasticsearch提供了将索引细分为多个碎片(分片)的功能。创建索引时,只需定义所需的分片数量即可。每个分片本身就是一个功能齐全且独立的“索引”,它们可以托管在群集中的任何节点上。

副本(Replicas)

为了以防分片/节点因为某些原因脱机或消失(提供高可用机制),强烈建议使用故障转移机制。为此,Elasticsearch允许将索引分片的一个或多个副本制作为所谓的副本分片(简称副本)。

近实时搜索

随着按段(per-segment)搜索的发展,一个新的文档从索引到可被搜索的延迟显著降低了。新文档在几分钟之内即可被检索,但这样还是不够快。
磁盘在这里成为了瓶颈。提交(Commiting)一个新的段到磁盘需要一个 fsyn 操作来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据。 但是 fsyn 操作代价很大;如果每次索引一个文档都去执行一次的话会造成很大的性能问题。
我们需要的是一个更轻量的方式来使一个文档可被搜索,这意味着** fsyn** 要从整个过程中被移除。
在Elasticsearch和磁盘之间是文件系统缓存。像之前描述的一样, 在内存索引缓冲区中的文档会被写入到一个新的段中。但是这里新段会被先写入到文件系统缓存——这一步代价会比较低,稍后再被刷新到磁盘——这一步代价比较高。不过只要文件已经在缓存中, 就可以像其它文件一样被打开和读取了。
Lucene 允许新段被写入和打开—使其包含的文档在未进行一次完整提交时便对搜索可见。 这种方式比进行一次提交代价要小得多,并且在不影响性能的前提下可以被频繁地执行。

持久化更新

即使通过每秒刷新(refresh)实现了近实时搜索,我们仍然需要经常进行完整提交来确保能从失败中恢复。但在两次提交之间发生变化的文档怎么办?我们也不希望丢失掉这些数据。
Elasticsearch 增加了一个 translog ,或者叫事务日志,在每一次对 Elasticsearch 进行操作时均进行了日志记录。通过 translog ,整个流程看起来是下面这样:

  1. 一个文档被索引之后,就会被添加到内存缓冲区,并且追加到了 translog 。
  2. 刷新(refresh)使分片处于“刷新(refresh)完成后, 缓存被清空但是事务日志不会” 的状态,分片每秒被刷新(refresh)一次:
    ①这些在内存缓冲区的文档被写入到一个新的段中,且没有进行 fsyn 操作。
    ②这个段被打开,使其可被搜索。
    ③内存缓冲区被清空。
  3. 这个进程继续工作,更多的文档被添加到内存缓冲区和追加到事务日志
  4. 每隔一段时间—例如 translog 变得越来越大—索引被刷新(flush);一个新的 translog 被创建,并且一个全量提交被执行(“在刷新(flush)之后,段被全量提交,并且事务日志被清空”):
    ①所有在内存缓冲区的文档都被写入一个新的段。
    ②缓冲区被清空。
    ③一个提交点被写入硬盘。
    ④文件系统缓存通过 fsyn 被刷新(flush)。
    ⑤老的 translog 被删除。

Elasticsearch安装配置

版本选择

Elasticsearch 5.6.15
JDK 版本最少 JDK 1.8.0_133

下载并解压

# 下载elasticsearch-5.6.16
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.tar.gz
# 解压文件
$ tar xvzf elasticsearch-5.6.16.tar.gz
# 移动到指定目录
$ mv ./elasticsearch-5.6.16 /usr/path/to

配置

配置文件详解
配置项 配置项说明
cluster.name Elasticsearch集群名称。默认名称为elasticsearch
node.name 节点名称。默认情况下,Elasticsearch使用随机生成UUID的前七个字符作为节点ID。节点ID是持久的在重新启动时也不会更改,因此默认节点名称也不会更改。
node.attr.rack 节点服务器所在的机架信息
path.data 设置索引数据的存储路径,默认是Elasticsearch根目录下data文件夹。可以设置多个存储路径,用逗号隔开
path.log 设置日志文件的存储路径,默认是Elasticsearch根目录下logs文件夹
bootstrap.memory_lock 设置为true代表任何JVM内存都不会交换到磁盘上,防止Elasticsearch内存被交换出去影响性能。
network.host 指定Elasticsearch节点的IP地址
http.port 设置Elasticsearch对外服务的http端口号。默认9200
discovery.zen.ping.unicast.hosts 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.minimum_master_nodes 该参数是为了防止”脑裂”的产生,定义了为形成群集而必须可见的符合主机要求的最小数量。默认为1。
gateway.recover_after_nodes 只要预期的节点数已加入集群,就会启动本地分片的恢复。默认为0
action.destructive_requires_name 只能删除指定了名称的数据,而不允许通过 _all 或通配符来删除匹配的索引库。可以Rest API 动态的更新这个设置。

系统配置文件

memory_lock配置

如果memory_lock设置为true,出现报错,则需要修改下面2个Linux系统文件:
修改 /etc/security/limits.conf

soft nofile 65536
hard nofile 65536
soft nproc 32000
hard nproc 32000
hard memlock unlimited
soft memlock unlimited

修改/etc/systemd/system.conf

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

max_map_count警告
临时设置,当Linux重新启动会恢复到设置之前的值。

$ sysctl -w vm.max_map_count=262144

# 查看结果:
$ sysctl -a|grep vm.max_map_count

# 显示:
$ vm.max_map_count = 262144

永久设置
在 /etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

启动

$ cd $ES_HOME/bin

# 启动elasticsearch
$ ./elasticsearch

# 带参数覆盖配置启动(通过自定义名称覆盖集群默认的名称或节点名称)
$ ./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name

至此,有关于Elasticsearch简介和安装和大家分享完了,后续陆续为大家分享有关Elasticsearch先关的知识点,欢迎大家持续关注,相互探讨学习!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容

  • 灰蒙蒙的天 飘落着淅淅沥沥的小雨 我站在这坏天气里 心情格外沉重 于是转身向大海走去 微冷的风将我吹醒 我告诉自己...
    广电1702赵晓宇21阅读 123评论 1 1
  • 2018.12.18 这一个星期在担心、害怕焦虑中度过。惶惶不可终日。 老爸病了,由于突发状况120拉去医院急救室...
    JMY钰阅读 1,849评论 4 11
  • 我们总是在惯性中生活,在教导下学习,在成规中思考,在劝解中决定,并在无助的结果中自责。是时候放下这一切。精进,成为...
    夏沫er阅读 405评论 1 2
  • 对日常生活琐事的回忆是一件说矫情就矫情的事,可又有谁能不偶尔想起过去走过的一串串岁月织成的蜘蛛网?很多时候...
    曾经历过阅读 169评论 0 0
  • 暮春送客 唐·韩琮 绿暗红稀出凤城, 暮云楼阁古今情。 行人莫听宫前水, 流尽年光是此声。 译注 花飞卉谢,叶茂枝...
    老丑先生阅读 353评论 1 0