Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,能够使你快速,实时地存储,搜索和分析大量数据。他通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术。
基本概念1.近实时(NRT)
ElasticSearch是一个接近事实的搜索平台。这意味着从索引文档的时间到可搜索的时间都有一个小的延迟
2.群集(cluster)
cluster是一个或多个节点(服务器)的集合,他们一起保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一的名字来标识,默认是"ElasticSearch"。这个名字很重要,因为如果节点设置为通过这个名字加入集群,节点只能是集群的一部分。确保不要再不同的环境中重复使用相同的集群名称,否则可能会导致节点加入错误的群集。例如,你可以使用logging-dev,logging-stage以及logging-prod开发,分段和生产集群。
注意:只有一个节点的集群也是正确的。此外,您也可以拥有多个独立的群集,每个群集都有自己的唯一群集名称。
3.节点(node)
节点是作为集群一部分的单个服务器,存储数据并参与集群的索引和搜索功能。和集群一样,一个节点由一个名字来标识,默认情况下他是一个在启动时分配给节点的随机通用的唯一标识符(UUID)。如果你不需要默认值,你可以定义任何你想要的节点名称。此名称对于管理目的非常重要,你需要确定网络中的那些服务器对应于ElasticSearch集群中的哪些节点。
可以将节点配置为按集群名称加入特定的集群。默认情况下,每个节点都被设置为加入一个名为ElasticSearch的集群,这意味着如果你在网络上启动了多个节点,并且假设他们可以相互发现,那么他们将自动形成并加入一个名为ElasticSearch的集群。
在单个集群中,你可以拥有任意数量的节点。此外如果网络中没有其他ElasticSearch节点正在运行,则默认情况下启动单个节点将形成一个名为ElasticSearch的新单节点集群。
4.索引(index)
索引是具有相似特征的文档的集合。例如,你可以拥有客户数据的索引,产品目录的另一个索引以及订单数据的另一个索引。索引由名称标识(必须全部为小写),该名称用于在对索引文档进行索引,搜索,更新,和删除操作时引用索引。(在单个集群中,你可以根据需要定义多个索引。)
5.键入(TYPE)
在索引内,你可以定义一个或多个类型。类型是你的索引的逻辑类别/分区,其语义完全取决于你。通常,为具有一组公共字段的文档定义类型。例如,假设你运行博客平台并将所有数据存储在单个索引中。在此索引中,你可以为用户数定义类型,为博客数据定义一个类型,为定义数据定义另一个类型。
6.文档(DOCUMENT)
文档是可被索引的基本信息单元。例如,你可以为单个客户提供文档,为单个产品提供另一个文档,为单个订单提供另一个文档。这个文档使用JSON表示的,他是一个无处不在的互联网数据交换格式。
在索引/类型中,你可以根据需要存储多个文档。请注意尽管文档实际上驻留在索引中,但实际上文档必须被索引/分配给索引内的类型。
7.碎片和副本(Shards & Replicas)
索引可能潜在地存储大量数据,这些数据可能会超出单个节点的硬件限制。例如,占用1TB磁盘空间的十亿份文档的单个索引可能不适合单节点磁盘,或者坑你太慢而无法单独为来自单节点的搜索请求提供服务。
为了解决这个问题,ElasticSearch提供了将索引细分为多个碎片的能力。当你创建一个索引时,你可以简单的定义你想要的碎片数量。每个碎片本身都是一个功能齐全且独立的"索引",可以在集群中的任何节点上进行托管。
分拆是重要的两个主要原因:
①它允许你水平分割/缩放你的内容量
②它允许你跨越分片(可能在多个节点上)分发和并行操作,从而提高性能/吞吐量分片如何分布的机制以及文档如何聚合回搜索请求完全由ElasticSearch管理,对用户来说是透明的。
在任何时候都可能出现故障的网络/云环境中,非常有用并强烈建议有一个故障切换机制,以防碎片/节点以某种方式脱机或因任何原因而消失。为此,ElasticSearch允许你讲索引分片的一个或多个副本分成所谓的副本分片或副本。
复制很重要,主要有两个原因:
①他在碎片/节点失败的情况下提供高可用性。由于这个原因,中药的是要注意,副本分片永远不会被分配在与从其复制的原始/主分片相同的节点上。
②它允许你扩展你的搜索量/吞吐量,因为搜索可以在所有副本上并行执行。总而言之,每个索引可以分成多个碎片。索引可以被复制为零(意味着没有复制品)或更多次。一旦被复制,每个索引将具有主要碎片(从中复制的原始碎片)和副本碎片(主要碎片的副本)。在创建索引时,可以为每个索引定义分片和副本的数量。创建索引之后,你可以随时更改动态副本的数量,但不能随意更改碎片的数量。
默认情况下,ElasticSearch中的每个索引都分配了5个主分片和一个副本,这意味着如果你的集群中至少有两个节点,则索引将包含5个主分片和另外5个副本分片(1个完整副本)每个索引10个碎片。
ElasticSearch的安装
1.ElasticSearch需要的jdk版本至少是1.8的,所以安装之前先查看jdk版本号
java -version
echo $JAVA_HOME
2.下载ElasticSearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz
3.解压到指定目录
tar -zxvf elasticsearch-5.2.2.tar.gz -C /bigdata/
4.修改配置文件
编辑配置文件elasticsearch.yml(配置es的相关配置) vi /bigdata/elasticsearch-5.2.2/config/elasticsearch.yml 修改
cluster.name: ELK #集群名称,以此作为是否是同意集群的判断
node.name: es-01 #节点名称,以此作为集群中不同节点的分区条件
path.data: /data/es/data #数据存储地址
path.logs: /data/es/logs #日志存储地址
network.host: 192.168.1.34 #(主机地址)对外发布的网络地址
http.port: 9200 #ES默认监听的端口
discovery.zen.ping.unicast.hosts: ["Hanuman04"]
#discovery.zen.minimum_master_nodes: 1
#gateway.recover_after_nodes: 3
5.编辑配置文件jvm.options(jvm的相关配置)
IMPORTANT: JVM heap size #配置jvm的大小(默认配置是2G)
-Xms2g
-Xmx2g
编辑配置文件log4j2.properties(日志打印输出相关配置,一般不需要修改)
6.ElasticSearch启动
配置文件的参数也可以在启动的时候指定 例如:
bin/elasticsearch -Ehttp.port=19200
本地快速启动集群
bin/elasticsearch #默认的配置启动
bin/elasticsearch -Ehttp.port=19200 #修改端口号为19200启动
#看到started说明集群启动成功
查看节点时候组成集群,在浏览器中输入http://ip:port/_cat/nodes 例如: http:192.168.1.31:9200/_cat/nodes
查看集群相关信息,执行http://ip:port/_cluster/stats http://192.168.1.31:9200/_cluster/stats
ElasticSearch的参数属性
1.path.data和path.logs
path.data:数据保存的位置
path.logs:日志文件保存的位置
如果这些文件夹保留在其默认位置,则在更新ElasticSearch新版本时,这些文件夹可能被删除,所以在生产中需要更改数据和日志文件夹的位置。
path.data可以设置多个路径,在这种情况下,所有路径将可用于存储数据,(尽管属于单个分片的文件将全部存储在相同的数据路径中)
2.cluster.name
集群的名称,是否是一个某个集群中的节点的标志,默认为elasticsearch
3.node.name
默认情况下,ElasticSearch会随机产生一个UUID的第一个字符作为节点ID。请注意,节点ID是持久的并且在节点重新启东市不会更改,因此默认节点名称也不会更改。
4.bootstrap.memory_lock
对于您的节点的健康状况来说,没有任何一个JVM换出道磁盘是非常重要的,实现这一目标的方法是将bootstrap.memory_lock设置为true。
①禁用交换
大多数操作系统尝试尽可能多的为文件系统缓存使用内存,并急切地换出未使用的应用程序内存。这可能导致部分JVM堆被换出到磁盘。
性能和节点稳定性交换是非常糟糕的,应该不惜一切代价避免。他可能导致垃圾回收持续几分钟,而不是几毫秒,并可有可能导致节点缓慢响应甚至断开预计群的连接。
5.network.host
默认情况下,ElasticSearch只绑定到回送地址,例如127.0.0.1和[::1],折足以在服务器上运行单个开发节点。
其实,多个节点可以从一个节点上的相同安装目录启动,这可以用于测试ElasticSearch形成集群的能力,但他不是建议用于生产的配置。
为了与其他服务器上的节点进行通信并形成集群,你的节点需要绑定到非回环地址。
6.discovery.zen.ping.unicast.hosts
开箱即用,没有任何网络配置,ElasticSearch将绑定到可用的回环地址,并将扫描端口9300到9305尝试连接到运行在同一服务器上的其他节点。这提供了自动集群体验,而无需进行任何配置。
当需要与其他服务器上的节点组成集群时,你必须提供集群中其他节点的种子列表,这些节点可能是活的和可联系的。
7.discovery.zen.minimum_master_nodes
为防止数据丢失,配置改设置只管重要,以便每个符合主节点的节点都知道为了形成集群而必须可见的主节点的最小数量。
如果没有设置,那么遭受网络故障的集群就有可能将集群分成两个独立的集群-分裂的大脑-这将导致数据丢失。为避免脑裂,应将此设置设置为符合主数据节点的法定人数:
(master_eligible_nodes/2)+1
也就是说,如果有三个主要节点,则最小主节点赢设置为(3/2)+1或者2
输入代码