ElasticSearch 分布式部署

news/2024/12/29 6:30:25/

一、引言

在当今大数据时代,数据呈爆炸式增长,如何高效地存储、检索数据成为了众多企业面临的关键挑战。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.ppmy.cn/news/1559000.html

相关文章

LeetCode 59. 螺旋矩阵 II (C++实现)

1. 题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a; 输入&#xf…

torch.tensor

torch.tensor 通过复制数据构造一个张量 &#xff08;构造出的张量是一个没有自动微分&#xff08;autograd &#xff09;历史的张量&#xff0c;也称为叶张量&#xff0c;参考Autograd mechanics&#xff09;。 torch.tensor(data, *, dtypeNone, deviceNone, requires_gra…

微软远程桌面APP怎么用

微软远程桌面&#xff08;Remote Desktop&#xff09;客户端&#xff08;RD Client&#xff09;是一款由微软开发的应用程序&#xff0c;允许用户通过网络连接远程访问和控制另一台计算机。同时&#xff0c;微软远程桌面RD Client支持多种设备和操作系统&#xff0c;包括Window…

使用 Three.js 创建动态卡片动画

介绍 我们将学习如何使用 Three.js 创建一个具有动态卡片动画和粒子效果的 3D 场景。项目包括&#xff1a; 卡片的动态进入与点击旋转动画背景粒子效果通过鼠标交互实现卡片旋转 HTML 和 CSS HTML 文件是项目的基础结构&#xff0c;用于引入相关的依赖和定义渲染 3D 场景的容…

Go主协程如何等其余协程完再操作

在Go语言中&#xff0c;主协程&#xff08;main goroutine&#xff09;可以使用多种方式来等待其他协程完成其操作。常见的方法是使用通道&#xff08;channels&#xff09;和 sync 包中的工具&#xff0c;比如 sync.WaitGroup。以下是这两种方法的示例&#xff1a; 使用 sync…

Dockerfile运行指令

1.RUN 在build构建时执行命令。 举例&#xff1a;安装vim Shell命令格式 RUN yum install -y vim Exec命令格式 RUN ["yum","install","-y","vim"] 2.CMD 用于设置容器启动时默认执行的命令或参数。 如果Dockerfile中有多个CMD&a…

简单园区网拓扑实验

1.实验拓扑 2.实验要求 1、按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan 4、上层通过静态路由协议完成数据通信过程 5、AR1为企业出口路由器 6、要求全网可…

Zookeeper下面的conf目录下面的zoo.cfg

zoo.cfg 是 ZooKeeper 安装目录下 conf 目录中的一个核心配置文件。这个文件包含了启动和运行 ZooKeeper 服务所需的所有配置信息。 zoo.cfg 文件中的内容通常包括以下部分&#xff1a; tickTime&#xff1a;这是 ZooKeeper 中最小的时间单位&#xff08;以毫秒为单位&#xf…