ES特性
官网的介绍: https://www.elastic.co/cn/products/elasticsearch
速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。
- 分布式:横向扩展非常灵活
- 全文检索:基于lucene的强大的全文检索能力;
- 近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
- 高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据
- 模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。
- RESTful API:JSON + HTTP
ES架构
说明:
1 | Gateway是ES用来存储索引的文件系统,支持多种类型。 |
ES应用场景
1 | 维基百科 |
Elasticsearch的使用场景深入详解
场景—:使用Elasticsearch作为主要的后端
传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力。这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能,如统计。
Elasticsearch是提供持久存储、统计等多项功能的现代搜索引擎。
如果你开始一个新项目,考虑使用Elasticsearch作为唯一的数据存储,此种场景不支持包含频繁更新、事务(transaction)的操作。
例如新建一个博客系统使用es作为存储。
1)我们可以向ES提交新的博文;
2)使用ES检索、搜索、统计数据。
ES作为存储的优势:
如果一台服务器出现故障时会发生什么?你可以通过复制 数据到不同的服务器以达到容错的目的。
注意:整体架构设计时,需要我们权衡是否有必要增加额外的存储。
场景二:在现有系统中增加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存储(相当于关系据库中的一行/row数据)。
当在该网页上的搜索条件中输入“用户的类型”,店面网络应用程序通过Elasticsearch查询该信息。 Elasticsearch返回符合标准的产品documents,并根据你喜欢的方式来分类文档。 排序可以根据每个产品的被搜索次数所得到的相关分数,或任何存储在产品document信息,例如:最新最近加入的产品、平均得分,或者是那些插入或更新信息。 所以你可以只使用Elasticsearch处理搜索。这取决于同步机制来保持Elasticsearch获取最新变化。
场景三:使用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)。
出处:http://blog.csdn.net/laoyang360/article/details/52227541
ES的特点
可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起
对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES
Elasticsearch作为传统数据库的一个补充,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;
ES的核心概念
- ** Near Realtime(NRT)** 近实时。数据提交索引后,立马就可以搜索到。
- ** Cluster 集群**,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具有相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。
- ** Node 节点**:存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。
- ** Index 索引**: 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。
- ** Type 类型**:指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。
- ** Document 文档**:被索引的一条数据,索引的基本信息单元,以JSON格式来表示。
- ** Shard 分片**:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。分片的好处:
-允许我们水平切分/扩展容量
-可在多个分片上进行分布式的、并行的操作,提高系统的性能和吞吐量。
注意:分片数创建索引时指定,创建后不可改了。备份数可以随时改。
Replication 备份: 一个分片可以有多个备份(副本)。备份的好处:高可用。一个主分片挂了,副本分片就顶上去;扩展搜索的并发能力、吞吐量。搜索可以在所有的副本上并行运行。-高并发下副本也可搜索。
安装配置
略
注意:在linux 虚拟机上运行可能的失败问题
- 内存不够用,默认es配置使用1G堆内存,如果的你学习用的虚拟机没有这么大的内存,请在config/jvm.options中调整
- 可能会报如下的错误
1 | 问题一:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] |
** 后台运行ES **
使用守护进程运行:./elasticsearch -d
** ES 重要的配置参数 **
** 1、** 数据目录和日志目录,生成环境下应与软件分离
1 | path: |
** 2、** 所属的集群名,默认为 elasticsearch ,可修改:cluster.name: dddd
** 3、** 节点名称,默认为 UUID前7个字符,可自定义
** 4、** network.host IP绑定
** 5、** http.port: 9200-9300 对外服务的http 端口, 默认 9200-9300 。可以为它指定一个值或一个区间,当为区间时会取用区间第一个可用的端口。
** 6、** transport.tcp.port: 9300-9400 节点间交互的端口, 默认 9300-9400 。
** 7、** Discovery Config 节点发现配置
ES中默认采用的节点发现方式是 zen(基于组播(多播)、单播)。在应用于生产前有两个重要参数需配置:
1 | discovery.zen.ping.unicast.hosts: ["host1","host2:port","host3[portX-portY]"] 单播模式下,设置具有master资格的节点列表,新加入的节点向这个列表中的节点发送请求来加入集群 |
** 8、** Jvm heap 大小设置
生产环境中一定要在jvm.options中调大它的jvm内存。
** 9、** JVM heap dump path 设置
生产环境中指定当发生OOM异常时,heap的dump path,好分析问题。在jvm.options中配置:
-XX:HeapDumpPath=/var/lib/elasticsearch
** 10、** 其他配置
1 | transport.tcp.compress: false |