分享

Elasticsearch Kibana X-Pack Head集群安装部署

 印度阿三17 2018-09-28

目录

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插件。

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: 192.168.1.91
# 对外提供服务的端口
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: 192.168.1.92
# 对外提供服务的端口
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: 192.168.1.93
# 对外提供服务的端口
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: 192.168.1.94
# 对外提供服务的端口
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:///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.0\plugins 目录下,重命名为 analysis-ik.

拷贝analysis-ik下的config文件夹到 \elasticsearch-2.4.0\config 目录下,并重命名为 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.0\plugins 目录下,并重命名为 'pinyin'.

重启ES.

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

8. 总结

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

来源:http://www./content-4-27201.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多