elasticsearch部署方案_elasticsearch安装配置

elasticsearch部署方案_elasticsearch安装配置除非您使用Elasticsearch进行开发和测试,否则创建和维护Elasticsearch集群将是一项会占用您大量时间的任务。Elasticsearch是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性。本教程将提供有关如何设置Elasticsearch集群的一些信息,并将添加一些操作技巧和最佳实践来帮助您入门。但应该强调的是,每个Elasticsearch设置可能会因多种因素而异,包括服务器上的工作负载、索引数据量、硬件规格,甚至操作员的经验。什么

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183624.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea2022.01.13激活码永久[最新免费获取]2022.02.05

    (idea2022.01.13激活码永久)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html76VF8VOVJM-eyJsaWNlbnNlSW…

  • python读取excel单元格内容_python如何读取txt文件

    python读取excel单元格内容_python如何读取txt文件今天,跟大家谈一下用python计算Excel中的数据我们先学习读取Excel中的数据首先我们要安装xlrd库,在命令提示符(快捷键win+r)中输入:pipinstallxlrd下载完成xlrd库。首先呢,当然要先有一个Excel啦,如下:我们先仔细观察这个Excel,里面有2018、2017、2016的月收入来来来,跟着小哥哥一起月入3w!1、利用python读取Excel内容xrld库中的open_workbook函数可以打开Excel文件,并且返回一个代表打开Excel文

  • 死磕带通滤波器

    死磕带通滤波器带通滤波器的作用与陷波器类似,带通滤波器在数字电源控制领域有重要作用。比如在三相LCL逆变器的谐振抑制控制方面,通过带通滤波器可以提取谐振点附近的频谱做进一步的控制策略。在有源电力滤波器利用带通滤波器可以提取电网信号的基波频率从而做进一步的控制。带通滤波器传递函数带通滤波器的传递函数是:h(s)=AwoBss2+Bs+wo2h(s)=\frac{Aw_oBs}{s^2+Bs+w_o^2}h(s)=s2+Bs+wo2​Awo​Bs​其中,wow_owo​是带通的“中心频率”,也就是想要通过频率

  • C语言中fprintf函数的使用介绍

    C语言中fprintf函数的使用介绍C语言中fprintf函数的使用介绍fprint函数的原型://fp为文件指针,format是输出控制字符串intfprintf(FILE*fp,char*format,…)下面是使用fscanf和fprintf函数实现一个学生信息输入和输出的demo#include<stdio.h>#include<stdlib.h>#include<st…

    2022年10月18日
  • Spark源码系列(七)Spark on yarn具体实现

    Spark源码系列(七)Spark on yarn具体实现

  • eclipse设置系统字体

    eclipse设置系统字体

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号