ElasticSearch 分布式部署

news2025/1/6 12:59:30

一、引言

在当今大数据时代,数据呈爆炸式增长,如何高效地存储、检索数据成为了众多企业面临的关键挑战。ElasticSearch 作为一款强大的分布式搜索引擎,凭借其卓越的性能、灵活的扩展性以及强大的全文检索能力,在日志分析、数据分析、电商搜索等众多领域大放异彩。而分布式部署更是将这些优势进一步放大,它能够让我们突破单机性能瓶颈,实现海量数据的快速处理,同时保障数据的高可用性与可靠性。接下来,就让我们一起深入探索 ElasticSearch 分布式部署的奥秘。

二、准备工作

2.1 硬件需求

在搭建 ElasticSearch 分布式集群之前,合理的硬件配置是基础保障。对于小型测试集群,一台具有 4 核 CPU、8GB 内存以及 500GB 硬盘的服务器或许就能初步满足需求;但若是面向大规模生产环境,建议采用具有 16 核以上 CPU、32GB 甚至更高内存,搭配大容量高速固态硬盘(如 1TB 及以上)的服务器。这是因为 ElasticSearch 在数据存储、索引构建以及查询检索过程中,对 CPU 和内存资源消耗较大,充足的硬件资源能够确保集群稳定高效运行。

2.2 软件环境

操作系统方面,CentOS 7.x 和 Ubuntu 18.04 等较为常用且稳定。以 CentOS 为例,安装前需确保系统已更新到最新版本,执行命令 yum update -y。接下来安装 Java 环境,ElasticSearch 8.x 版本要求 Java 17 及以上,通过如下步骤安装:

# 下载 Java 17 安装包(以 OpenJDK 为例)
yum install -y java-17-openjdk-devel
# 配置 Java 环境变量
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH

安装完成后,通过 java -version 命令检查 Java 安装是否成功。

三、核心概念解读

3.1 集群、节点与分片

想象一下,ElasticSearch 集群就如同一个庞大的图书馆,而每个节点则是图书馆里的一个个书架。集群是由多个节点组成的有机整体,它们协同工作来存储和检索数据。节点又分为不同类型,主节点(Master Node)犹如图书馆的管理员,负责管理集群的状态、元数据以及节点的加入与离开等操作;数据节点(Data Node)则是真正存放书籍(数据)的书架,承担数据的存储与检索任务。
分片(Shard)更是精妙的设计,它将索引分割成一个个独立的小块,就好比把一部大百科全书拆分成多本小册子,分布在不同的数据节点上。这样做既便于数据的分布式存储,又能在查询时利用多个节点并行处理,大大提升检索效率。例如,一个拥有 10 亿条数据的索引,拆分成 10 个分片,每个分片 1 亿条数据,分别存储在不同节点,查询时可同时发动 10 个节点一起查找,速度显著提升。

3.2 副本机制

副本(Replica)如同图书馆里书籍的备份,每个分片都可以设置若干个副本。当数据节点出现故障时,副本能够迅速顶上,确保数据的可用性,维持集群正常运转。同时,副本还能起到负载均衡的作用,查询请求可以均匀地分配到主分片和副本分片上,避免单个节点压力过大。比如在电商大促期间,大量搜索请求袭来,副本分片能够分担主分片的查询压力,保障用户搜索体验流畅。

四、安装与配置实战

4.1 安装包获取与解压

我们可以从 ElasticSearch 官方网站(Download Elasticsearch | Elastic)下载对应版本的安装包,也可选择国内镜像站点以加快下载速度。下载完成后,将安装包移动到指定目录,如 /opt/,执行解压命令:

tar -zxvf elasticsearch-8.6.0-linux-x86_64.tar.gz

解压后会得到 elasticsearch-8.6.0 目录,这便是 ElasticSearch 的安装目录。

4.2 关键配置文件详解

进入安装目录下的 config 文件夹,打开 elasticsearch.yml 文件,这是 ElasticSearch 的核心配置文件。以下是一些关键配置参数:

