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

news2024/9/21 18:57:13

目录

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

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

    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

    sudo apt update
    sudo apt install elasticsearch
    
2.2 在 CentOS 上安装
  1. 导入 Elasticsearch GPG 密钥

    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 添加 Elasticsearch 仓库

    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

    sudo yum install elasticsearch
    
2.3 启动并配置 Elasticsearch
  1. 启动 Elasticsearch 服务

    sudo systemctl start elasticsearch
    sudo systemctl enable elasticsearch
    
  2. 检查服务状态

    sudo systemctl status elasticsearch
    
  3. 配置 Elasticsearch

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

    network.host: 0.0.0.0
    discovery.type: single-node
    

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

  4. 重启 Elasticsearch

    sudo systemctl restart elasticsearch
    
  5. 验证安装

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

    curl -X GET "localhost:9200/"
    

二、Elasticsearch 集群环境部署

1. 集群架构

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

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

2. 集群部署步骤

2.1 在每个节点上安装 Elasticsearch

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

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

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

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

    配置 network.hostdiscovery.seed_hosts。例如:

    network.host: 0.0.0.0
    discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
    
  3. 配置角色

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

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

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

    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
    
2.3 启动 Elasticsearch 服务

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

sudo systemctl start elasticsearch
2.4 验证集群状态

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

curl -X GET "localhost:9200/_cluster/health?pretty"

3. 集群部署注意事项

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

三、Elasticsearch 使用案例

1. Java 示例:使用 Elasticsearch RestHighLevelClient

1.1 添加 Maven 依赖

pom.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 代码示例
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
pip install elasticsearch
2.2 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 进行集群监控,及时发现并处理性能瓶颈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF

数字化转型的多维框架解析 在数字化时代&#xff0c;企业如何有效实现数字化转型已成为其生存和发展的关键问题。然而&#xff0c;市场上关于数字化管理的各种框架和理论并存&#xff0c;企业需要根据自身的需求选择最适合的指导路径。本文将通过对几个核心理论框架的对比&…

亿发工单系统:让任务风平浪静

在现代企业的日常运营中&#xff0c;工单管理系统已经成为必不可少的工具&#xff0c;无论是生产制造、IT运维&#xff0c;还是客服支持&#xff0c;工单系统的存在都是为了高效处理任务、跟踪进展、分配资源。然而&#xff0c;现实中的工单管理&#xff0c;往往不是“风平浪静…

初识模版!!

初识模版 1.泛型编程1.1 如何实现一个交换函数呢&#xff08;使得所有数据都可以交换&#xff09;&#xff1f;1.2 那可以不可以让编译器根据不同的类型利用该模子来生成代码呢&#xff1f; 2.模版类型2.1 模版概念2.2 函数模版的原理2.3 函数模板的实例化2.4 模板参数的匹配原…

linux 操作系统下dhcpd命令介绍和案例应用

linux 操作系统下dhcpd命令介绍和案例应用 DHCP&#xff08;动态主机配置协议&#xff09;在Linux操作系统中用于自动为网络中的设备分配IP地址和其他网络配置 DHCP的基本概念 DHCP协议通过UDP工作&#xff0c;主要有两个用途&#xff1a; 自动分配IP地址给网络中的设备。提…

化学分子结构检测系统源码分享

化学分子结构检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

git push出错Push cannot contain secrets

报错原因&#xff1a; 因为你的代码里面包含了github token明文信息&#xff0c;github担心你的token会泄漏&#xff0c;所以就不允许你推送这些内容。 解决办法&#xff1a; 需要先把代码里面的github token信息删除掉&#xff0c;并且删掉之前的历史提交&#xff0c;只要包…

【远程调用PythonAPI-flask】

文章目录 前言一、Pycharm创建flask项目1.创建虚拟环境2.创建flask项目 二、远程调用PythonAPI——SpringBoot项目集成1.修改PyCharm的host配置2.防火墙设置3.SpringBoot远程调用PythonAPI 前言 解决Pycharm运行Flask指定ip、端口更改无效的问题 首先先创建一个新的flask项目&…

变电站绝缘套管红外检测数据集

包含以下4个数据文件&#xff1a; /train&#xff1a;训练集 /valid&#xff1a;验证集 /test&#xff1a;测试集 README.txt&#xff1a;数据说明 【数据说明】检测目标以Pascal VOC格式进行标注&#xff0c;对每个图像进行以下预处理&#xff0c;统一调整大小为640x640。数据…

