欢迎访问宙启技术站
智能推送

Elasticsearches的集群搭建及数据分片过程详解

发布时间:2023-05-15 19:28:52

Elasticsearch是一款用于全文搜索和分析的分布式开源搜索引擎,因其高性能和可扩展性,已经被很多企业用于大规模日志管理和实时监控。本文将介绍如何在Linux系统中搭建Elasticsearch集群,并详细讲解Elasticsearch的数据分片过程。

一、Elasticsearch集群概述

Elasticsearch集群由多个节点组成,每个节点都是一个独立的Elasticsearch实例。在集群中,所有节点都会共同协作完成数据的存储和查询。节点之间通过网络进行通信,因此,为了保证性能和可靠性,需要使集群中的节点数量尽量多,同时也要保证每个节点都能够独立工作。

二、搭建Elasticsearch集群

以下是在Linux系统中搭建Elasticsearch集群的步骤。

1. 安装Java环境

Elasticsearch是基于Java编写的,因此需要先安装Java环境。建议使用JDK8及以上版本,可通过以下命令安装:

sudo apt-get update

sudo apt-get install default-jdk

2. 下载并安装Elasticsearch

从官网上下载最新版本的Elasticsearch并解压到指定目录中,例如:

sudo mkdir -p /opt/elasticsearch

sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz

sudo tar -zxvf elasticsearch-7.13.3-linux-x86_64.tar.gz -C /opt/elasticsearch --strip-components=1

3. 配置Elasticsearch

在每一台节点上都需要配置Elasticsearch。在配置文件中,需要将节点的名称(node.name)和集群名称(cluster.name)都设置为相同的值,以便节点能够加入到同一个集群中。配置文件存放的位置是在解压后的目录中,在config文件夹中,可以通过以下命令进入此文件夹:

cd /opt/elasticsearch/config

打开elasticsearch.yml文件,并修改以下配置项:

node.name: node-1

cluster.name: my-cluster

这里将节点名称设置为node-1,集群名称设置为my-cluster。

4. 启动节点

在每台节点上启动Elasticsearch服务,可以使用以下命令:

cd /opt/elasticsearch

sudo bin/elasticsearch

运行命令后,Elasticsearch将在后台运行,并将接收来自其他节点的加入请求。

5. 加入集群

当节点启动后,它会加入到单节点的集群中。也就是说,只有一个节点。要将其他节点加入到当前的集群中,需要将它们的network.host设置为同一个IP地址。可以在elasticsearch.yml文件中添加以下配置:

network.host: 192.168.1.100

这里将IP地址设置为192.168.1.100,此IP地址需要和其他节点的IP地址设置相同。

5.1  种加入集群的方式:通过配置文件加入

在其他节点上,也需要修改elasticsearch.yml文件的cluster.name和network.host项,并设置节点名称node.name。接下来需要将这些节点与 个节点连接在一起。

将 个节点的IP地址添加到elasticsearch.yml文件的discovery.seed_hosts项中,例如:

discovery.seed_hosts: ["192.168.1.100"]

与 个节点连接后,启动Elasticsearch服务,使用sudo bin/elasticsearch命令。

5.2 第二种加入集群的方式:通过API加入

另一种连接到集群的方式是使用Elasticsearch客户端库,并利用API直接加入集群。客户端可以使用任何支持的语言,例如Java、Python等。此外,还可以使用curl工具来连接到Elasticsearch。

要使用curl加入集群,可以运行以下命令:

sudo curl -H "Content-Type: application/json" -XPOST 'http://192.168.1.100:9200/_cluster/settings' -d '

{

    "persistent" : {

        "cluster.routing.allocation.enable" : "all"

    }

}'

此命令将启用数据分片,并将Elasticsearch节点加入到集群中。

三、Elasticsearch数据分片

在Elasticsearch中,数据分片是指将索引数据分成多个逻辑部分,每个部分称为一个分片。一个索引可以由一个或多个分片组成,每个分片可以分配到不同的节点上。这样做可以使数据更快地被搜索和处理,同时也可以提高数据的可靠性和可扩展性。

3.1 索引分片的数量

在Elasticsearch中,索引的默认分片数量是5。一个现代化的服务器可以同时容纳数百个分片,因此可以根据需要修改默认设置。

要修改索引分片的数量,可以使用以下API:

PUT /my-index/_settings

{

    "settings": {

        "index": {

            "number_of_shards": 3

        }

    }

}

这里将分片数量设置为3。

3.2 分配分片

当节点加入到集群后,Elasticsearch将自动为新节点重新分配数据分片。可以使用以下API来手动分配和重新分配分片:

POST /_cluster/reroute

{

    "commands": [

        {

            "allocate": {

                "index": "my-index",

                "shard": 0,

                "node": "node-1",

                "allow_primary": true

            }

        }

    ]

}

这里将 个节点分配为my-index索引的 个分片的主分片。要指定其他节点和分片,可以将node和shard参数替换为适当的值。

结论

通过本文的介绍,我们了解了如何在Linux上搭建Elasticsearch集群,并学习了Elasticsearch如何进行数据分片。虽然这只是一个简单的示例,但Elasticsearch在实际应用中具有更多的功能和配置选项,可以根据需求进行调整和优化。