在CentOS 7上安装和配置Elasticsearch的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强大的功能和可扩展性而备受青睐。

Elasticsearch 支持 RESTful 操作。这意味着您可以使用 HTTP 方法(GETPOSTPUTDELETE 等)与 HTTP URI(/collection/entry)结合使用来操作您的数据。直观的 RESTful 方法既方便开发人员又用户友好,这也是 Elasticsearch 受欢迎的原因之一。

Elasticsearch 是一款免费且开源的软件,由一个实力雄厚的公司 Elastic 提供支持。这使得它适用于从个人测试到企业集成的许多用例。

本文将向您介绍 Elasticsearch,并展示如何安装、配置和开始使用它。

先决条件

要按照本教程操作,您需要以下内容:

  • 运行 CentOS 7 的服务器,至少具有 1GB 内存和一个非 root sudo 用户。有关详细说明,请查看我们的 CentOS 7 初始服务器设置指南
  • 在您的服务器上安装了 wget

步骤 1 — 在 CentOS 7 上安装 Java

Elasticsearch 是用 Java 编写的。因此,您的第一个任务是在服务器上安装 Java 运行环境(JRE)。您将使用本机 CentOS OpenJDK 软件包来安装 JRE。这个 JRE 是免费的,得到良好支持,并通过 CentOS Yum 安装管理器自动管理。

安装最新版本的 OpenJDK 8:

sudo yum install java-1.8.0-openjdk.x86_64

现在验证您的安装:

java -version

该命令将创建以下输出:


openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

当您开始使用 Elasticsearch 并开始寻找更好的 Java 性能和兼容性时,您可以选择安装 Oracle 的专有 Java(Oracle JDK 8)。有关更多信息,请参阅我们的文章《如何在 CentOS 和 Fedora 上安装 Java》。

步骤 2 — 在 CentOS 7 上下载和安装 Elasticsearch

您可以直接从 elastic.co 下载 Elasticsearch,格式为 ziptar.gzdebrpm 包。对于 CentOS,最好使用本机的 rpm 包,它将安装运行 Elasticsearch 所需的一切。

在撰写本文时,最新的 Elasticsearch 版本是 7.9.2。

从您选择的工作目录中,下载该程序:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-x86_64.rpm

然后使用 rpm 命令进行安装:

sudo rpm -ivh elasticsearch-7.9.2-x86_64.rpm

Elasticsearch 将安装在 /usr/share/elasticsearch/,其配置文件放置在 /etc/elasticsearch,其初始化脚本添加在 /etc/init.d/elasticsearch

为了确保 Elasticsearch 随服务器自动启动和停止,将其初始化脚本添加到默认运行级别:

sudo systemctl enable elasticsearch.service

安装了 Elasticsearch 后,您现在将配置一些重要的设置。

步骤 3 — 在 CentOS 7 上配置 Elasticsearch

现在您已经安装了 Elasticsearch 及其 Java 依赖,是时候配置 Elasticsearch 了。

Elasticsearch 的配置文件位于 /etc/elasticsearch 目录中。我们将要审查和编辑的文件包括:

  • elasticsearch.yml — 配置 Elasticsearch 服务器设置。这是大多数选项存储的地方,这也是我们最感兴趣的原因。

  • jvm.options — 提供 JVM 的配置,如内存设置。

在任何 Elasticsearch 服务器上自定义的第一个变量是 elasticsearch.yml 中的 node.namecluster.name。让我们现在来做这件事。

正如它们的名称所示,node.name 指定了服务器(节点)的名称,以及后者所关联的集群。如果您不自定义这些变量,node.name 将根据服务器主机名自动分配。cluster.name 将自动设置为默认集群的名称。

cluster.name 的值被 Elasticsearch 的自动发现功能用于自动发现和关联 Elasticsearch 节点到一个集群。因此,如果您不更改默认值,您可能会在同一网络上发现不需要的节点加入到您的集群中。

让我们开始编辑主要的 elasticsearch.yml 配置文件。

使用 nano 或您喜欢的文本编辑器打开它:

sudo nano /etc/elasticsearch/elasticsearch.yml

删除 # 字符以取消注释 node.namecluster.name 行,并更改它们的值。您在 /etc/elasticsearch/elasticsearch.yml 文件中的第一个配置更改将如下所示:


...
node.name: "My First Node"
cluster.name: mycluster1
...

网络设置也可以在 elasticsearch.yml 中找到。默认情况下,Elasticsearch 将在本地主机上的端口 9200 上监听,以便只有来自同一服务器的客户端可以连接。出于安全考虑,您应该保持这些设置不变,因为开源和免费版的 Elasticsearch 不提供身份验证功能。

另一个重要的设置是 node.roles 属性。您可以将其设置为 master-eligible(在配置中简称为 master)、dataingest

