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

centos安装elasticsearch

 

解决办法:

  修改/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]

centos安装elasticsearch

解决办法:

  修改/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/,如果出现:

centos安装elasticsearch

说明部署成功,其中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.0pluginshead文件
将解压后的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将定义该节点不是数据节点。

来自很多博客及网站的汇集

原文地址:https://www.cnblogs.com/hanzeng1993/p/15074817.html