当前位置: 首页 > 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语…...

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

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

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...