zoukankan      html  css  js  c++  java
  • 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将定义该节点不是数据节点。

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

  • 相关阅读:
    [SDOI2012]任务安排
    JavaScript数据存储和深浅拷贝实际运用
    在VUE中使用Echarts
    JavaScript的原型链
    关于JavaScript的43道题①
    JS为什么是单线程的?
    HTTP协议②缓存
    HTTP协议①介绍
    树形结构的数据渲染(element-ui&VUE)
    js中定义变量之②var let const的区别
  • 原文地址:https://www.cnblogs.com/hanzeng1993/p/15074817.html
Copyright © 2011-2022 走看看