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/

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle srvctl命令,Oracle SRVCTL使用说明

    oracle srvctl命令,Oracle SRVCTL使用说明SRVCTL是Oracle9iRAC集群配置管理的工具。本文是对SRVCTL的所有命令进行详细说明的一篇参考文档。添加数据库或实例的配置信息。在增加实例中,与-i一起指定的名字应该与INSTANCE_NAME和ORACLE_SID参数匹配。srvctladddatabase-ddatabase_name[-mdomain_name]-ooracle_home[-sspfi…

    2022年9月12日
    0
  • LARS算法的几何意义

    LARS算法的几何意义1  LARS算法简介  Efron于2004年发表在AnnalsofStatistics的文章LEASTANGLEREGRESSION中提出LARS算法,其核心思想是提出一种新的solutionpath(求解路径),即在已经入选的变量中,寻找一个新的路径,使得在这个路径上前进时,当前残差与已入选变量的相关系数都是相同的,直到找出新的比当前残差相关系数最大的

    2022年6月23日
    23
  • Python(含PyCharm及配置)下载安装以及简单使用(Idea)「建议收藏」

    Python(含PyCharm及配置)下载安装以及简单使用(Idea)「建议收藏」下载Python官网下载地址:Python下载不同参数解释,小伙伴们根据自己情况进行下载即可(此处博主用的是3.7.3版本):–web-basedinstaller:在线安装。下载的是一个exe可执行程序,双击后,该程序自动下载安装文件进行安装。网络安装版,需联网–executableinstaller:程序安装。下载的是一个exe可执行程序,双击进行安装。本地安装,可执行程序(***)–embeddablezipfile:解压安装。下载的是一个压缩文件,解压后即表示安装完成。嵌入式版

    2022年5月31日
    37
  • DotNET介绍_dotnet 6

    DotNET介绍_dotnet 6一、.NET课程简介(DotNET全程)1、DotNET是微软公司旗下的一种用作于软件网络开发的新型技术。2、世界上最流行的操作系统是windows系统。3、.NETFramework是指DotNET的运行环境二、C#语言1、是微软旗下的一门新兴的计算机语言,C#是做.NET开发的一种语言工具2、C#语言是一种运行在.NETFramework平台之下的一种编程语言。我们用C#…

    2022年10月22日
    0
  • linux下的fork和execve函数使用

    linux下的fork和execve函数使用

    2021年8月29日
    92
  • P2P建立加密通道

    P2P建立加密通道核心:DH秘钥交互算法DH算法:对于非对称加密算法部分支持DH算法(spec256K1、curv25519、ed25519不支持但可以转换到curv25519间接实现),PrivA+PubB=PrivB+PubA,算法在公开双方公钥时就可使用各自保存的私钥,进行秘钥的交换;加密随机种子:随机生成nonce值,使用该nonce值以及交换过的秘钥对数据进行加密,nonce值附加到密文头部…

    2022年5月10日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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