Elasticsearch集群搭建教程及生产环境配置

时间:2022-08-28 17:36:23

Elasticsearch 是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性。

本教程将提供有关如何设置 Elasticsearch 集群的一些信息,并将添加一些操作技巧和最佳实践来帮助您入门。但应该强调的是,每个 Elasticsearch 设置可能会因多种因素而异,包括服务器上的工作负载、索引数据量、硬件规格,甚至操作员的经验。

什么是 Elasticsearch 集群?

顾名思义,Elasticsearch 集群是一组连接在一起的一个或多个 Elasticsearch 节点实例。Elasticsearch 集群的强大之处在于在集群中的所有节点之间分配任务、搜索和索引。

Elasticsearch 集群中的节点可以分配不同的工作或职责:

  • Data nodes — 存储数据并执行与数据相关的操作,例如搜索和聚合
  • Master nodes — 负责集群范围的管理和配置操作,例如添加和删除节点
  • Client nodes — 将集群请求转发给主节点,将数据相关的请求转发给数据节点
  • Ingest nodes — 用于在索引之前预处理文档

默认情况下,每个节点都会自动分配一个唯一标识符或名称,用于管理目的,并且在多节点或集群环境中变得更加重要。

安装后,单个 Elasticsearch 节点将形成一个名为“elasticsearch”的新单节点集群,但正如我们将在本文后面看到的,它也可以配置为使用集群名称加入现有集群。不用说,这些节点需要能够相互识别才能连接。

安装 Elasticsearch 集群

下面我将向您展示如何手动设置由一个主节点和两个数据节点组成的集群。

安装java

Elasticsearch 基于 Java 构建,至少需要 Java 8(1.8.0_131 或更高版本)才能运行。因此,我们的第一步是在集群中的所有节点上安装 Java 8。请注意,集群中的所有 Elasticsearch 节点都应安装相同的版本。

安装 Elasticsearch 节点

首先,从官网下载Elasticsearch程序包,并解压为三份

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-windows-x86_64.zip

本教程使用的Elasticsearch 版本问7.14.0

配置 Elasticsearch 集群

我们的下一步是设置集群,以便节点可以相互连接和通信。

对于每个节点,打开 Elasticsearch 配置文件:

vim elasticsearch-7.14.0-2\config\elasticsearch.yml

这个文件很长,包含不同部分的多个设置。浏览文件,然后输入以下配置:

节点1:


#集群名称
cluster.name: my-cluster #节点名称
node.name: "es-node-1" #定义1为主节点
node.master: true #定义节点2节点3为数据节点
node.data: true #访问的IP地址,0.0.0.0表示不限制
network.host: 0.0.0.0
#访问端口号
http.port: 9200 #集群通讯端口号
transport.tcp.port: 9300 #所有节点的ip地址
discovery.zen.ping.unicast.hosts: ["192.168.73.66:9300", "192.168.73.66:9301", "192.168.73.66:9302"]

节点2:


#集群名称
cluster.name: my-cluster #节点名称
node.name: "es-node-2" #定义1为主节点
node.master: false #定义节点2节点3为数据节点
node.data: true #访问的IP地址,0.0.0.0表示不限制
network.host: 0.0.0.0
#访问端口号
http.port: 9201 #集群通讯端口号
transport.tcp.port: 9301 #所有节点的ip地址
discovery.zen.ping.unicast.hosts: ["192.168.73.66:9300", "192.168.73.66:9301", "192.168.73.66:9302"]

节点3:


#集群名称
cluster.name: my-cluster #节点名称
node.name: "es-node-3" #定义1为主节点
node.master: false #定义节点2节点3为数据节点
node.data: true #访问的IP地址,0.0.0.0表示不限制
network.host: 0.0.0.0
#访问端口号
http.port: 9202 #集群通讯端口号
transport.tcp.port: 9302 #所有节点的ip地址
discovery.zen.ping.unicast.hosts: ["192.168.73.66:9300", "192.168.73.66:9301", "192.168.73.66:9302"]

运行 Elasticsearch 集群

您现在已准备好启动 Elasticsearch 节点并验证它们作为集群相互通信。

