当前位置: 首页 > news >正文

ElasticSearch 分布式部署

一、引言

在当今大数据时代,数据呈爆炸式增长,如何高效地存储、检索数据成为了众多企业面临的关键挑战。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 更好地服务于各类业务场景,助力企业在大数据浪潮中乘风破浪。

相关文章:

ElasticSearch 分布式部署

一、引言 在当今大数据时代&#xff0c;数据呈爆炸式增长&#xff0c;如何高效地存储、检索数据成为了众多企业面临的关键挑战。ElasticSearch 作为一款强大的分布式搜索引擎&#xff0c;凭借其卓越的性能、灵活的扩展性以及强大的全文检索能力&#xff0c;在日志分析、数据分…...

Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶

1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中&#xff0c;动态样式绑定是一种强大的功能&#xff0c;它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解&#xff1a; 一、基础知识 Vue的动态样式绑定主要通过v-b…...

vue3 video 播放rtmp视频?(360浏览器支持)

** 注意&#xff1a;目前只能在360浏览器播放rtmp视频** 谷歌浏览器不支持Flash Player的问题 试过上面这个方法&#xff0c;目前没能实现&#xff08;没解决&#xff09;&#xff0c;如果有更好的解决方法&#xff0c;告诉我一下 需要下载版本较低的video.js版本库&#xff0…...

RK356x bsp 7 - PCF8563 RTC调试记录

文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件&#xff1a;飞凌ok3568-c开发板 软件&#xff1a;原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…...

定义Shape:打造属于你的独特图形

自定义Shape:打造属于你的独特图形 在Android开发中,自定义图形绘制是一个非常重要的技能,尤其是在需要实现复杂UI或特定设计需求时。Android提供了android.graphics.drawable.shapes包,其中包含了一些基本的形状类,如RectShape、OvalShape等。然而,有时这些基本形状无法…...

JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介

1. 基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化&#xff01; 动态 web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人看的数据始终会发生变化&#xf…...

python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶

【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;二十&#xff09;使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单&#xff0c;因此可以自由操作的空间也就大&#x…...

CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型

CLIP&#xff1a;连接文本与图像&#xff0c; 从自然语言监督中学习可迁移的视觉模型 flyfish Learning Transferable Visual Models From Natural Language Supervision https://github.com/OpenAI/CLIP 摘要 CLIP Contrastive Language-Image Pre-Training Contrastive&…...

Linux 硬盘扩容 分区 挂载

Linux 硬盘扩容 分区 & 挂载 1. 添加分区 1.1. 查看新添加的硬盘 fdisk -l假设当前未挂载的盘符是/dev/sdb&#xff0c;后文中所有操作都按挂载/dev/sdb 操作 1.2. 分区管理 小硬盘 fdisk /dev/sdb大硬盘&#xff08;2TB以上&#xff09; gdisk /dev/sdb1.3. 编辑分…...

基于 Slf4j 和 AOP 的自动化方法执行时间日志记录方案

前言 其实这个需求很简单&#xff0c;但是这个需求又是项目中必不可少的&#xff0c;尤其对于性能调优这块&#xff0c;但是使用哪种方式更加方便呢&#xff0c;这就是本篇博文需要讨论的重点 系统时间 可以通过 System.currentTimeMillis() 或 System.nanoTime() 来实现。 …...

关于 K8s 的一些基础概念整理-补充【k8s系列之二】

〇、前言 本文继续整理下 K8s 的一些基础概念&#xff0c;作为前一篇概念汇总的补充。 前一篇博文链接&#xff1a;关于 K8s 的一些基础概念整理【k8s系列之一】_集群 master节点 控制节点 宿主机-CSDN博客 一、详情 1.1 Label Label 在 k8s 中是一个非常核心的概念&#xf…...

FPGA的DMA应用——pcileech

硬件通过pcie总线&#xff0c;访存本机的内存&#xff0c;并进行修改&#xff0c;可以进行很多操作。 学习视频&#xff1a;乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址&#xff1a;AMD-Xilinx Vivado™ 2024.1 现…...

信息安全管理:运行管理checklist

运行管理checklist内容包括日常操作与维护管理、变更管理、备份与故障恢复、应急与业务连续性管理等内容。 一、日常操作与维护管理 ▼▼制度与流程 是否建立日常运行操作制度与流程&#xff1f;包括网络、主机、应用等方面的操作制度与流程&#xff1f; 是否明确相关部门和人…...

Linux系统之stat命令的基本使用

Linux系统之stat命令的基本使用 一、stat命令 介绍二、stat命令帮助2.1 查询帮助信息2.2 stat命令的帮助解释 三、stat命令的基本使用3.1 查询文件信息3.2 查看文件系统状态3.3 使用格式化输出3.4 以简洁形式打印信息 四、注意事项 一、stat命令 介绍 stat 命令用于显示文件或文…...

云手机+Facebook:让科技与娱乐完美结合

移动互联网时代&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;早已成为企业、品牌和组织竞相角逐的营销阵地。而云手机的出现&#xff0c;则为Facebook营销注入了新的活力&#xff0c;其独特的优势让营销活动更加高效、精准且灵活。本文将深入探讨云手机在Fa…...

为什么要在PHY芯片和RJ45网口中间加网络变压器

在PHY芯片和RJ45网口之间加入网络变压器是出于以下几个重要的考虑&#xff1a; 1. 电气隔离&#xff1a;网络变压器提供了电气隔离功能&#xff0c;有效阻断了PHY芯片与RJ45之间直流分量的直接连接。这样可以防止可能的电源冲突&#xff0c;降低系统故障的风险&#xff0c;并保…...

LeetCode 19:删除链表的倒数第N 个结点

题目&#xff1a; 地址&#xff1a;https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 方法一&#xff1a; 方法二&#xff1a; 代码&#xff1a; package com.zy.leetcode.LeetCode_19;/*** Author: zy* Date: 2024-12-25-13:01* Description: 删除链表…...

RT-DETR融合[IJCV2024]LSKNet中的LSKBlock模块

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Large Selective Kernel Network for Remote Sensing Object Detection》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2303.09030 代码链接&#xff1a;https:…...

C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码

一、树的存储结构 1&#xff09;双亲表示法实现&#xff1a; 定义结构数组存放树的结点&#xff0c;每个结点含两个域: 数据域&#xff1a;存放结点本身信息。双亲域&#xff1a;指示本结点的双亲结点在数组中的位置。 特点&#xff1a;找双亲简单&#xff0c;找孩子难 C语…...

新浪微博大数据面试题及参考答案(数据开发和数据分析)

介绍一下你所掌握的计算机网络和操作系统相关知识 计算机网络:计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。我掌握了网络协议…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...