Elasticsearch 架构浅析
Elasticsearch是什么
Elasticsearch 是一个用java语言编写的分布式开源搜索引擎,内部集成了全文搜索引擎框架Apache Lucene,隐藏了Apache Lucene的复杂性,通过提供简单易用的RESTful API,从而实现对用户的开箱即用。
Elasticsearch适用场景
Elasticsearch 主要功能就是为了实时搜索,当前互联网、电商、企业门户等场景都有搜索的场景,如电商网站的商品搜索、媒体网站的博客文章搜索、企业日志分析等业务。Elasticsearch已成为当下最为流行的搜索框架,热度已远超Solr。
在国内各互联网电商巨头已普遍采用Elasticsearch做为搜索基础架构框架,在国外亦是如此,如IT届比较知名的Stack Overflow(讨论程序异常的论坛)、GitHub(全球知名代码托管平台,搜索几千亿行代码)。在数据分析方向Elasticsearch一样出重, 通过提供强大的聚合分析,可以对海量数据进行实时处理。
Elasticsearch 集群架构详解
一个Elasticsearch Cluster 由若干node组成,其中node可分为:master node、data node、Coordinating node,如下图所示:
图片1.png上图集群由一个master节点和2个data节点组成,每个节点上又分别分配了一个主分片和一个副本,主分片与副本不能放在同一个node,否则node出故障丢失数据时无法从副本恢复。
Master node: 负责集群中的元数据管理,索引的创建、删除、分片分配等,不负责检索与聚合。
Data node:数据存储节点,主要保存分片数据,如分片的CRUD、搜索、聚合。所以数据节点的负载一般较高,比较消耗CPU、IO、内存等,建议采用高配置的硬件。
Elasticsearch 集群安全
经常碰到某某公司由于Elasticsearch 集群安全配置不当导致数据丢失,给公司带来不可估量的损失,甚至导致公司倒闭破产,数据安全永远是使用Elasticsearch的第一考虑因素。以下列举了必要的措施以防止数据泄露。Elasticsearch 的安全主要通过X-pack来实现,
6.3版本及之后:已经集成在一起发布,无需额外安装,基础安全属于付费黄金版内容。
7 .1版本:基础安全免费,建议线上环境使用7.1及以上版本
- 不要将Elasticsearch暴露到公网,限制公共端口
1.1 限制9200端口:iptables -A INPUT -i eth0 -p tcp --destination-port 9200 -s {PUBLIC-IP-ADDRESS-HERE} -j DROP
1.2 限制9300——集群内部通信端口
iptables -A INPUT -i eth0 -p tcp --destination-port 9300 -s {PUBLIC-IP-ADDRESS-HERE} -j DROP
1.3 限制5601——kibana访问端口
iptables -A INPUT -i eth0 -p tcp --destination-port 5601 -s {PUBLIC-IP-ADDRESS-HERE} -j DROP
-
禁止批量删除,防止开发人员有意或者无意删除数据
-
定期备份数据
-
使用7.1及以上版本,X-PACK免费使用
Elasticsearch 版本选择
官方推荐当前最新版本往前推3-4个月对应的版本,不建议现网直接用最新版本,也不建议用太旧的版本,毕竟每次版本升级对性能、功能都是有所提升的,用太旧版本无法获得技术升级带来的红利。
Elasticsearch 内存配置
设置内存为机器内存的一半,但不要超过32G,否则会JVM会禁用内存指针压缩,导致内存浪费;内存最低配置也不能低于2G,否则会导致内存溢出。
Elasticsearch 核心功能
包括:索引、检索、聚合、分词、集群部署安全、备份与恢复等,后面会出文章一 一介绍主要核心功能。