对于每个实例,运行以下命令:

#linux
elasticsearch-7.14.0-2\bin\elasticsearch
#windows
elasticsearch-7.14.0-2\bin\elasticsearch.bat

如果一切配置正确,您的 Elasticsearch 集群应该已启动并正在运行。要验证一切是否按预期工作,请从任何集群节点查询 Elasticsearch:

curl -XGET 'http://localhost:9200/_cluster/state?pretty'

响应应详细说明集群及其节点:

{
"cluster_name": "my-cluster",
"cluster_uuid": "QU6x1C3iRk-gps6PgQsE5g",
"version": 478,
"state_uuid": "DZyMU0KKQlmUZ9h_WyM8aQ",
"master_node": "OjKnMr1tTZ2cJyA5BZm1fg",
"blocks": {},
"nodes": {
"__bdouL_Q7anCPj1-3Tmxw": {
"name": "es-node-2",
"ephemeral_id": "7GjSuyqBQya8yWdWvXGKjQ",
"transport_address": "192.168.73.66:9301",
"attributes": {},
"roles": [
"data",
"data_cold",
"data_content",
"data_frozen",
"data_hot",
"data_warm",
"ingest",
"ml",
"remote_cluster_client",
"transform"
]
},
"OjKnMr1tTZ2cJyA5BZm1fg": {
"name": "es-node-1",
"ephemeral_id": "OhJ0gZu6RBWsA2ZX6lmx5g",
"transport_address": "192.168.73.66:9300",
"attributes": {},
"roles": [
"data",
"data_cold",
"data_content",
"data_frozen",
"data_hot",
"data_warm",
"ingest",
"master",
"ml",
"remote_cluster_client",
"transform"
]
}
},
"metadata": {},
"routing_table": {},
"routing_nodes": {}
}

生产环境Elasticsearch 集群配置

我们已经为集群中的节点定义了不同的角色,但是对于在生产环境中运行的集群还有一些额外的推荐设置。

避免“裂脑”

“裂脑”情况是集群中节点之间的通信由于网络故障或其中一个节点的内部故障而失败。在这种情况下,可能会有多个节点认为自己是主节点,从而导致数据不一致的状态。

为了避免这种情况,我们可以对 Elasticsearch 配置文件中的discovery.zen.minimum_master_nodes指令进行更改,该指令确定需要通信(投票)多少节点来选举主节点。

确定此数量的最佳做法是使用以下公式来确定此数量:N/2 + 1。N 是集群中符合条件的主节点的数量。然后将结果四舍五入到最接近的整数。

对于具有三个节点的集群,则:

discovery.zen.minimum_master_nodes: 2

调整JVM堆大小

为了确保 Elasticsearch 有足够的操作余地,应该调整默认的 JVM 堆大小(最小/最大 1 GB)。

根据经验,最大堆大小应设置为 RAM 的 50%,但不超过 32GB(由于 Java 指针在较大堆中效率低下)。Elastic 还建议最大和最小堆大小的值相同。

这些值可以使用jvm.options文件中的 Xmx 和 Xms 设置进行配置。

vim elasticsearch-7.14.0-2\config\jvm.options

-Xms2g
-Xmx2g

禁用交换

换出未使用的内存是一种通用行为,但在 Elasticsearch 的上下文中可能会导致断开连接、性能不佳以及一般情况下 — 不稳定的集群。

为了避免交换,您可以禁用所有交换(如果 Elasticsearch 是服务器上运行的唯一服务,则建议使用),或者您可以使用mlockall将 Elasticsearch 进程锁定到 RAM。

为此,请打开集群中所有节点上的 Elasticsearch 配置文件:

vim elasticsearch-7.14.0-2\config\elasticsearch.yml

添加以下内容:

bootstrap.mlockall: true

完成后重新启动 Elasticsearch。

调整虚拟内存

为避免耗尽虚拟内存,请增加对 mmap 计数的限制:

sudo vim /etc/sysctl.conf

修改为以下配置

vm.max_map_count=262144

增加打开的文件描述符限制

另一个重要的配置是打开文件描述符的限制。由于 Elasticsearch 使用了大量的文件描述符,您必须确保定义的限制足够,否则最终可能会丢失数据。

