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.host 和 discovery.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", "john.doe@example.com");

        // 构建索引请求
        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': 'john.doe@example.com'
}

# 索引文档
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 进行集群监控,及时发现并处理性能瓶颈。
相关推荐
XZ-07000114 分钟前
week8-代码解析2
python
小虎牙^O^18 分钟前
棋盘格隐写:基于奇偶相位的双图隐藏与还原
图像处理·python·安全
薛定猫AI25 分钟前
【技术干货】基于本地优先架构的开源AI智能体Octopus系统设计与实战解析
python·机器学习·ai·大模型·技术实战
程序猿乐锅44 分钟前
【从0-1学习Python | 第四篇】Python 字符串和元组
java·开发语言·笔记·后端·python·学习
Rebecca_aLi1 小时前
码匠教育:从手工表格到脚本自动化,Python 改造工作流的思路
运维·python·自动化
开开心心就好1 小时前
A3的PDF怎么切成A4?拖一下分割线就行
服务器·开发语言·python·算法·pdf·ocr·tornado
小黄人软件1 小时前
python 模块(Module)与包(Package)的区别,python xxx.py、python -m xxx 和 import xxx 三者的区别
开发语言·python
砚底藏山河1 小时前
量化新手误区:因子计算与行情数据的工程化解耦
java·数据库·python·金融
lzqrzpt2 小时前
LED驱动电源选型核心参数解析与工程适配准则
python·单片机·嵌入式硬件
李航19832 小时前
SketchUp国产平替来了,功能非常接近,还有AI版本自动建模
人工智能·python·计算机视觉·ai·ai编程