master-eligible 角色负责集群的健康和稳定性。在具有大量集群节点的大型部署中,建议至少有一个专用的仅具有 master 角色的节点。通常,专用的 master 节点既不存储数据也不创建索引。因此,不会有过载的机会,从而可能危及集群健康。

data 角色定义将存储数据的节点。即使数据节点过载,只要有其他节点可以承担额外的负载,集群健康就不会受到严重影响。

最后,ingest 角色允许节点接受和处理数据流。在较大的设置中,应该有专门的 ingest 节点,以避免可能对 masterdata 节点造成的过载。

另一个要考虑更改的设置是 path.data。这确定数据存储的路径,默认路径是 /var/lib/elasticsearch。在生产环境中,建议您使用专用分区和挂载点来存储 Elasticsearch 数据。在最佳情况下,这个专用分区将是一个单独的存储介质,将提供更好的性能和数据隔离。您可以通过取消注释 path.data 行并更改其值来指定不同的 path.data 路径,如下所示:


...
path.data: /media/different_media
...

现在您已经做出了所有更改,请保存并关闭 elasticsearch.yml

您还必须编辑 jvm.options 中的配置。

请记住,Elasticsearch 是由 JVM 运行的,即本质上它是一个 Java 应用程序。因此,与任何 Java 应用程序一样,它有可以在文件 /etc/elasticsearch/jvm.options 中配置的 JVM 设置。其中两个最重要的设置,特别是关于性能方面,是 XmsXmx,它们定义了最小(Xms)和最大(Xmx)内存分配。

默认情况下,两者都设置为 1GB,但这几乎从来不是最佳选择。不仅如此,如果您的服务器只有 1GB 的 RAM,您将无法使用默认设置启动 Elasticsearch。这是因为操作系统至少需要 100MB,因此将无法将 1GB 分配给 Elasticsearch。

遗憾的是,没有一个通用的公式可以计算内存设置。当然,您分配的内存越多,性能就越好,但请确保为服务器上的其他进程留出足够的内存。例如,如果您的机器有 1GB 的 RAM,您可以将 XmsXmx 都设置为 512MB,从而为其他进程留出另外的 512MB。请注意,通常为了避免 JVM 垃圾回收的性能损失,XmsXmx 都设置为相同的值。

如果您的服务器只有 1GB 的 RAM,您必须编辑此设置。

打开 jvm.options

sudo nano /etc/elasticsearch/jvm.options

现在将 XmsXmx 的值更改为 512MB


...
-Xms512m
-Xmx512m
...

保存并退出文件。

现在首次启动 Elasticsearch:

sudo service elasticsearch start

在尝试使用它之前,请至少等待 10 秒让 Elasticsearch 启动。否则,您可能会遇到连接错误。

安装和配置了 Elasticsearch 后,您现在将对服务器进行安全设置和测试。

步骤 4 — (可选)在 CentOS 7 上保护 Elasticsearch

Elasticsearch 没有内置的安全机制,任何可以访问 HTTP API 的人都可以控制它。本节不是一个全面的 Elasticsearch 安全指南。请采取必要的措施防止未经授权的访问以及运行 Elasticsearch 的服务器/虚拟机。

默认情况下,Elasticsearch 配置为仅在本地网络接口上监听,即无法进行远程连接。除非您已经采取了以下一项或两项措施,否则应保持此设置不变:

  • 使用 iptables 限制对 TCP 端口 9200 的访问仅限于受信任的主机。
  • 在受信任的主机之间创建了 VPN,并且您将在 VPN 的虚拟接口之一上公开 Elasticsearch。

只有在完成上述操作后,才应考虑允许 Elasticseach 在本地网络接口之外的其他网络接口上进行监听。例如,当您需要从另一台主机连接到 Elasticsearch 时,可以考虑进行此更改。

要更改网络暴露设置,请打开文件 elasticsearch.yml

sudo nano /etc/elasticsearch/elasticsearch.yml

在该文件中找到包含 network.host 的行,通过删除行首的 # 字符来取消注释,并将值更改为受保护网络接口的 IP 地址。该行将类似于:


...
network.host: 10.0.0.1
...

此外,为了增强安全性,您可以禁用用于评估自定义表达式的脚本。通过构造自定义恶意表达式,攻击者可能会危害您的环境。

要禁用自定义表达式,请在 /etc/elasticsearch/elasticsearch.yml 文件末尾添加以下行:

...

script.allowed_types: none
...

要使上述更改生效,您需要重新启动 Elasticsearch。

现在重新启动 Elasticsearch:

sudo service elasticsearch restart

在此步骤中,您已经采取了一些措施来保护您的 Elasticsearch 服务器。现在您已准备好测试该应用程序。

步骤 5 — 在 CentOS 7 上测试 Elasticsearch