此设置的常见建议是 65,536 或更高

vim /etc/security/limits.conf

设置限制:

  • nofile 65536

Elasticsearch 集群 API(参考)

Elasticsearch 支持大量特定于集群的 API 操作,让您可以管理和监控您的 Elasticsearch 集群。大多数 API 允许您使用内部节点 ID、名称或地址来定义要调用的 Elasticsearch 节点。

下面列出了一些您可以使用的更基本的 API 操作。

集群健康

此 API 可用于查看集群的一般信息并衡量其健康状况:

curl -XGET 'localhost:9200/_cluster/health?pretty'

集群状态

可以使用此 API 查看整个集群的详细状态报告。您可以通过在调用 URL 中指定参数来过滤结果。

curl -XGET 'localhost:9200/_cluster/state?pretty'

集群统计

对于监控整个集群的性能指标非常有用:

curl -XGET 'localhost:9200/_cluster/stats?human&pretty'

节点统计

如果要检查集群中特定节点的指标,请使用此 API。您可以查看所有节点、特定节点的信息,或者要求仅查看索引或操作系统/进程特定的统计信息。

所有节点:

curl -XGET 'localhost:9200/_nodes/stats?pretty'

复制

特定节点:

curl -XGET 'localhost:9200/_nodes/node-1/stats?pretty'

复制

仅索引统计:

curl -XGET 'localhost:9200/_nodes/stats/indices?pretty'

复制

您可以获得具有以下结构的任何单个节点的任何特定指标:

curl -XGET 'localhost:9200/_nodes/stats/ingest?pretty'

复制

或具有以下结构的多个节点:

curl -XGET 'localhost:9200/_nodes/stats/ingest,fs?pretty'

复制

或具有以下两种格式之一的所有指标:

curl -XGET 'localhost:9200/_nodes/stats/_all?pretty'

curl -XGET 'localhost:9200/_nodes/stats?metric=_all?pretty'

节点信息

如果要收集有关任何或所有集群节点的信息,请使用此 API。

检索单个节点:

curl -XGET 'localhost:9200/_nodes/?pretty'

复制

或多个节点:

curl -XGET 'localhost:9200/_nodes/node1,node2?pretty'

复制

检索有关插件或摄取的数据:

curl -XGET 'localhost:9200/_nodes/plugins

复制

curl -XGET 'localhost:9200/_nodes/ingest

待处理的集群任务

此 API 跟踪集群级别的更改,包括但不限于更新的映射、失败的分片和索引创建。

以下 GET 应返回任务列表:

curl -XGET 'localhost:9200/_cluster/pending_tasks?pretty'

任务管理

与 Pending Cluster Tasks API 类似,Task Management API 将获取有关各个节点上当前正在运行的任务的数据。

要获取所有当前正在执行的任务的信息,请输入:

curl -XGET "localhost:9200/_tasks

要按特定节点获取当前任务,以及其他与集群相关的任务,请输入节点名称,然后将 &actions 附加到 GET:

curl -XGET 'localhost:9200/_tasks?nodes=node1,node2&actions=cluster:*&pretty'

通过输入 _tasks/ 然后输入任务的个人 ID 来检索有关特定任务(或其子任务)的信息:

curl -XGET '本地主机:9200/_tasks/43r315an3xamp13'

对于子任务:

curl -XGET 'localhost:9200/_tasks?parent_task_id=43r315an3xamp13'

该 API 还支持重新索引、搜索、任务分组和任务取消。

远程集群信息

获取远程集群信息:

curl -XGET 'localhost:9200/_remote/info?pretty'

投票配置排除

这将删除符合 master 资格的节点。

通过以下方式删除所有排除项:

curl -X DELETE 'localhost:9200/_cluster/voting_config_exclusions?pretty'

或者在排除列表中添加一个节点:

curl -X POST 'localhost:9200/_cluster/voting_config_exclusions/node1?pretty'

参考地址:https://logz.io/blog/elasticsearch-cluster-tutorial/

