编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Elasticsearch的前生今世(elasticsearchsink)

wxchong 2024-11-14 18:38:16 开源技术 26 ℃ 0 评论

发展历程

许多年前,一个刚结婚的名叫 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 分片:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。分片的好处:

  1. 允许我们水平切分/扩展容量
  2. 可在多个分片上进行分布式的、并行的操作,提高系统的性能和吞吐量。

Replication 备份: 一个分片可以有多个备份(副本)。备份的好处:

  1. 高可用
  2. 扩展搜索的并发能力、吞吐量。搜索可以在所有的副本上并行运行。

对比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/

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表