# 集群名称,同一集群内所有节点的集群名称必须一致
cluster.name: my-es-cluster
# 节点名称,每个节点需有唯一名称,便于识别
node.name: node-1
# 绑定的IP地址,通常设置为0.0.0.0以便外部访问
network.host: 0.0.0.0
# 节点间通信端口
transport.port: 9300
# HTTP 访问端口
http.port: 9200
# 集群发现机制,指定用于发现其他节点的种子节点列表
discovery.seed_hosts: ["192.168.1.100", "192.168.1.101"]

根据实际需求,仔细修改这些参数,确保节点间能正确通信,集群正常组建。

4.3 内存与系统参数调优

ElasticSearch 运行在 JVM 之上,合理分配 JVM 内存至关重要。在 config/jvm.options 文件中,根据服务器内存情况调整堆内存大小,例如:

-Xms8g
-Xmx8g

这里将初始堆内存和最大堆内存都设置为 8GB,一般建议不超过服务器内存的一半。同时,为了应对大量文件描述符的需求,在系统层面执行以下命令:

# 提升文件描述符限制
ulimit -n 65535
# 开启内存锁定,防止内存被交换出去
sysctl -w vm.swappiness=0

五、集群搭建步骤

5.1 单节点启动测试

在完成首个节点的安装与配置后,进入安装目录下的 bin 文件夹,执行启动命令:

./elasticsearch -d

-d 参数表示以守护进程模式启动。启动后,通过查看日志文件(位于 logs 目录下),关注是否有错误信息,若日志显示 started 字样,表明单节点启动成功,此时可通过浏览器访问 http://localhost:9200,若返回 ElasticSearch 的基本信息,如版本号、集群名称等,说明节点运行正常。

5.2 多节点扩展与集群形成

要扩展集群,需在其他服务器上重复安装与配置步骤,注意每个节点的 node.name 和 network.host 等参数要根据实际情况修改,确保唯一性与正确性。在所有节点配置完成后,依次启动。节点启动过程中,它们会依据 discovery.seed_hosts 配置去发现其他节点,自动加入集群。若发现节点未能正常加入,仔细检查网络连接、配置文件参数是否一致,通过查看日志排查问题,如常见的端口被占用、节点通信超时等。

六、安全加固策略

6.1 内置用户权限管理

ElasticSearch 内置了多种用户角色,如超级用户(elastic)、普通用户、只读用户等。为保障数据安全,我们可以创建具有特定权限的用户。例如,创建一个仅具有索引写入权限的用户:

# 进入安装目录下的 bin 文件夹
cd /opt/elasticsearch-8.6.0/bin
# 使用 elasticsearch-users 工具创建用户
./elasticsearch-users useradd writer -p password -r write

这样,用户 writer 只能向指定索引写入数据,无法进行删除、修改权限以外的操作,有效防止误操作与恶意攻击。

6.2 证书配置与加密传输

为了实现节点间以及客户端与集群间的安全通信,配置证书是必要步骤。首先,生成自签名证书:

# 进入安装目录下的 bin 文件夹
cd /opt/elasticsearch-8.6.0/bin
# 执行证书生成命令
./elasticsearch-certutil ca
./elasticsearch-certutil cert --ca elastic-stack-ca.p12

生成证书后,将证书文件复制到各节点的 config/certs 目录下,并在 elasticsearch.yml 文件中配置证书路径:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

如此一来,数据传输过程将被加密,大大提升集群安全性。

七、监控与维护要点

7.1 集群健康监测

ElasticSearch 提供了丰富的 API 用于监控集群健康状况,同时也可以结合 Kibana 可视化工具进行直观展示。通过访问 http://localhost:9200/_cluster/health?pretty API,返回结果中的 status 字段显示集群状态,green 表示所有分片和副本都正常分配,yellow 表示有副本未完全分配,red 表示存在主分片丢失等严重问题。此外,关注 active_primary_shardsactive_shards 等指标,了解分片活跃情况,以便及时发现潜在风险,采取相应措施。

7.2 数据备份与恢复

定期的数据备份是数据安全的最后防线。利用 ElasticSearch 的快照功能,先创建存储快照的仓库:

# 执行创建仓库命令
PUT /_snapshot/my_backup_repo
{
  "type": "fs",
  "settings": {
    "location": "/opt/elasticsearch_backup"
  }
}

然后对指定索引创建快照:

PUT /_snapshot/my_backup_repo/snapshot_1?wait_for_completion=true
{
  "indices": "my_index"
}

