网站首页 > 开源技术 正文
发展历程
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。
据说,Shay 的妻子还在等着她的食谱搜索引擎…
Elasticsearch
Elasticsearch 后来作为一家公司(Elastic公司)进行运作,定位为数据搜索和分析平台。在2014年6月获得7000万美元融资,累计融资过亿美元。
ES现在可以与Java、Ruby、Python、PHP、Perl、.NET等多种客户端集成。也可与Hadoop、Spark等大数据分析平台进行集成,功能十分强大。
基于Elasticsearch衍生出了一系列开源软件,统称为 Elatic Stack。
为避免版本混乱,从5.0开始,Elastic公司将各组件的版本号统一。使用时,各组件版本号应一致(版本号形式:x.y.z,z可以不同)。
Elatic Stack
Elasticsearch 分布式搜索引擎
Logstash 日志采集与解析工具
Kibana 可视化分析平台
Beats 数据采集工具家族(替换Logstash)
X-Pack 功能包
ES的流行度
DB-Engines(一家收集和统计数据库管理系统信息的机构,网址:https://db-engines.com/en/ranking/search+engine)上的搜索引擎排名:
ES的特性
速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。
- 分布式:横向扩展非常灵活
- 全文检索:基于lucene的强大的全文检索能力;
- 近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
- 高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据
- 模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。
- RESTful API:JSON + HTTP
官网地址:https://www.elastic.co/cn/elasticsearch/
ES的应用场景
- 站内搜索
- NoSQL数据库
- 日志分析
- 数据分析
ES的架构
Gateway是ES用来存储索引的文件系统,支持多种类型。
Gateway的上层是一个分布式的lucene框架。
Lucene之上是ES的模块,包括:索引模块、搜索模块、映射解析模块等
ES模块之上是 Discovery、Scripting和第三方插件。Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。Scripting用来支持在查询语句中插入javascript、python等脚本语言,scripting模块负责解析这些脚本,使用脚本语句性能稍低。ES也支持多种第三方插件。
再上层是ES的传输模块和JMX.传输模块支持多种传输协议,如 Thrift、memecached、http,默认使用http。JMX是java的管理框架,用来管理ES应用。
最上层是ES提供给用户的接口,可以通过RESTful接口和ES集群进行交互。
ES的核心概念
Near Realtime(NRT) 近实时。数据提交索引后,立马就可以搜索到。
Cluster 集群,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具体相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。
Node 节点:存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。
Index 索引: 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。
索引作动词时,指索引数据、或对数据进行索引。
Type 类型:指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。
Document 文档:被索引的一条数据,索引的基本信息单元,以JSON格式来表示。
Shard 分片:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。分片的好处:
- 允许我们水平切分/扩展容量
- 可在多个分片上进行分布式的、并行的操作,提高系统的性能和吞吐量。
Replication 备份: 一个分片可以有多个备份(副本)。备份的好处:
- 高可用
- 扩展搜索的并发能力、吞吐量。搜索可以在所有的副本上并行运行。
对比RDBMS
ES安装
版本:elasticsearch:6.2.4,JDK:1.8
下载:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
解压:
tar -xvf elasticsearch-6.2.4.tar.gz -C /opt
目录结构:
asticsearch 7.2.1 目录结构如下:
- bin :脚本文件,包括 ES 启动 & 安装插件等等
- config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等
- lib : 类库
- logs : 日志文件
- modules : ES 所有模块,包括 X-pack 等
- plugins : ES 已经安装的插件。默认没有插件
- data : ES 启动的时候,会有该目录,用来存储文档数据。该目录可以设置
修改配置data和log路径:
编辑elasticsearch.yml配置文件,去掉path.data,path.log修改。
path.data= /var/lib/elasticsearch
path.log= /var/log/elasticsearch
修改elasticsearch.yml中的network.host:
放开network.host。修改成0.0.0.0或者是es服务器机器ip。如果不修改的话,有可能localhost能访问,但是通过ip访问不了。
network.host: 192.168.43.120
Jvm参数:
默认es配置使用1G堆内存,对于任何业务来说这个设置肯定是少了,可以在在config/jvm.options中调整。学习用的虚拟机没有这么大的内存,可以设置小点。
-Xms1g
-Xmx1g
Xms1g:无JVM版本限制的参数
8:Xms2g:应用到指定版本JVM的参数
8-:Xms2g:应用到指定版本及以上版本JVM的参数
8-9:Xms2g:应用到指定版本到版本JVM的参数
创建用户启动es(es不能以root用户启动):
#创建用户
useradd es
#设置密码
passwd es
#赋权
chown -R es /opt/elasticsearch-6.2.4/
chown -R es /var/log/elasticsearch/
chown -R es /var/lib/elasticsearch/
#切换用户
su es
进入bin目录下启动es
#后台运行ES
./elasticsearch -d
启动过程还有其他问题,可参照以下修改:
问题一:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决:修改切换到root用户修改配置limits.conf 添加下面两行
命令:vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
问题二:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048
问题三:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
以上配置完成后切换到es的用户,关闭防火墙。
然后,重新启动elasticsearch,即可启动成功。
浏览器输入:http://192.168.43.120:9200/
说明配置成功,es已经启动。
ES其他重要参数:
http.port: 9200-9300:
对外服务的http 端口, 默认 9200-9300 。可以为它指定一个值或一个区间,当为区间时会取用区间第一个可用的端口。
transport.tcp.port: 9300-9400:
节点间交互的端口, 默认 9300-9400 。可以为它指定一个值或一个区间,当为区间时会取用区间第一个可用的端口。
Discovery Config 节点发现配置:
ES中默认采用的节点发现方式是 zen(基于组播(多播)、单播)。在应用于生产前有两个重要参数需配置:
discovery.zen.ping.unicast.hosts: ["host1","host2:port","host3[portX-portY]"]
单播模式下,设置具有master资格的节点列表,新加入的节点向这个列表中的节点发送请求来加入集群。
discovery.zen.minimum_master_nodes: 1
这个参数控制的是,一个节点需要看到具有master资格的节点的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。
transport.tcp.compress: false
是否压缩tcp传输的数据,默认false
http.cors.enabled: true
是否使用http协议对外提供服务,默认true
http.max_content_length: 100mb
http传输内容的最大容量,默认100mb
node.master: true
指定该节点是否可以作为master节点,默认是true。ES集群默认是以第一个节点为master,如果该节点出故障就会重新选举master。
node.data: true
该节点是否存索引数据,默认true。
discover.zen.ping.timeout: 3s
设置集群中自动发现其他节点时ping连接超时时长,默认为3秒。在网络环境较差的情况下,增加这个值,会增加节点等待响应的时间,从一定程度上会减少误判。
discovery.zen.ping.multicast.enabled: false
是否启用多播来发现节点。
JVM heap dump path 设置:
生产环境中指定当发生OOM异常时,heap的dump path,好分析问题。在jvm.options中配置:
-XX:HeapDumpPath=/var/lib/elasticsearch
安装ES的可视化管理工具Kibana
下载Kibana,kibana与elasticsearch版本要一致。
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
解压:
tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz -C /opt
重新更改下config下的kibana.conf文件的
server.port: 5601
server.host: “虚拟机IP地址”
elasticsearch.url: "http://虚拟机地址:9200"即可。
在config/kibana.yml中配置 elasticsearch.url的值为 ES的访问地址
用root赋权,切换至es用户,启动:
./bin/kibana
访问地址:http://192.168.43.120:5601/
猜你喜欢
- 2024-11-14 「实战」 elasticsearch 写入速度提升的案例分享
- 2024-11-14 ElasticSearch & Kibana版本选择与安装
- 2024-11-14 elasticsearch 集群内部安全通信,避免数据泄露
- 2024-11-14 腾云忆想架构师分析Elasticsearch集群异常状态原因
- 2024-11-14 解决Elasticsearch SQL命令行启动报错|源创库
- 2024-11-14 ElasticSearch从入门到精通:基础知识
- 2024-11-14 Elasticsearch 7.x 之节点、集群、分片及副本
- 2024-11-14 查询ElasticSearch:用SQL代替DSL(es sql查询)
- 2024-11-14 ELKStack的安全性如何保障?(elk stack权威指南)
- 2024-11-14 ELK Stack系列之基础篇(六) - ES6常用插件的推荐安装
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)