Elasticsearch 单机和集群环境部署教程

目录

    • [一、Elasticsearch 单机环境部署](#一、Elasticsearch 单机环境部署)
      • [1. 环境准备](#1. 环境准备)
      • [2. 安装 Elasticsearch](#2. 安装 Elasticsearch)
        • [2.1 在 Ubuntu 上安装](#2.1 在 Ubuntu 上安装)
        • [2.2 在 CentOS 上安装](#2.2 在 CentOS 上安装)
        • [2.3 启动并配置 Elasticsearch](#2.3 启动并配置 Elasticsearch)
    • [二、Elasticsearch 集群环境部署](#二、Elasticsearch 集群环境部署)
      • [1. 集群架构](#1. 集群架构)
      • [2. 集群部署步骤](#2. 集群部署步骤)
        • [2.1 在每个节点上安装 Elasticsearch](#2.1 在每个节点上安装 Elasticsearch)
        • [2.2 配置集群](#2.2 配置集群)
        • [2.3 启动 Elasticsearch 服务](#2.3 启动 Elasticsearch 服务)
        • [2.4 验证集群状态](#2.4 验证集群状态)
      • [3. 集群部署注意事项](#3. 集群部署注意事项)
    • [三、Elasticsearch 使用案例](#三、Elasticsearch 使用案例)
      • [1. Java 示例:使用 Elasticsearch RestHighLevelClient](#1. Java 示例:使用 Elasticsearch RestHighLevelClient)
        • [1.1 添加 Maven 依赖](#1.1 添加 Maven 依赖)
        • [1.2 Java 代码示例](#1.2 Java 代码示例)
      • [2. Python 示例:使用 `elasticsearch` 库](#2. Python 示例:使用 elasticsearch 库)
        • [2.1 安装 `elasticsearch` 库](#2.1 安装 elasticsearch 库)
        • [2.2 Python 代码示例](#2.2 Python 代码示例)
    • 总结

一、Elasticsearch 单机环境部署

1. 环境准备

  • 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7),也可以在 Windows 上安装 Elasticsearch。
  • Java 版本:Elasticsearch 需要 JDK 版本 17(Elasticsearch 8.x 版本自带 OpenJDK)。
  • Elasticsearch 版本:推荐使用 Elasticsearch 8.x(最新版本)。

2. 安装 Elasticsearch

2.1 在 Ubuntu 上安装
  1. 导入 Elasticsearch PGP 密钥

    bash 复制代码
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  2. 添加 Elasticsearch 源

    bash 复制代码
    sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" > /etc/apt/sources.list.d/elastic-8.x.list'
  3. 安装 Elasticsearch

    bash 复制代码
    sudo apt update
    sudo apt install elasticsearch
2.2 在 CentOS 上安装
  1. 导入 Elasticsearch GPG 密钥

    bash 复制代码
    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  2. 添加 Elasticsearch 仓库

    bash 复制代码
    cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
    [elasticsearch-8.x]
    name=Elasticsearch repository for 8.x packages
    baseurl=https://artifacts.elastic.co/packages/8.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    EOF
  3. 安装 Elasticsearch

    bash 复制代码
    sudo yum install elasticsearch
2.3 启动并配置 Elasticsearch
  1. 启动 Elasticsearch 服务

    bash 复制代码
    sudo systemctl start elasticsearch
    sudo systemctl enable elasticsearch
  2. 检查服务状态

    bash 复制代码
    sudo systemctl status elasticsearch
  3. 配置 Elasticsearch

    编辑 /etc/elasticsearch/elasticsearch.yml,进行基本配置。例如:

    yaml 复制代码
    network.host: 0.0.0.0
    discovery.type: single-node

    network.host 设置为 0.0.0.0 允许远程访问;discovery.type 设置为 single-node 表示这是单节点配置。

  4. 重启 Elasticsearch

    bash 复制代码
    sudo systemctl restart elasticsearch
  5. 验证安装

    使用 curl 命令验证 Elasticsearch 是否正常运行:

    bash 复制代码
    curl -X GET "localhost:9200/"

二、Elasticsearch 集群环境部署

1. 集群架构

Elasticsearch 集群至少需要 3 台节点,其中:

  • 主节点:负责管理集群状态、索引元数据。
  • 数据节点:存储实际的数据,执行搜索和聚合操作。
  • 协调节点:协调搜索和索引请求,不存储数据。

2. 集群部署步骤

2.1 在每个节点上安装 Elasticsearch

在所有节点上按照单机部署的步骤安装 Elasticsearch。

2.2 配置集群
  1. 配置集群名称和节点名称

    在每个节点的 /etc/elasticsearch/elasticsearch.yml 中设置:

    yaml 复制代码
    cluster.name: my-cluster
    node.name: node-1   # 修改为每个节点的唯一名称
  2. 配置网络

    配置 network.hostdiscovery.seed_hosts。例如:

    yaml 复制代码
    network.host: 0.0.0.0
    discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
  3. 配置角色

    在不同节点上,配置节点角色,如主节点、数据节点:

    yaml 复制代码
    node.roles: ["master", "data"]  # 可以设置为 master, data, ingest
  4. 配置集群引导主节点

    在主节点的配置文件中添加:

    yaml 复制代码
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
2.3 启动 Elasticsearch 服务

在所有节点上启动 Elasticsearch 服务:

bash 复制代码
sudo systemctl start elasticsearch
2.4 验证集群状态

在任何一个节点上执行以下命令来检查集群状态:

bash 复制代码
curl -X GET "localhost:9200/_cluster/health?pretty"

3. 集群部署注意事项

  • 网络配置:确保所有节点之间的网络通信顺畅,尤其是主节点与数据节点之间的通信。
  • 节点角色:合理分配节点角色,避免单点故障。
  • 高可用性:配置多个主节点和多个数据节点,防止节点故障时导致服务中断。
  • 日志和监控:使用 Elasticsearch 自带的 X-Pack 或者使用其他工具(如 Kibana、Prometheus)进行集群监控。

三、Elasticsearch 使用案例

1. Java 示例:使用 Elasticsearch RestHighLevelClient

1.1 添加 Maven 依赖

pom.xml 中添加依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.15.0</version>
    </dependency>
</dependencies>
1.2 Java 代码示例
java 复制代码
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ElasticsearchExample {
    public static void main(String[] args) throws IOException {
        // 创建客户端
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        // 创建文档
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("name", "John Doe");
        jsonMap.put("age", 30);
        jsonMap.put("email", "[email protected]");

        // 构建索引请求
        IndexRequest request = new IndexRequest("users").id("1").source(jsonMap, XContentType.JSON);
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

        System.out.println("Indexed document ID: " + indexResponse.getId());

        // 关闭客户端
        client.close();
    }
}

2. Python 示例:使用 elasticsearch

2.1 安装 elasticsearch
bash 复制代码
pip install elasticsearch
2.2 Python 代码示例
python 复制代码
from elasticsearch import Elasticsearch

# 创建 Elasticsearch 客户端
es = Elasticsearch("http://localhost:9200")

# 创建文档
doc = {
    'name': 'John Doe',
    'age': 30,
    'email': '[email protected]'
}

# 索引文档
res = es.index(index="users", id=1, body=doc)
print(res['result'])

# 获取文档
res = es.get(index="users", id=1)
print(res['_source'])

# 关闭连接
es.transport.close()

总结

通过以上步骤,我们完成了 Elasticsearch 的单机和集群环境的部署,并实现了 Java 和 Python 的简单连接示例。Elasticsearch 是一个强大的分布式搜索引擎,适用于处理大量数据并提供快速的搜索功能。

部署过程中的注意事项

  • 节点规划:在集群环境中,合理规划主节点和数据节点,确保集群的高可用性。
  • 资源管理:确保每个节点有足够的内存和 CPU 资源,防止因为资源不足导致性能下降。
  • 安全性:使用 X-Pack 或其他工具加强 Elasticsearch 的认证、授权和通信加密。
  • 监控和日志:配置 Kibana 或 Prometheus 进行集群监控,及时发现并处理性能瓶颈。
相关推荐
天才测试猿8 分钟前
接口自动化测试之pytest接口关联框架封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
先做个垃圾出来………39 分钟前
Python中使用pandas
开发语言·python·pandas
IT成长日记1 小时前
Elasticsearch集群最大分片数设置详解:从问题到解决方案
大数据·elasticsearch·最大分片数·shards
不爱吃山楂罐头1 小时前
第三十三天打卡复习
python·深度学习
risc1234562 小时前
【Elasticsearch】search_after不支持随机到哪一页,只能用于上一页或下一页的场景
elasticsearch
我的golang之路果然有问题2 小时前
快速了解GO+ElasticSearch
开发语言·经验分享·笔记·后端·elasticsearch·golang
Dxy12393102162 小时前
DrissionPage 性能优化实战指南:让网页自动化效率飞升
运维·爬虫·python·性能优化·自动化
蹦蹦跳跳真可爱5892 小时前
Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
人工智能·python·深度学习·神经网络·目标检测·计算机视觉
Elastic 中国社区官方博客2 小时前
连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
LeonDL1683 小时前
HALCON 深度学习训练 3D 图像的几种方式优缺点
人工智能·python·深度学习·3d·halcon·halcon训练3d图像·深度学习训练3d图像