架构介绍
先图为敬
序号 | 架构层 | 说明 |
---|---|---|
1 | Gateway | 它是ES用来存储索引的文件系统,支持多种类型 |
2 | Distributed Lucene Directory | 它是一个分布式的lucene框架,位于Gateway的上层,内部包含Lucene-core |
3 | 关键模块 | (index Module、SearchModul、Mapping)等下面专门讲 |
4 | Discovery | 它是ES的节点发现模块,不同机器上的ES节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure |
4 | Scripting | Scripting用来支持在查询语句中插入javascript、python等脚本语言,scripting模块负责解析这些脚本,使用脚本语句性能稍低 |
4 | 3rd Plugins | ES也支持多种第三方插件 |
5 | Transport | 它是ES的传输模块,支持多种传输协议,如 Thrift、memecached、http,默认使用http |
5 | JMX | JMX是java的管理框架,用来管理ES应用。略 |
6 | RESTful style API | 客户端可以通过RESTful接口和ES集群进行交互。各种API,略 |
6 | Java(Netty) | 看名字就懂了 |
先看下源码包结构:
几个关键的模块:
- Index Module:是根据索引创建的 modules (模块),并控制与 index(索引)相关的所有设置。
静态索引设置 | 备注 |
---|---|
index.number_of_shards | 索引应具有的主分片数。默认为 5。此设置只能在索引创建时设置。 |
index.routing_partition_size | 自定义路由值可以转发的目的分片数。默认为 1,只能在索引创建时设置。此值必须小于 index.number_of_shards,除非 index.number_of_shards 值也为 1。 |
index.shard.check_on_startup | 是否应在索引打开前检查分片是否损坏,false默认值 |
index.codec | 默认使用LZ4压缩方式存储数据,也可以设置为 best_compression,它使用 DEFLATE 方式以牺牲字段存储性能为代价来获得更高的压缩比例。 |
动态索引设置 | 备注 |
---|---|
index.number_of_replicas | 每个主分片的副本数。默认为 1。 |
index.auto_expand_replicas | 基于可用节点的数量自动分配副本数量。可以设置为以中划线分隔的最小值和最大值(例如 0-5)或设置最大值为 all(例如0-all)。默认为 false(即禁用此功能)。 |
index.refresh_interval | 执行刷新操作的频率,这使得索引的最近更改可以被搜索。默认为 1 秒。可以设置为 -1 以禁用刷新。 |
index.max_result_window | 用于索引搜索的 from+size 的最大值。默认为 10000。搜索请求占用堆内存和时间与 from+size 的大小成正比,有此限制是为了防止内存溢出。 |
index.max_rescore_window | 在搜索此索引中 rescore 的 window_size 的最大值。默认为 "index.max_result_window"设置的值即 10000。搜索请求占用堆内存和时间与 from+size 的大小成正比,有此限制是为了防止内存溢出。 |
index.blocks.read_only | 设置为 true 使索引和索引元数据为只读,false 为允许写入和元数据更改。 |
index.max_refresh_listeners | 索引的每个分片上可用的最大刷新侦听器数。这些侦听器用于实现 refresh=wait_for。 |
index.max_result_window | 用于索引搜索的 from+size 的最大值。默认为 10000。搜索请求占用堆内存和时间与 from+size 的大小成正比,有此限制是为了防止内存溢出。 |
索引模块控制与所有索引全局管理的与索引相关的设置,而不是在每个索引级别上可配置,可用的设置包括:
Circuit breaker 断路器对内存使用设置限制,以避免内存溢出异常
Fielddata cache 设置内存中fielddata缓存使用的堆数量的限制
Node query cache 配置用于缓存查询结果的堆数量
Indexing buffer 控制分配给索引进程的缓冲区的大小
Shard request cache 控制shard-level请求缓存的行为
Recovery 控制shard恢复过程中的资源限制
3. Search Module
4. Mapping
几个关键概念:
- Cluster:集群,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具有相