Elasticsearch概念及安装
概述:
-
节点 - 它指的是Elasticsearch的单个正在运行的实例。单个物理和虚拟服务器容纳多个节点,这取决于其物理资源的能力,如RAM,存储和处理能力。
-
集群 - 它是一个或多个节点的集合。 集群为整个数据提供跨所有节点的集合索引和搜索功能。
-
索引 - 它是不同类型的文档和文档属性的集合。索引还使用分片的概念来提高性能。 例如,一组文档包含社交网络应用的数据。
-
类型/映射 - 它是共享同一索引中存在的一组公共字段的文档的集合。 例如,索引包含社交网络应用的数据,然后它可以存在用于用户简档数据的特定类型,另一类型可用于消息的数据,以及另一类型可用于评论的数据。
-
文档 - 它是以JSON格式定义的特定方式的字段集合。每个文档都属于一个类型并驻留在索引中。每个文档都与唯一标识符(称为UID)相关联。
-
碎片 - 索引被水平细分为碎片。这意味着每个碎片包含文档的所有属性,但包含的数量比索引少。水平分隔使碎片成为一个独立的节点,可以存储在任何节点中。主碎片是索引的原始水平部分,然后这些主碎片被复制到副本碎片中。
-
副本 - Elasticsearch允许用户创建其索引和分片的副本。 复制不仅有助于在故障情况下增加数据的可用性,而且还通过在这些副本中执行并行搜索操作来提高搜索的性能。
安装参考文档:
ELK官网:https://www.elastic.co/
ELK官网文档:https://www.elastic.co/guide/index.html
ELK中文手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ELK中文社区:https://elasticsearch.cn/
ELK-API :https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html
ES安装
将下载的安装包上传到centos,或者直接在centos使用wget命令下载。
1、解压: unzip elasticsearch-5.1.1.zip
进入config文件夹: cd config
编辑elasticserach.yml配置文件: vim elasticserach.yml
#配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。 cluster.name: my-es #节点名称 node.name: node-1
discovery.zen.minimum_master_nodes: 2
#指定集群中的节点中有几个有master资格的节点。
#对于大集群可以写3个以上。
discovery.zen.ping.timeout: 40s
#默认是3s,这是设置集群中自动发现其它节点时ping连接超时时间,
#为避免因为网络差而导致启动报错,我设成了40s。
discovery.zen.ping.multicast.enabled: false
#设置是否打开多播发现节点,默认是true。
network.bind_host: 192.168.137.100
#设置绑定的ip地址,这是我的master虚拟机的IP。
network.publish_host: 192.168.137.100
#设置其它节点和该节点交互的ip地址
#设置索引数据的存储路径 path.data: /usr/local/elasticsearch/data #设置日志的存储路径 path.logs: /usr/local/elasticsearch/logs #设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中 network.host: 0.0.0.0 #设置对外服务的http端口 http.port: 9200 #设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["127.0.0.1","10.10.10.34:9200"]
将文件中的network.host注释放开 然后将ip修改为0.0.0.0
下边的http.port注释放开 保存并退出.
注意:
补齐必要的目录
mkdir -p /usr/local/elasticsearch/data
mkdir -p /usr/local/elasticsearch/logs (目录可能已经存在,需先确定清楚)
2、安装jdk1.8
要安装elasticsearch官方建议使用jdk1.8的版本,所以先安装并部署好jdk,关于jdk的部署参考网上其他资料。
3、运行
cd bin
./elasticsearch
可能会出现错误,下面列出常见的错误:
(1)elasticsearch不能以root权限来运行,会出现这种错误:Exception in thread "main"
java.lang.RuntimeException: don't run elasticsearch as root
解决办法:
因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户
第一步:liunx创建新用户 adduser XXX 然后给创建的用户加密码 passwd XXX 输入两次密码。
第二步:切换刚才创建的用户 su XXX 然后执行elasticsearch 会显示Permission denied 权限不足。
第三步:给新建的XXX赋权限,chmod 777 * 这个不行,因为这个用户本身就没有权限,肯定自己不能给自己付权限。所以要用root用户登录付权限。
第四步:root给XXX赋权限,chown -R XXX /你的elasticsearch安装目录。
(2)提示:Max number of threads for elasticsearch too low
解决办法:
修改/etc/security/limits.conf
vim /etc/security/limits.conf
添加一行:xxx - nproc 2048
其中"xxx"为启动elasticsearch的用户
(3)提示:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决办法:
修改/etc/sysctl.conf
vim /etc/sysctl.conf
添加一行:vm.max_map_count=262144,添加完了执行:sysctl -p,看结果是不是vm.max_map_count = 262144
成功运行的结果是会出现started即可。
可能出现localhost:9200 或者127.0.0.1:9200都能访问的情况,但是根据IP:9200就是访问不了。 此时修改:elasticsearch.yaml文件
network.host: 192.168.1.100 即可根据IP访问
(4)无法安装插件license
bin/elasticsearch-plugin install license
ERROR: Unknown plugin license
原因:ElasticSearch5.0.0以后插件命令已经改变
解决方案:使用最新命令安装所有插件
bin/elasticsearch-plugin install x-pack
5、测试运行
在浏览器输入:
http://192.168.1.100:9200/,如果出现:
说明部署成功,其中cluster_name:my-demo,是我修改了默认的cluster_name。
1.运行elasticsearch :
编辑 /home/zkpk/elasticsearch-1.7.3/bin/elasticsearch.in.sh, 设置 ES_MIN_MEM和ES_MAX_MEM,确保二者数值一致,或者可以在启动es时指定,
[zkpk@master ~]$ cd ~/elasticsearch-node1/bin
[zkpk@master bin]$ ./elasticsearch -Xms512m -Xmx512m
若想让es后台运行,则
[zkpk@master bin]$ ./elasticsearch -d -Xms512m -Xmx512m
2.关闭elasticsearch:
前台运行:可以通过”CTRL+C”组合键来停止运行
后台运行,可以通过”kill -9 进程号”停止.也可以通过REST API接口:
curl -XPOST http://主机IP:9200/_cluster/nodes/_shutdown
来关闭整个集群,通过:
curl -XPOST http://主机IP:9200/_cluster/nodes/节点标示符(如es-node1)/_shutdown
来关闭单个节点.
ES插件安装
1、安装head
elasticsearch-head是一个界面化的集群操作和管理工具,可以对集群进行傻瓜式操作。你可以通过插件把它集成到es(首选方式),也可以安装成一个独立webapp。 es-head主要有三个方面的操作: a、显示集群的拓扑,并且能够执行索引和节点级别操作 b、搜索接口能够查询集群中原始json或表格格式的检索数据 c、能够快速访问并显示集群的状态 有一个输入窗口,允许任意调用RESTful API。这个接口包含几个选项,可以组合在一起以产生有趣的结果; 请求方法(get、put、post、delete),查询json数据,节点和路径 支持JSON验证器 支持重复请求计时器 支持使用javascript表达式变换结果 收集结果的能力随着时间的推移(使用定时器),或比较的结果,能力图表转换后的结果在一个简单的条形图(包括时间序列)
1), 直接安装
./bin/plugin install mobz/elasticsearch-head
2) ,zip包安装
https://github.com/mobz/elasticsearch-head下载zip 解压 建立elasticsearch-2.4.0\plugins\head文件 将解压后的elasticsearch-head-master文件夹下的文件copy到head 运行es
安装验证:
2, 安装其他插件
$ ${ES_HOME}/bin/plugin --install lukas-vlcek/bigdesk # 安装完成访问:http://localhost:9200/_plugin/bigdesk/#nodes $ ${ES_HOME}/bin/plugin -install royrusso/elasticsearch-HQ # 安装完成访问:http://localhost:9200/_plugin/HQ/ $ ${ES_HOME}/bin/plugin -install lmenezes/elasticsearch-kopf # 安装完成访问:http://localhost:9200/_plugin/kopf/#!/cluster
Elasticsearch由多个模块组成,这些模块负责其功能。 这些模块有以下两种类型的设置 -
-
静态设置 - 在启动Elasticsearch之前,需要在配置文件(
elasticsearch.yml
)中配置这些设置。需要更新集群中的所有关注节点以反映这些设置的更改。 -
动态设置 - 这些设置可以在实时Elasticsearch上设置。
我们将在本章的以下部分讨论Elasticsearch中的每个模块。
集群级路由和碎片分配
集群级别设置决定将碎片分配给不同节点,以及将碎片重新分配给平衡集群。这些是以下设置来控制碎片分配 -
集群级碎片分配-
-
cluster.routing.allocation.enable
可能的值及说明 -all
- 此默认值允许为所有种类的碎片分配碎片。primaries
- 这允许只为主碎片分配碎片。new_primaries
- 这允许只为新索引的主碎片分配碎片。none
- 这不允许任何碎片分配。
-
cluster.routing.allocation.node_concurrent_recoveries
- 一个数字值(默认为2
),它限制了并发碎片恢复的数量。 -
cluster.routing.allocation.node_initial_primaries_recoveries
- 一个数字值(默认为4
),它限制了并行初始初级恢复的数量。 -
cluster.routing.allocation.same_shard.host
- 布尔值(默认为false
), 它限制了同一物理节点中同一碎片的多个副本的分配。 -
indices.recovery.concurrent _streams
- 一个数字值(默认为3
),它控制在从对等体碎片恢复碎片时每个节点的开放网络流的数量。 -
indices.recovery.concurrent_small_file_streams
- 一个数字值(默认为2
),这控制了在碎片恢复时对于小于5mb
的小文件的每个节点的开放流的数量。 -
cluster.routing.rebalance.enable
可能的值及说明 -all
- 此默认值允许平衡所有种类的碎片。primaries
- 这允许只对主碎片进行碎片平衡。replicas
- 这允许只对副本碎片进行碎片平衡。none
- 这不允许任何类型的碎片平衡。
-
cluster.routing.allocation.allow_rebalance
可能的值及说明 -always
- 此默认值始终允许重新平衡。indices_primaries _active
- 这允许在分配集群中的所有主碎片时进行重新平衡。Indices_all_active
- 这允许在分配所有主碎片和副本碎片时重新平衡。
-
cluster.routing.allocation.cluster _concurrent_rebalance
- 一个数字值(默认为2
), 这限制了集群中的并发碎片平衡数。 -
cluster.routing.allocation.balance.shard
- 一个浮点数值(默认为0.45f
),这定义了在每个节点上分配的碎片的权重因子。 -
cluster.routing.allocation.balance.index
- 一个浮点数值(默认为0.55f
),这定义了在特定节点上分配的每个索引的碎片数量的比率。 -
cluster.routing.allocation.balance.threshold
- 一个浮点数值(默认为1.0f
),这定义了在特定节点上分配的每个索引的碎片数量的比率。 -
cluster.routing.allocation .balance.threshold
- 非负浮点值(默认为1.0f
)这是应该执行的操作的最小优化值。
基于磁盘的碎片分配
设置 | 可能的值 | 描述 |
---|---|---|
cluster.routing.allocation.disk.threshold_enabled | 布尔值(默认为true ) |
这启用和禁用磁盘分配决策程序。 |
cluster.routing.allocation.disk.watermark.low | 字符串值(默认为85% ) |
这表示磁盘的最大使用; 此后,无法将其他碎片分配给该磁盘。 |
cluster.routing.allocation.disk.watermark.high | 字符串值(默认为90% ) |
这表示分配时的最大使用量; 如果在分配时达到这一点,Elasticsearch将把该碎片分配给另一个磁盘。 |
cluster.info.update.interval | 字符串值(默认30s ) |
这是磁盘用法,检查两个时间之间的间隔。 |
cluster.routing.allocation.disk.include_relocations | 布尔值(默认为true ) |
这决定在计算磁盘使用率时是否考虑当前分配的分片。 |
发现
此模块帮助集群发现和维护其中的所有节点的状态。在从集群添加或删除节点时集群的状态发生更改。集群名称设置用于在不同集群之间创建逻辑差异。有一些模块,可以帮助您使用云供应商提供的API -
- Azure发现
- EC2发现
- Google计算引擎发现
- Zen发现
网关
此模块在整个群集重新启动时维护群集状态和分片数据。以下是此模块的静态设置 -
设置 | 可能的值 | 描述 |
---|---|---|
gateway.expected_nodes | 数值(默认为0 ) |
预期在群集中用于恢复本地碎片的节点数。 |
gateway.expected_master_nodes | 数值(默认为0 ) |
在开始恢复之前预期在群集中的主节点数。 |
gateway.expected_data_nodes | 数值(默认为0 ) |
开始恢复之前群集中预期的数据节点数。 |
gateway.recover_after_time | 字符串值(默认为5m ) |
这用于指定恢复进程将等待启动的时间,而不考虑在集群中加入的节点数。1. gateway.recover_after_nodes 2. gateway.recover_after_master_nodes 3. gateway.recover_after_data_nodes |
HTTP
此模块管理HTTP客户端和Elasticsearch API之间的通信。可以通过将http.enabled
的值更改为false
来禁用此模块。 以下是控制此模块的设置(在elasticsearch.yml
中配置)
编号 | 设置 | 描述 |
---|---|---|
1 | http.port | 访问Elasticsearch的端口,范围为9200-9300 。 |
2 | http.publish_port | 此端口用于HTTP客户端,并且在防火墙的情况下也很有用。 |
3 | http.bind_host | http服务的主机地址。 |
4 | http.publish_host | http客户端的主机地址。 |
5 | http.max_content_length | 这是http请求中内容的最大值。其默认值为100mb 。 |
6 | http.max_initial_line_length | 这是URL的最大值,其默认值为4kb 。 |
7 | http.max_header_size | 这是最大http报头大小,其默认值为8kb 。 |
8 | http.compression | 这启用或禁用对压缩的支持,其默认值为false 。 |
9 | http.pipelinig | 这将启用或禁用HTTP通道线。 |
10 | http.pipelining.max_events | 这会限制在关闭HTTP请求之前排队的事件数。 |
索引
此模块维护对每个索引全局设置的设置。以下设置主要与内存使用有关 -
断路器
这用于防止操作引起OutOfMemroyError
。 该设置主要限制JVM堆大小。 例如,indices.breaker.total.limit
设置,JVM堆的默认为70%
。
Fielddata缓存
这主要用于在字段上聚合时。建议分配它足够的内存。 可以使用indices.fielddata.cache.size
设置控制用于字段数据高速缓存的内存量。
节点查询缓存
此内存用于缓存查询结果。此缓存使用最近最少使用(LRU)逐出策略。 Indices.queries.cahce.size
设置控制此缓存的内存大小。
索引缓冲区
此缓冲区将新创建的文档存储在索引中,并在缓冲区已满时将其刷新。设置为indices.memory.index_buffer_size
控制为此缓冲区分配的堆的大小。
Shard请求缓存
此缓存用于存储每个分片的本地搜索数据。缓存可以在创建索引期间启用,也可以通过发送URL参数来禁用。
Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true
索引恢复
它在恢复过程中控制资源。以下是一些设置
设置 | 默认值 |
---|---|
indices.recovery.concurrent_streams | 3 |
indices.recovery.concurrent_small_file_streams | 2 |
indices.recovery.file_chunk_size | 512kb |
indices.recovery.translog_ops | 1000 |
indices.recovery.translog_size | 512kb |
indices.recovery.compress | true |
indices.recovery.max_bytes_per_sec | 40mb |
TTL间隔
生存时间(TTL)间隔定义文档的时间,之后文档将被删除。 以下是控制此过程的动态设置 -
设置 | 默认值 |
---|---|
indices.ttl.interval | 60 |
indices.ttl.bulk_size | 1000 |
节点
每个节点有一个选项是否是数据节点。可以通过更改node.data
设置更改此属性。将值设置为false
将定义该节点不是数据节点。
来自很多博客及网站的汇集