Elasticsearch集群搭建教程及生产环境配置的更多相关文章

  1. 和我一起打造个简单搜索之ElasticSearch集群搭建

    我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...

  2. elasticsearch集群搭建实例

    elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...

  3. 【运维技术】Zookeeper单机以及集群搭建教程

    Zookeeper单机以及集群搭建教程 单机搭建 单机安装以及启动 安装zookeeper的前提是必须有java环境 # 选择目录进行下载安装 cd /app # 下载zk,可以去官方网站下载,自己上 ...

  4. 1.Hadoop集群搭建之Linux主机环境准备

    Hadoop集群搭建之Linux主机环境 创建虚拟机包含1个主节点master,2个从节点slave1,slave2 虚拟机网络连接模式为host-only(非虚拟机环境可跳过) 集群规划如下表: 主 ...

  5. 详尽的 Elasticsearch7.X 安装及集群搭建教程

    为了更好的阅读体验,欢迎访问 原文阅读链接 简介 首先引用 Elasticsearch (下文简称 ES)官网的一段描述: Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分 ...

  6. windows+nginx+tomcat实现集群负载均衡(生产环境必读)

    概念理解(原文链接) 集群:多个tomcat服务器运行同一个web服务就能称之为集群 负载均衡:apache按照一定方式将不同的客户端访问分配到不同的tomcat服务器 简单负载均衡实现: 网上参考了 ...

  7. Elasticsearch集群搭建及使用Java客户端对数据存储和查询

    本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ...

  8. ElasticStack之Elasticsearch集群搭建

    需搭建服务器环境 操作系统 Host:port node 1 CentOS 7.2.1511 11.1.11.127:9200 node1 2 CentOS 7.2.1511 11.1.11.128: ...

  9. CentOS 7下ElasticSearch集群搭建案例

    最近在网上看到很多ElasticSearch集群的搭建方法,本人在这人使用Elasticsearch5.0.1版本,介绍如何搭建ElasticSearch集群并安装head插件和其他插件安装方法. 一 ...

随机推荐

  1. Java 第四章 选择结构2

    第四章 选择结构 (二) switch 选择结构的执行流程是怎样的? switch 选择结构中break关键字的作用? 本章目标 掌握 switch 选择结构 能够综合运用 if 选择结构 和 swi ...

  2. 数字型 、String字符串转换

    Java代码 收藏代码 String str = "1,2,3,4,5,6" public int[] StringtoInt(String str) { int ret[] = ...

  3. Java导出Highcharts生成的图表为图片源码

    本文转载自:http://blog.csdn.net/dengsilinming/article/details/7352054 需要的jar包: 需要的js文件:(可以通过http://www.hi ...

  4. ODBC 小例

    #include "stdafx.h"#include <windows.h>#include <stdio.h>#include <iostream ...

  5. VC 为程序创建快捷方式的详细讲解

    有时候,为了方便用户使用我们编写的程序,需要在桌面,快速启动或程序组中创建程序的快捷方式.下面就介绍在VC下如何为程序创建快捷方式. 一.得到桌面,快速启动或程序组的路径这里介绍二个win32 API ...

  6. 廖雪峰Java1-3流程控制-3条件判断

    1.if条件判断的格式 if (条件) { 代码块 } if (条件) { 代码块1 } else { 代码块2 } if (条件1) { 代码块1 } else if { 代码块2 } else { ...

  7. 【BZOJ3328】PYXFIB 数论&plus;矩阵乘法

    [BZOJ3328]PYXFIB Description Input 第一行一个正整数,表示数据组数据 ,接下来T行每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sampl ...

  8. Jmeter&plus;ant&plus;jenkins接口自动化测试 平台搭建(一)

    平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成.Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可 ...

  9. HDU 2191 悼念512汶川大地震遇难同胞

    悼念512汶川大地震遇难同胞 急!灾区的食物依然短缺!  为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格 ...

  10. 音频分析框架pyAudioAnalysis文档

    “ pyAudioAnalysis是一个非常好用且强大的音频分析开源工具,能实现音频的特征提取.分类和回归模型的训练和执行,以及其他一些实用的功能.此外,本文档并非直译,也有部分比较简略,可以结合源码 ...