当需要恢复数据时,只需执行恢复操作:

POST /_snapshot/my_backup_repo/snapshot_1/_restore

确保数据在遭遇灾难时能够快速恢复,保障业务连续性。

八、常见问题解答

在 ElasticSearch 分布式部署过程中,难免会遇到各种问题。比如启动时提示端口被占用,可通过 netstat -tunlp | grep <端口号> 命令查找占用进程,使用 kill -9 <进程号> 终止进程后重新启动。若配置文件修改后不生效,检查配置文件语法是否正确,重启相关服务。节点失联问题,首先排查网络连接是否正常,ping 其他节点 IP 看是否可达,再检查节点配置的 discovery.seed_hosts 是否准确无误。这些常见问题的解决方法,能帮助大家少走弯路,顺利搭建集群。

九、总结与展望

通过本文对 ElasticSearch 分布式部署的详细介绍,从前期准备、核心概念理解,到安装配置、安全维护等各个环节,相信大家对其有了较为全面的掌握。分布式部署为我们开启了处理海量数据的大门,但这仅仅是个开始,随着技术的不断发展,ElasticSearch 在功能优化、性能提升方面还有很大的探索空间。希望大家在实践中不断积累经验,持续优化集群,让 ElasticSearch 更好地服务于各类业务场景,助力企业在大数据浪潮中乘风破浪。

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

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

相关文章

快速上手LangChain(三)构建检索增强生成(RAG)应用

文章目录 快速上手LangChain(三)构建检索增强生成(RAG)应用概述索引阿里嵌入模型 Embedding检索和生成RAG应用(demo:根据我的博客主页,分析一下我的技术栈)快速上手LangChain(三)构建检索增强生成(RAG)应用 langchain官方文档:https://python.langchain.ac.cn/do…

Json字符串解析失败

通过第三方服务&#xff0c;拿到响应体的data对象&#xff08;拿到的时候对象是有值的&#xff09; 通过JSON.parseObject方法&#xff0c;拿到的对象&#xff0c;值为null 通过查看对应的json字符串&#xff0c;发现命名不一样... JSONField SeriealizedName注解是用来解析j…

网络安全 | 信息安全管理体系(ISMS)认证与实施

网络安全 | 信息安全管理体系&#xff08;ISMS&#xff09;认证与实施 一、前言二、信息安全管理体系&#xff08;ISMS&#xff09;概述2.1 ISMS 的定义与内涵2.2 ISMS 的核心标准 ——ISO/IEC 27001 三、信息安全管理体系&#xff08;ISMS&#xff09;认证3.1 认证的意义与价值…

《黄药师》药业管理软件 UploadFile 文件上传致RCE漏洞复现

0x01 产品简介 《黄药师》药业管理软件是一款针对我国医药或医疗器械企业经营管理特点而设计的综合管理软件。《黄药师》系列管理软件集进销存、财务、经营分析和GSP管理为一体,从企业经营的各个环节对资金流、物流、信息流等进行系统的管理。它采用“一看就懂,一学就会,一…

电子应用设计方案84:智能 AI 煤气灶系统设计

智能 AI 煤气灶系统设计 一、引言 智能 AI 煤气灶系统旨在提供更安全、便捷和高效的烹饪体验&#xff0c;结合人工智能技术实现智能化的控制和管理。 二、系统概述 1. 系统目标 - 精确控制火力大小&#xff0c;实现精准烹饪。 - 具备智能防干烧和熄火保护功能&#xff0c;确保…

带虚继承的类对象模型

文章目录 1、代码2、 单个虚继承3、vbptr是什么4、虚继承的多继承 1、代码 #include<iostream> using namespace std;class Base { public:int ma; };class Derive1 :virtual public Base { public:int mb; };class Derive2 :public Base { public:int mc; };class Deri…

python +tkinter绘制彩虹和云朵

python tkinter绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

学习随想:高维AI数据的训练和推理与一维数据的排序和查找

以下是看Attention Is All You Need这篇文章的一点随想。 说实话&#xff0c;我没看懂transformer是咋回事&#xff0c;但突然一个类比念头&#xff0c;让我感觉有点概念了&#xff0c;虽然所有的类比都是不完备的。 学习随想记录如下&#xff0c;仅供查考&#xff1a; 物理世…