此时,Elasticsearch 应该正在 9200 端口上运行。您可以使用 curl,这是用于客户端 URL 传输的命令行工具,来测试这一点。

要测试该服务,请执行如下 GET 请求:

curl -X GET 'http://localhost:9200'

您将看到以下响应:


{
  "name" : "My First Node",
  "cluster_name" : "mycluster1",
  "cluster_uuid" : "R23U2F87Q_CdkEI2zGhLGw",
  "version" : {
    "number" : "7.9.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
    "build_date" : "2020-09-23T00:45:33.626720Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

如果您看到类似的响应,则 Elasticsearch 正常工作。如果没有,请重新检查安装说明,并留出一些时间让 Elasticsearch 完全启动。

您的 Elasticsearch 服务器现在已经运行。在下一步中,您将向该应用程序添加数据并检索数据。

步骤 6 — 在 CentOS 7 上使用 Elasticsearch

在此步骤中,您将向 Elasticsearch 添加一些数据,然后进行一些手动查询。

使用 curl 添加您的第一个条目:

curl -H 'Content-Type: application/json' -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

您将看到以下输出:


{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4

通过使用 curl,您向 Elasticseach 服务器发送了一个 HTTP POST 请求。请求的 URI 是 /tutorial/helloworld/1。让我们更仔细地看一下这些参数:

  • tutorial 是 Elasticsearch 中数据的索引。
  • helloworld 是类型。
  • 1 是上述索引和类型下我们条目的 id。

请注意,对所有 POST 请求设置内容类型为 JSON 是必需的,使用参数 -H 'Content-Type: application/json'。如果不这样做,Elasticsearch 将拒绝您的请求。

现在,使用 HTTP GET 请求检索您的第一个条目:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

结果将如下所示:


{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}

要修改现有条目,您可以使用 HTTP PUT 请求,如下所示:

curl -H 'Content-Type: application/json' -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
  "message": "Hello People!"
}'

Elasticsearch 将确认成功修改,如下所示:


{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

在上述示例中,您将第一个条目的 message 修改为 "Hello People!"。随之,版本号增加为 2

为了使您的 GET 操作的输出更易读,您还可以通过添加 pretty 参数来使结果更易读:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'

现在,响应将以更易读的格式输出:


{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "message" : "Hello People!"
  }
}

这就是您如何在 Elasticsearch 中添加和查询数据。要了解其他操作,请查看 Elasticsearch API 文档。

结论

在本教程中,您已经在 CentOS 7 上安装、配置并开始使用 Elasticsearch。一旦您熟悉了手动查询,下一个任务将是从您的应用程序开始使用该服务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3.0(十五)状态管理vuex和pinia

文章目录 状态管理vuex1. 什么情况下应该使用 Vuex2. vuex的安装3. vuex的五大属性4. vuex的五大属性在组件中的应用5. 数据持久化 pinia1.Pinia 对比 Vuex2.安装及引入3.三大属性4.三大属性在组件中的运用总结 状态管理 状态管理是指对Vue.js应用中的数据进行统一管理的一种机…

【.Net】Web项目部署腾讯云

文章目录 总述前置准备docker-compose部署普通部署 参考 总述 前置准备 云服务添加端口 另有linux本身防火墙请参考: 【Linux】防火墙命令 需安装.Net SDK和Asp .Net Runtime 注意: 1、sdk也要不只是runtime 2、是Asp .Net Runtime不是.Net Runtime …

擎耀解码汽车大灯照明系统电动调节步进电机位置反馈的解决方案

在现代汽车设计中,智能照明系统扮演着至关重要的角色。其中,汽车大灯的电动调节功能不仅提高了夜间行车的安全性,还增强了车辆的科技感和便利性。然而,要实现精准的大灯角度调节,步进电机的位置反馈机制尤为关键。擎耀…

SpringBoot脚手架MySpringBootAPI(PgSQL+Druid+MyBatisPlus+Lombok)

MySpringBootAPI SpringBoot脚手架,基于SpringBootDruidPgSQLMyBatisPlusFastJSONLombok,其他的请自行添加和配置。 Author powered by Moshow郑锴(大狼狗) , https://zhengkai.blog.csdn.net 如何运行 1.首先确保你是JDK17,推荐微软的MSJDK…

《Windows API每日一练》6.4 程序测试

前面我们讨论了鼠标的一些基础知识,本节我们将通过一些实例来讲解鼠标消息的不同处理方式。 本节必须掌握的知识点: 第36练:鼠标击中测试1 第37练:鼠标击中测试2—增加键盘接口 第38练:鼠标击中测试3—子窗口 第39练&…

ECharts 源码代码规范

代码规范 - Apache EChartsApache ECharts,一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。https://echarts.apache.org/zh/coding-standard.html 源文件 [强制] JavaScr…

基于ARM的通用的Qt移植思路

文章目录 实验环境介绍一、确认Qt版本二、确认交叉编译工具链三、配置Qt3.1、修改qmake.conf3.2、创建autoConfig.sh配置文件 四、编译安装Qt五、移植Qt安装目录六、配置Qt creator6.1、配置qmake6.2、配置GCC编译器6.3、配置G编译器6.4、配置编译器套件6.5、创建应用 七、总结…

论文速览 | IEEE Signal Processing Letters, 2024 | 基于时空上下文学习的事件相机立体深度估计

论文速览 | IEEE Signal Processing Letters, 2024 | 基于时空上下文学习的事件相机立体深度估计 1 引言 在计算机视觉领域,立体深度估计一直是一个备受关注的研究热点。传统的基于帧的方法虽然取得了长足的进步,但在处理运动模糊、低照度和平坦区域等挑战性场景时仍面临诸多…

二进制方式部署k8s集群

前置知识点 1、生产环境部署K8s集群的两种方式 • kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 • 二进制包 从github下载发行版的二进制包,手动部署每个组件,组成Kub…

Linux的fread函数

fread函数 从文件中读入数据到指定的地址中 函数原型 : size_t fread(void*buff , size_t size, size_t count , FILE* stream) /* * description : 对已打开的流进行数据读取 * param ‐ ptr :指向 数据块的指针 * param ‐ size :指定读取的每…

LabVIEW编程控制ABB机械臂

使用LabVIEW编程控制ABB机械臂是一项复杂但十分有价值的任务。通过LabVIEW,可以实现对机械臂的精确控制和监控,提升自动化水平和操作效率。 1. 项目规划和硬件选型 1.1 确定系统需求 运动控制:确定机械臂需要执行的任务,如抓取、…

【总线】AXI4第四课时:握手机制详解

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…

乐观锁和悲观锁(MySQL和Java)

乐观锁和悲观锁(MySQL和Java) 在并发编程中,为了确保数据的一致性和完整性,我们通常需要使用锁机制来控制对共享资源的访问。锁主要分为两种:乐观锁和悲观锁。本文将详细介绍这两种锁的概念、工作原理以及它们的优缺点。 悲观锁 悲观锁(Pe…

LabVIEW电涡流检测系统

开发了一种基于LabVIEW的软件与硬件结合的电涡流检测系统,通过同步采样技术和编码器的协同工作,显著提高了大型结构物的损伤检测精度和效率,具有良好的应用前景和实用价值。 项目背景 传统的手持式电涡流检测方法因其速度慢、灵敏度低、准确…

根文件系统

根文件系统 1 介绍1.1 根文件系统介绍1.2 根文件系统目录1.3 常见的根文件系统 2 Buildroot 根文件系统的构建2.1 介绍2.2 依赖文件2.3 交叉编译工具2.4 构建2.4.1 配置 Target options2.4.2 配置 Toolchain2.4.3 配置 System configuration2.4.4 配置 Filesystem images2.4.5 …

微服务知识

传统架构 传统架构会出现的问题 配置烦琐,上线容易出错 加机器要重启 负载均衡单点 管理困难 CAP原则。 CAP原则是指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Toleranc…

产品中心|高效能双处理器Xilinx FPGA 4通道射频收发板卡

1、产品概述 基于Xilinx XC7K325T芯片的4通道射频收发板卡,搭载高能效Cortex-A8内核处理器、1组16bit/2GB DDR3及1组4GB DDR3、 1组2GB Nand Flash、1路USB接口、4路高速ADC、4路高速DAC,支持外触发,外时钟。用于FPGA程序加载板卡工作温度范…

Zynq7000系列FPGA中的DMA控制器简介(一)

DMA控制器(DMAC)使用64位AXI主接口来执行与系统存储器和PL外围设备之间的DMA数据传输,操作频率同CPU_2x的时钟速率。传输由DMA指令执行引擎控制。DMA引擎运行在一个小指令集上,该指令集提供了一种灵活的指定DMA传输的方法。这种方…

激光雷达数据处理

激光雷达技术以其高精度、高效率的特点,已经成为地表特征获取、地形建模、环境监测等领域的重要工具。掌握激光雷达数据处理技能,不仅可以提升工作效率,还能够有效提高数据的质量和准确性,为决策提供可靠的数据支持。 第一章、激…

STM32_hal库学习(3)-OLED显示

硬件:stm32f103c8t6,四脚oled 四脚OLED用的是iic通讯协议,什么是IIC通讯协议?具体可看这篇文章。 stm32中IIC通讯协议-CSDN博客 既然了解了iic协议,接下来我们就利用stm32cubemx来配置oled。 1.新建一个工程 2.然…