FLUX.1+ComfyUI部署与使用:图像合成技术的新高度

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; FLUX.1的版本 FLUX.1是由黑森林实验室&#xff08;[Black Forest Labs](https://bla…

【设计模式-备忘录】

备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;用于保存对象的内部状态&#xff0c;以便在将来某个时间可以恢复到该状态&#xff0c;而不暴露对象的内部实现细节。备忘录模式特别适合在需要支持撤销&#xff08;Undo&#xff09;操作的应…

如何在多台Linux虚拟机上安装和配置Kafka集群

Kafka是一个高性能、分布式的流处理平台&#xff0c;被广泛应用于大规模实时数据处理场景。它具有高吞吐量、低延迟和可水平扩展等特点&#xff0c;能够有效地处理海量数据流。为了提高Kafka的可用性和容错性&#xff0c;通常会在多个节点上部署Kafka集群。在这个指南中&#x…

十大排序(一):冒泡排序

目录 一、简介 实现过程 时间复杂度 二、代码实现 函数声明 Swap函数 单趟 多趟 测试 优化 一、简介 冒泡排序是一种简单的排序算法&#xff0c;它重复地比较相邻的两个元素&#xff0c;如果顺序错误就交换它们&#xff0c;直到没有元素需要交换为止。这个过程类…

获取zabbix API 监控数据shell脚本,自动日常巡检服务器信息、并发送指定群组

一&#xff0c;前言 有zabbix监控&#xff0c;也并不是时刻盯着数据&#xff0c;所以想着&#xff0c;每天固定某个时刻&#xff0c;自动发送服务器数据到指定群组&#xff0c;给其他人更直观的数据。 数据就可以从zabbix API获取。参考官方API文档&#xff1a;https://www.z…

如何使用IIC外设(硬件IIC)

本文重点叙述如何使用芯片自带的 IIC 外设&#xff0c;即硬件 IIC&#xff0c;实现 IIC 通信。文章《IIC通信基础_cpu的iic通信-CSDN博客》 中&#xff0c;叙述了软件 IIC 通信和硬件 IIC 通信的区别&#xff0c; 并且重点叙述了 IIC 的通信协议。在使用软件进行 IIC 通信时&am…

git安装包夸克网盘下载

git安装包夸克网盘下载 git夸克网盘 git网站上的安装包下载速度有点慢&#xff0c;因此为了方便以后下载就将文件保存到夸克网盘上&#xff0c;链接&#xff1a;我用夸克网盘分享了「git」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quark.cn/s/07c73c4a30…

MongoDB在Linux系统中的安装与配置指南

在这篇文章中&#xff0c;我们将介绍如何在CentOS 7服务器上安装MongoDB&#xff0c;并通过DataX将数据从MongoDB迁移到MySQL数据库。这将包括MongoDB的安装、配置、数据准备以及使用DataX进行数据迁移的详细步骤。 MongoDB简介 MongoDB是一个高性能、开源、无模式的文档型数据…

c++9月20日

1.思维导图 2.顺序表 头文件 #ifndef RECTANGLE_H #define RECTANGLE_H#include <iostream>using namespace std;using datatype int ;//类型重定义class Seqlist { private://私有权限datatype *ptr; //指向堆区申请空间的起始地址int size;//堆区空间的长度int len …

鸿蒙OS 线程间通信

鸿蒙OS 线程间通信概述 在开发过程中&#xff0c;开发者经常需要在当前线程中处理下载任务等较为耗时的操作&#xff0c;但是又不希望当前的线程受到阻塞。此时&#xff0c;就可以使用 EventHandler 机制。EventHandler 是 HarmonyOS 用于处理线程间通信的一种机制&#xff0c…

Spring Boot助力高校心理辅导系统升级

3 系统分析 3.1可行性分析 在进行可行性分析时&#xff0c;我们通常根据软件工程里方法&#xff0c;通过四个方面来进行分析&#xff0c;分别是技术、经济、操作和法律可行性。因此&#xff0c;在基于对目标系统的基本调查和研究后&#xff0c;对提出的基本方案进行可行性分析。…

如何着手创建企业数据目录?(三)权限管理及版本控制

前文导读&#xff1a; 《如何着手创建企业数据目录&#xff1f;&#xff08;一&#xff09;数据目录的设定》 《如何着手创建企业数据目录&#xff1f;&#xff08;二&#xff09;数据的命名与维护》 前面聊过了数据目录的设定、数据命名规则和维护规则&#xff0c;今天我们继续…