zoukankan      html  css  js  c++  java
  • Elasticsearch + Kibana + X-Pack + Head集群安装部署

    1. 概述

    近期使用到Elasticsearch作为数据的存储与检索引擎,初期安装了2.4.0版本,找对应版本的插件还着实费了些时间。后由于引入spark的版本和Elasticsearch 2.4.0版本不匹配,所以决定将Elasticsearch 升级到5.5.0版本。

    升级之后的Elasticsearch感觉在各方面都便捷很多:

    1. 首先Elastic帮我们把各个组件的版本进行了统一,也把原来比较分散的组件进行了集成,比如在5.x之前各种单独的组件(Shield, Watcher, Marvel, Graph, Reporting)现在都集成到X-Pack中,Sense也集成进了Kibana中。
    2. 其次是数据类型做了部分改变,Elasticsearch5.0率先集成了Lucene6版本,性能得到很大的提升。据说与之前版本相比,磁盘空间少一半;索引时间少一半;查询性能提升25%;IPV6也支持了。
    3. ELK(Elasticsearch、Logstash、Kibana)组合中又新增一个开源项目Beats, 从此可以改名:ELKB

    2. 部署规划

    部署环境此处我使用的windows,但整个部署过程也同样适用于Linux。

    2.1 Elasticsearch节点类型介绍

    当我们启动Elasticsearch的实例,就会启动至少一个节点。相同集群名的多个节点的连接就组成了一个集群。

    在默认情况下,集群中的每个节点都可以处理http请求和集群节点间的数据传输,集群中所有的节点都知道集群中其他所有的节点,可以将客户端请求转发到适当的节点。

    节点有以下几个类型:

    1. 主(master)节点
      node.master设置为True(默认)的时候,它有资格被选作为主节点,控制整个集群。

    2. 数据(data)节点
      在一个节点上node.data设置为True(默认)的时候。该节点保存数据和执行数据相关的操作,如增删改查,搜索,和聚合。

    3. 客户端(client)节点
      当一个节点的node.master和node.data都设置为false的时候,它既不能保持数据也不能成为主节点,该节点可以作为客户端节点,可以响应用户的情况,把相关操作发送到其他节点。

    4. 部落(tribe)节点
      当一个节点配置tribe.*的时候,它是一个特殊的客户端,它可以连接多个集群,在所有连接的集群上执行搜索和其他操作。

    Elasticsearch的data node除了放数据以外,也可以兼任master和client的角色,对于一个规模较大,用户较多的集群,master和client在一些极端使用情况下可能会有性能瓶颈甚至内存溢出,从而使得共存的data node故障。data node的故障恢复涉及到数据的迁移,对集群资源有一定消耗,容易造成数据写入延迟或者查询减慢。

    如果将master和client独立出来,一旦出现问题,重启后几乎是瞬间就恢复的,对用户几乎没有任何影响。另外将这些角色独立出来的以后,也将对应的计算资源消耗从data node剥离出来,更容易掌握data node资源消耗与写入量和查询量之间的联系,便于做容量管理和规划。

    2.1.1 主(master)节点说明

    主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。

    默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。

    创建一个独立的主节点只需在配置文件中添加如下内容:

    node.master: true
    node.data: false

    为了防止数据丢失,配置discovery.zen.minimum_master_nodes设置是至关重要的(默认为1),每个主节点应该知道形成一个集群的最小数量的主资格节点的数量。

    discovery.zen.minimum_master_nodes解释如下:

    该处解释的即通常我们所说的脑裂问题。假设我们有一个集群,有3个主资格节点,当网络发生故障的时候,就有可能其中一个节点不能和其他节点进行通信了。这个时候,当discovery.zen.minimum_master_nodes设置为1的时候,就会分成两个小的独立集群,当网络好的时候,就会出现数据错误或者丢失数据的情况。当discovery.zen.minimum_master_nodes设置为2的时候,一个网络中有两个主资格节点,可以继续工作,另一部分,由于只有一个主资格节点,则不会形成一个独立的集群,这个时候当网络恢复的时候,节点又会重新加入集群。

    设置这个值的原则是:

    (master_eligible_nodes / 2)+ 1

    这个参数也可以动态设置:

    PUT localhost:9200/_cluster/settings
    {
      “transient”: {
        “discovery.zen.minimum_master_nodes”: 2
      }
    }
    

    2.1.2 数据(data)节点说明

    数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。数据节点的配置如下:

    node.master: false
    node.data: true

    数据节点路径设置,每一个主节点和数据节点都需要知道分片,索引,元数据的物理存储位置,path.data默认位为 $ES_HOME/data,可以通过配置文件 elasticsearch.yml进行修改,例如:

    path.data: /data/es/data/

    这个设置也可以在命令行上执行,例如:

    ./bin/elasticsearch –path.data /data/es/data

    这个路径最好进行单独配置,这样Elasticsearch的目录和数据的目录就会分开。当删除了Elasticsearch主目录的时候,不会影响到数据。通过rpm安装默认是分开的。

    数据目录可以被多个节点共享,甚至可以属于不同的集群,为了防止多个节点共享相同的数据路径,可以在配置文件elasticsearch.yml中添加:

    node.max_local_storage_nodes: 1

    注意:在相同的数据目录不要运行不同类型的节点(例如:master, data, client)这很容易导致意外的数据丢失。

    2.1.3 客户端(client)节点说明

    当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。

    警告:添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用。配置如下:

    node.master: false
    node.data: false

    2.1.4 部落(tribe)节点说明

    部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据,部落节点在elasticsearch.yml中的配置如下:

    tribe:
    t1: 
        cluster.name:   cluster_one
    t2: 
        cluster.name:   cluster_two
    

    T1和T2是任意的名字代表连接到每个集群。上面的示例配置两集群连接,名称分别是T1和T2。默认情况下部落节点通过广播可以做为客户端连接每一个集群。大多数情况下,部落节点可以像单节点一样对集群进行操作。

    注意:以下操作将和单节点操作不同,如果两个集群的名称相同,部落节点只会连接其中一个。由于没有主节点,当设置local为true事,主节点的读操作会被自动的执行,例如:集群统计,集群健康度。主节点级别的写操作将被拒绝,这些应该是在一个集群进行。部落节点可以通过块(block)设置所有的写操作和所有的元数据操作,例如:

    tribe:
    blocks:
        write:    true
        metadata: true
    

    部落节点可以也可以在选中的索引块中进行配置,例如:

    tribe:
    blocks:
        write.indices:    hk*,ldn*
        metadata.indices: hk*,ldn*
    

    当多个集群有相同的索引名的时候,默认情况下,部落的节点将选择其中一个。这可以通过tribe.on_conflict setting进行配置,可以设置排除那些索引或者指定固定的部落名称。

    2.2 其他组件介绍

    以上对Elasticsearch各节点的作用了解以后,下面对其他需要安装的组件做简单介绍。

    2.2.1 Kibana

    Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。

    Kibana可以安装在任意一个节点上,也可每个节点都进行安装。不过一般建议是安装在客户端(client)节点之上,对Elasticsearch进行监控和操作。

    2.2.2 X-Pack

    X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中。在Elasticsearch 5.0.0之前,您必须安装单独的Shield,Watcher和Marvel插件才能获得在X-Pack中所有的功能。在Elasticsearch 5版本之后,一般情况下只需要安装一个官方推荐的X-pack扩展包即可。

    注意:必须在集群中的所有节点安装X-Pack插件。

    2.2.3 Head

    Head是Elasticsearch的一个前端插件,可以很方便的查看ES的运行状态和数据。

    Head插件建议安装在客户端节点上。

    2.3 节点规划

    测试环境选择了4个节点,1个主(master)节点,2个数据(data)节点,1个客户端(client)节点。

    如果你的是多master节点,只需要增加master节点,修改下discovery.zen.minimum_master_nodes参数即可。

    节点 IP 角色 安装组件
    node1 192.168.1.91 master-1 es(含x-pack)
    node2 192.168.1.92 data-1 es(含x-pack)
    node3 192.168.1.93 data-2 es(含x-pack)
    node4 192.168.1.94 client-1 es(含x-pack)、kibana(含x-pack)、head

    3. Elasticsearch安装

    3.1 JDK安装

    每个节点都必须安装jdk环境,安装过程略。

    3.2 Elasticsearch环境安装

    下载Elasticsearch安装包并解压。

    修改配置文件 elasticsearch-5.5.0/config/elasticsearch.yml.

    3.2.1 配置master-1

    # 集群名称,保证唯一
    cluster.name: duoduozb-es
    # 节点名称,仅仅是描述名称,用于在日志中区分
    node.name: master-1
    # 节点描述,可默认
    node.attr.rack: r1
    # 是否是master节点,master节点存放元数据
    node.master: true
    # 是否是data数据节点,data数据节点存放数据
    node.data: false
    # 是否是ingest节点,ingest节点可以在数据真正进入index前,通过配置pipline拦截器对数据ETL
    node.ingest: false
    # 数据的存放路径,可挂载多个盘
    path.data: C:/bigdata/elasticsearch/es-data/data
    # 日志的存放路径
    path.logs: C:/bigdata/elasticsearch/es-data/logs
    # 当前节点绑定ip
    network.host: 0.0.0.0
    # 对外提供服务的端口
    http.port: 9200
    # 集群间通讯端口
    transport.tcp.port: 9300
    # 设置集群自动发现机器IP集合
    discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"]
    # 为了避免脑裂,集群节点数量最少为候选主节点数量 半数+1
    discovery.zen.minimum_master_nodes: 1    
    

    3.2.2 配置data-1

    # 集群名称,保证唯一
    cluster.name: duoduozb-es
    # 节点名称,仅仅是描述名称,用于在日志中区分
    node.name: data-1
    # 节点描述,可默认
    node.attr.rack: r2
    # 是否是master节点,master节点存放元数据
    node.master: false
    # 是否是data数据节点,data数据节点存放数据
    node.data: true
    # 是否是ingest节点,ingest节点可以在数据真正进入index前,通过配置pipline拦截器对数据ETL
    node.ingest: true
    # 数据的存放路径,可挂载多个盘
    path.data: C:/bigdata/elasticsearch/es-data/data
    # 日志的存放路径
    path.logs: C:/bigdata/elasticsearch/es-data/logs
    # 当前节点绑定ip
    network.host: 0.0.0.0
    # 对外提供服务的端口
    http.port: 9200
    # 集群间通讯端口
    transport.tcp.port: 9300
    # 设置集群自动发现机器IP集合
    discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"]
    # 为了避免脑裂,集群节点数量最少为候选主节点数量 半数+1
    discovery.zen.minimum_master_nodes: 1 
    

    3.2.3 配置data-2

    # 集群名称,保证唯一
    cluster.name: duoduozb-es
    # 节点名称,仅仅是描述名称,用于在日志中区分
    node.name: data-2
    # 节点描述,可默认
    node.attr.rack: r3
    # 是否是master节点,master节点存放元数据
    node.master: false
    # 是否是data数据节点,data数据节点存放数据
    node.data: true
    # 是否是ingest节点,ingest节点可以在数据真正进入index前,通过配置pipline拦截器对数据ETL
    node.ingest: true
    # 数据的存放路径,可挂载多个盘
    path.data: C:/bigdata/elasticsearch/es-data/data
    # 日志的存放路径
    path.logs: C:/bigdata/elasticsearch/es-data/logs
    # 当前节点绑定ip
    network.host: 0.0.0.0
    # 对外提供服务的端口
    http.port: 9200
    # 集群间通讯端口
    transport.tcp.port: 9300
    # 设置集群自动发现机器IP集合
    discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"]
    # 为了避免脑裂,集群节点数量最少为候选主节点数量 半数+1
    discovery.zen.minimum_master_nodes: 1 
    

    3.2.4 配置client-1

    # 集群名称,保证唯一
    cluster.name: duoduozb-es
    # 节点名称,仅仅是描述名称,用于在日志中区分
    node.name: client-1
    # 节点描述,可默认
    node.attr.rack: r4
    # 是否是master节点,master节点存放元数据
    node.master: false
    # 是否是data数据节点,data数据节点存放数据
    node.data: false
    # 是否是ingest节点,ingest节点可以在数据真正进入index前,通过配置pipline拦截器对数据ETL
    node.ingest: false
    # 数据的存放路径,可挂载多个盘
    path.data: C:/bigdata/elasticsearch/es-data/data
    # 日志的存放路径
    path.logs: C:/bigdata/elasticsearch/es-data/logs
    # 当前节点绑定ip
    network.host: 0.0.0.0
    # 对外提供服务的端口
    http.port: 9200
    # 集群间通讯端口
    transport.tcp.port: 9300
    # 设置集群自动发现机器IP集合
    discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"]
    # 为了避免脑裂,集群节点数量最少为候选主节点数量 半数+1
    discovery.zen.minimum_master_nodes: 1 
    

    3.3 浏览器查看

    依次启动各节点Elasticsearch服务:

    elasticsearch-5.5.0/bin/elasticsearch

    使用地址 http://192.168.1.94:9200/ 进行集群访问。显示信息如下:

    {
      "name" : "client-1",
      "cluster_name" : "duoduozb-es",
      "cluster_uuid" : "blJJr58QRa2L3YWJ7twkRg",
      "version" : {
        "number" : "5.5.0",
        "build_hash" : "260387d",
        "build_date" : "2017-06-30T23:16:05.735Z",
        "build_snapshot" : false,
        "lucene_version" : "6.6.0"
      },
      "tagline" : "You Know, for Search"
    }
    

    4. Kibana安装

    4.1 Kibana安装配置

    下载Kibana安装包并解压。

    修改配置文件 config/kibana.yml.

    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.url: "http://192.168.1.94:9200"
    kibana.index: ".kibana"
    

    4.2 浏览器查看

    启动Kibana服务:

    bin/kibana

    使用地址 http://192.168.1.94:5601/ 进行访问。

    image

    5. X-Pack安装

    5.1 Elasticsearch安装X-Pack

    为所有节点的Elasticsearch安装X-Pack插件。

    bin/elasticsearch-plugin install x-pack

    注意:中途会让你输入两次 Y 表示确认安装。

    如果卸载,请执行:

    bin/elasticsearch-plugin remove x-pack

    5.2 Kibana安装X-Pack

    为客户端节点的Kibana安装X-Pack插件。

    bin/kibana-plugin install x-pack

    如果卸载,请执行:

    bin/kibana-plugin remove x-pack

    5.3 自定义密码

    安装完成X-Pack之后重启Elasticsearch和Kibana。再次登陆Elasticsearch和Kibana,会提示需要输入用户名和密码。

    默认用户名:elastic
    默认密码:changeme

    其中内置了三个账号,分别是:

    username role 权限
    elastic superuser 内置的超级用户
    kibana kibana_system 用户kibana用来连接elasticsearch并与之通信。Kibana服务器以该用户身份提交请求以访问集群监视API和 .kibana索引。不能访问index。
    logstash_system logstash_system 用户Logstash在Elasticsearch中存储监控信息时使用

    可通过以下操作自定义设置各个账号的密码:

    ./bin/x-pack/setup-passwords interactive

    也可通过以下操作进行自动生成密码:

    ./bin/x-pack/setup-passwords auto

    注意:以上设置适用于linux,我在windows安装发现没有上述命令。

    在windows上,可以通过登录Kibana进行密码的修改。
    image
    image

    注意:设置完Kibana账号密码以后,需要重新启动Kibana服务。

    启动Kibana服务之前,还有一项重要的工作,修改kibana.yml,设置连接elasticsearch的用户名和密码,否则如果你已经修改了elasticsearch的默认用户名和密码,启动kibana服务时会提示连接不上elasticsearch的错误。

    elasticsearch.username: "elastic"
    elasticsearch.password: "elastic"

    5.4 启用禁用X-Pack

    默认情况下,所有X-Pack功能都被启用;通过修改elasticsearch.yml, kibana.yml以及logstash.yml配置文件;您可以启用或禁用特定的X-Pack功能。

    设置 描述
    xpack.graph.enabled 设置为false禁用X-Pack图形功能
    xpack.ml.enabled 设置为false禁用X-Pack机器学习功能
    xpack.monitoring.enabled 设置为false禁用X-Pack监视功能
    xpack.reporting.enabled 设置为false禁用X-Pack报告功能
    xpack.security.enabled 设置为false禁用X-Pack安全功能
    xpack.watcher.enabled 设置false为禁用观察器

    6. Head安装

    Head主要是可以用比较直观的方式来查看Elasticsearch的所有索引和内容,在5.x中这部分功能被集成在x-pack里,官方已经不太推荐使用,所以如果安装了x-pack,就没必要再次安装head了。如果不想安装x-pack,需要单独安装head插件,在此记录下安装步骤。

    6.1 官方介绍

    elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,可以通过插件把它集成到es,很方便对es进行各种操作的客户端。

    github地址:https://github.com/mobz/elasticsearch-head

    6.2 安装步骤

    elasticsearch5.0以上版本不支持直接安装head插件,需要启动一个服务。

    因为head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。

    (1) 下载nodejs: https://nodejs.org/en/download/ 此处选择v8.12.0版本。

    nodejs安装完成后,npm会被自动安装。可以使用 node -vnpm -v 查看版本。

    (2) 使用npm安装grunt:

    npm install -g grunt-cli

    (3) 在elasticsearch-head-master目录下,运行命令:

    npm install

    (4) 编辑elasticsearch-5.5.0/config/elasticsearch.yml,加入以下内容:

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

    (6) 在elasticsearch-head-master/目录下,运行启动命令:

    grunt server

    (7) 浏览器访问:
    如果elasticsearch未安装x-pack,是不需要步骤(4)的,以上步骤完成以后,在浏览器输入以下地址访问:

    http://192.168.1.94:9100/

    但是前面我们安装了x-pack,并重新设置了密码。此时必须有步骤(4),并且浏览器中访问形式如下:

    http://192.168.1.94:9100/?auth_user=elastic&auth_password=elastic

    image

    7. 其他插件安装

    7.1 IK分词插件

    7.1.1 介绍

    IK分词插件是我们较常用的中文分词插件。

    github地址:https://github.com/medcl/elasticsearch-analysis-ik

    7.1.2 安装

    版本选择与elasticsearch对应的版本。比如我的elasticsearch版本为5.5.0,选择的ik的版本也是5.5.0.

    (1) 下载安装包并解压到 elasticsearch-5.5.0plugins 目录下,重命名为 analysis-ik.

    拷贝analysis-ik下的config文件夹到 elasticsearch-2.4.0config 目录下,并重命名为 ik

    重启ES.

    所有节点均需以上安装操作。

    7.2 pinyin插件

    7.2.1 介绍

    有时在淘宝搜索商品的时候,会发现使用汉字,拼音,或者拼音混合汉字都会出来想要的效果,该功能就是通过拼音搜索插件实现的。

    github地址:https://github.com/medcl/elasticsearch-analysis-pinyin

    7.2.2 安装

    在地址 https://github.com/medcl/elasticsearch-analysis-pinyin/releases 选择对应的版本下载。

    将安装包解压到 elasticsearch-5.5.0plugins 目录下,并重命名为 'pinyin'.

    重启ES.

    所有节点均需以上安装操作。

    8. 总结

    以上内容也参考了很多其他大神的总结,此处就不一一列出博客地址了。在此对你们的付出表示感谢。

  • 相关阅读:
    有关选择的心法(2)
    系统故障排查和确认是否被入侵
    伪善还是妥协
    建恒信安日志审计部署
    有关选择的心法
    数据统治世界----37%原则
    控制二分法
    磁盘空间耗尽导致服务器无法启动
    Linux 标准目录结构 FHS
    Linux入侵类问题排查思路
  • 原文地址:https://www.cnblogs.com/jinhaolin/p/9649203.html
Copyright © 2011-2022 走看看