vue 处理二进制文件流下载,封装请求

后端返回的文件流 前端需要处理成下载文件 刚开始一直报错 处理的方法 // http.js import instance from ./axios;export const get (url, params {}, config {}) > instance.get(url, { params, ...config });// api.js /*** 获取下载错误信息* param {string} batchI…

LeetCode 热题 100_将有序数组转换为二叉搜索树(42_108_简单_C++)(二叉树;递归)

LeetCode 热题 100_将有序数组转换为二叉搜索树&#xff08;42_108&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff09;&#xff1a; 代码实现代码实现&#xff08;递归&#xff09;&#xff1…

Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询

作者&#xff1a;来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布&#xff0c;它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结

注&#xff1a;因为本人也是第一次接入广告与支付SDK相关的操作&#xff0c;网上也查了很多教程&#xff0c;很多也都是只言片语或者缺少一些关键步骤的说明&#xff0c;导致本人也是花了很多时间与精力踩了很多的坑才搞定&#xff0c;发出来也是希望能帮助到其他人在遇到相似问…

Spring实现Logback日志模板设置动态参数

版权说明&#xff1a; 本文由博主keep丶原创&#xff0c;转载请保留此块内容在文首。 原文地址&#xff1a; https://blog.csdn.net/qq_38688267/article/details/144842327 文章目录 背景设计日志格式实现配置动态取值logback-spring.xml 相关博客 背景 多个单体服务间存在少量…

element-ui dialog 组件源码分享

简单分享 dialog 组件源码&#xff0c;主要从以下三个方面&#xff1a; 1、dialog 页面结构。 2、dialog 组件属性。 3、dialog 组件挂载。 4、dialog 组件事件。 一、dialog 页面结构&#xff1a; 二、组件属性&#xff1a; 2.1 visible 是否显示 Dialog&#xff0c;支持…

Vue3 组件之插槽

文章目录 Vue3 组件之插槽概述默认插槽具名插槽默认内容插槽没有提供内容有提供内容 作用域插槽简单使用使用解构形式 Vue3 组件之插槽 概述 插槽专门用于父组件向子组件传递标签结构。在使用时&#xff0c;一般会在子组件中通过slot来声明占位&#xff0c;在父组件中&#x…

postgres docker安装

mkdir -p /root/postgresql/data docker pull postgres:14 docker run --privilegedtrue --name postgres -e POSTGRES_PASSWORD123456 -e ALLOW_IP_RANGE0.0.0.0/0 -p 5432:5432 -v /root/postgresql/data:/var/lib/postgresql/data -d postgres:14#地址&#xff1a;192.168.3…

探索Wiki:开源知识管理平台及其私有化部署

在如今的信息时代&#xff0c;企业和团队的知识管理变得愈发重要。如何有效地存储、整理、共享和协作&#xff0c;是提高团队效率和创新能力的关键因素之一。今天&#xff0c;我要为大家介绍一款非常有用的github上开源知识管理工具——Wiki&#xff0c;并分享它的私有化部署方…

Python多分类Logistic回归详解与实践

在机器学习中&#xff0c;Logistic回归是一种基本但非常有效的分类算法。它不仅可以用于二分类问题&#xff0c;还可以扩展应用于多分类问题。本文将详细介绍如何使用Python实现一个多分类的Logistic回归模型&#xff0c;并给出详细的代码示例。 一、Logistic回归简介 Logist…

打造三甲医院人工智能矩阵新引擎(三):多模态大模型篇-Med-Gemini多面手

一、引言 1.1 研究背景与意义 近年来,随着人工智能技术的迅猛发展,医疗多模态大模型如Med-Gemini应运而生,成为医疗领域的研究热点。这些模型整合了文本、影像、基因等多源数据,能够模拟人类医生的思维方式,为医疗决策提供全面、精准的支持,有望解决传统医疗模式中的诸…

Servlet解析

概念 Servlet是运行在服务端的小程序&#xff08;Server Applet)&#xff0c;可以处理客户端的请求并返回响应&#xff0c;主要用于构建动态的Web应用&#xff0c;是SpringMVC的基础。 生命周期 加载和初始化 默认在客户端第一次请求加载到容器中&#xff0c;通过反射实例化…