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

在Ubuntu 16.04上安装和配置Elasticsearch的方法

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

简介

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

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

Elasticsearch 是一款免费且开源的软件,由 Elastic 公司提供支持。这种组合使其适用于个人测试到企业集成等各种场景。

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

先决条件

在按照本教程操作之前,您需要:

  • 通过按照《使用 Ubuntu 16.04 进行初始服务器设置》设置好的 Ubuntu 16.04 Droplet,包括创建一个 sudo 非根用户。

  • 安装了 Oracle JDK 8,您可以按照这篇 Java 安装文章中的“安装 Oracle JDK”部分进行操作。

除非另有说明,本教程中需要 root 权限的所有命令都应该以具有 sudo 权限的非根用户身份运行。

步骤 1 — 下载并安装 Elasticsearch

Elasticsearch 可以直接从 elastic.co 以 ziptar.gzdebrpm 包的形式下载。对于 Ubuntu,最好使用 deb(Debian)包,它会安装运行 Elasticsearch 所需的一切。

首先,更新您的软件包索引。

sudo apt-get update

下载最新的 Elasticsearch 版本,本文撰写时为 2.3.1。

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

然后按照通常的 Ubuntu 方法使用 dpkg 进行安装。

sudo dpkg -i elasticsearch-2.3.1.deb

这将导致 Elasticsearch 安装在 /usr/share/elasticsearch/,其配置文件放置在 /etc/elasticsearch,并将其 init 脚本添加到 /etc/init.d/elasticsearch

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

sudo systemctl enable elasticsearch.service

在首次启动 Elasticsearch 之前,请查看下一节关于推荐的最小配置。

步骤 2 — 配置 Elasticsearch

现在 Elasticsearch 及其 Java 依赖已安装,是时候配置 Elasticsearch 了。Elasticsearch 配置文件位于 /etc/elasticsearch 目录中。有两个文件:

  • elasticsearch.yml 配置 Elasticsearch 服务器设置。这是存储所有选项(除了日志选项)的地方,这也是我们主要关注的文件。

  • logging.yml 提供日志配置。一开始,您不必编辑此文件。您可以保留所有默认的日志选项。您可以在 /var/log/elasticsearch 中找到生成的日志。

在任何 Elasticsearch 服务器上自定义的第一个变量是 elasticsearch.yml 中的 node.namecluster.name。正如它们的名称所示,node.name 指定服务器(节点)的名称,以及后者所关联的集群。

如果您不自定义这些变量,node.name 将根据 Droplet 主机名自动分配。cluster.name 将自动设置为默认集群的名称。

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

开始使用 nano 或您喜欢的文本编辑器编辑主要的 elasticsearch.yml 配置文件。

sudo nano /etc/elasticsearch/elasticsearch.yml

删除 cluster.namenode.name 行开头的 # 字符以取消注释,然后更新它们的值。您在 /etc/elasticsearch/elasticsearch.yml 文件中的第一个配置更改应该如下所示:

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

这是您可以使用 Elasticsearch 的最小设置。但是,建议继续阅读配置部分,以更全面地了解和微调 Elasticsearch。

Elasticsearch 的一个特别重要的设置是服务器的角色,即主服务器或从服务器。主服务器 负责集群的健康和稳定性。在具有大量集群节点的大型部署中,建议有多个专用主服务器。通常,专用主服务器不会存储数据或创建索引。因此,不应该有被过载的机会,从而危及集群的健康。

从服务器 用作可以加载数据任务的工作节点。即使从节点过载,只要有其他节点可以承担额外负载,集群的健康就不会受到严重影响。

确定服务器角色的设置称为 node.master。默认情况下,节点是主节点。如果您只有一个 Elasticsearch 节点,应该将此选项保留为默认的 true 值,因为至少需要一个主节点。或者,如果希望将节点配置为从节点,请将变量 node.master 分配为 false 值,如下所示:

. . .
node.master: false
. . .

另一个重要的配置选项是 node.data,它确定节点是否存储数据。在大多数情况下,此选项应该保持其默认值(true),但有两种情况下您可能希望不在节点上存储数据。一种情况是当节点是之前提到的专用主节点时。另一种情况是当节点仅用于从其他节点获取数据和聚合结果时。在后一种情况下,节点将充当 搜索负载均衡器

同样,如果您只有一个 Elasticsearch 节点,您不应更改此值。否则,要禁用本地存储数据,请将 node.data 指定为 false,如下所示:

. . .
node.data: false
. . .

在具有许多节点的较大 Elasticsearch 部署中,另外两个重要选项是 index.number_of_shardsindex.number_of_replicas。前者确定索引将被分割成多少片或 分片。后者定义将分布在集群中的副本数量。拥有更多分片可以提高索引性能,而拥有更多副本可以加快搜索速度。

默认情况下,分片数为 5,副本数为 1。假设您仍在单个节点上探索和测试 Elasticsearch,您可以从一个分片和零副本开始。因此,它们的值应该设置如下:

. . .
index.number_of_shards: 1
index.number_of_replicas: 0
. . .

您可能有兴趣更改的最后一个设置是 path.data,它确定数据存储的路径。默认路径是 /var/lib/elasticsearch。在生产环境中,建议您为存储 Elasticsearch 数据使用专用分区和挂载点。在最佳情况下,这个专用分区将是一个单独的存储介质,它将提供更好的性能和数据隔离。您可以通过如下方式指定不同的 path.data 路径:

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

一旦您做出所有更改,请保存并退出文件。现在您可以首次启动 Elasticsearch。

sudo systemctl start elasticsearch

在尝试使用它之前,请给 Elasticsearch 一些时间完全启动。否则,您可能会收到关于无法连接的错误。

第三步 —— 安全配置 Elasticsearch

默认情况下,Elasticsearch 没有内置安全性,可以被可以访问 HTTP API 的任何人控制。这并不总是一个安全风险,因为 Elasticsearch 只监听回环接口(即 127.0.0.1),只能在本地访问。因此,不可能进行公共访问,只要所有服务器用户都是受信任的,或者这是一个专用的 Elasticsearch 服务器,你的 Elasticsearch 就足够安全。

但是,如果你希望加强安全性,首先要做的是启用身份验证。身份验证由商业版的 Shield 插件提供。不幸的是,这个插件不是免费的,但你可以使用免费的 30 天试用来测试它。它的官方页面有很好的安装和配置说明。你可能需要额外了解的唯一一件事是 Elasticsearch 插件安装管理器的路径是 /usr/share/elasticsearch/bin/plugin

如果你不想使用商业插件,但仍然需要允许远程访问 HTTP API,你至少可以通过 Ubuntu 的默认防火墙 UFW(Uncomplicated Firewall)限制网络暴露。默认情况下,UFW 已安装但未启用。如果你决定使用它,请按照以下步骤操作:

首先,创建规则以允许任何所需的服务。你至少需要允许 SSH,以便可以登录服务器。要允许 SSH 的全球访问,可以将端口 22 加入白名单。

sudo ufw allow 22

然后允许对受信任的远程主机(例如 TRUSTED_IP)的默认 Elasticsearch HTTP API 端口(TCP 9200)的访问,如下所示:

sudo ufw allow from TRUSTED_IP to any port 9200

之后,使用以下命令启用 UFW:

sudo ufw enable

最后,使用以下命令检查 UFW 的状态:

sudo ufw status

如果你已经正确指定了规则,输出应该如下所示:

[secondary_label Output of java -version]
Status: activeTo                         Action      From
--                         ------      ----
9200                       ALLOW       TRUSTED_IP
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

确认 UFW 已启用并保护 Elasticsearch 端口 9200 后,你可以允许 Elasticsearch 监听外部连接。要做到这一点,再次打开 elasticsearch.yml 配置文件。

sudo nano /etc/elasticsearch/elasticsearch.yml

找到包含 network.bind_host 的行,通过删除行首的 # 字符来取消注释,并将值更改为 0.0.0.0,使其如下所示:

. . .
network.host: 0.0.0.0
. . .

我们指定了 0.0.0.0,以便 Elasticsearch 监听所有接口和绑定的 IP。如果你希望它只监听特定接口,可以在 0.0.0.0 的位置指定其 IP。

要使上述设置生效,使用以下命令重新启动 Elasticsearch:

sudo systemctl restart elasticsearch

之后,尝试从受信任的主机连接到 Elasticsearch。如果无法连接,请确保 UFW 正常工作,并且已正确指定了 network.host 变量。

第四步 —— 测试 Elasticsearch

到目前为止,Elasticsearch 应该在端口 9200 上运行。你可以使用 curl,这个命令行客户端 URL 传输工具和一个简单的 GET 请求来测试它。

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

你应该会看到以下响应:

[secondary_label Output of curl]
{"name" : "My First Node","cluster_name" : "mycluster1","version" : {"number" : "2.3.1","build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39","build_timestamp" : "2016-04-04T12:25:05Z","build_snapshot" : false,"lucene_version" : "5.5.0"},"tagline" : "You Know, for Search"
}

如果你看到类似上面的响应,说明 Elasticsearch 正常工作。如果没有,请确保你已正确遵循安装说明,并且已允许 Elasticsearch 充分启动。

要对 Elasticsearch 进行更彻底的检查,执行以下命令:

curl -XGET 'http://localhost:9200/_nodes?pretty'

在上述命令的输出中,你可以看到并验证节点、集群、应用程序路径、模块等的所有当前设置。

第五步 — 使用 Elasticsearch

要开始使用 Elasticsearch,让我们首先添加一些数据。如前所述,Elasticsearch 使用 RESTful API,响应通常的 CRUD 命令:create(创建)、read(读取)、update(更新)和 delete(删除)。为了使用它,我们将再次使用 curl

您可以使用以下命令添加您的第一个条目:

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

您应该会看到以下响应:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

通过 curl,我们向 Elasticsearch 服务器发送了一个 HTTP POST 请求。请求的 URI 是 /tutorial/helloworld/1,带有几个参数:

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

您可以使用 HTTP GET 请求检索这个第一个条目。

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

结果应该如下所示:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}

要修改现有条目,您可以使用 HTTP PUT 请求。

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

Elasticsearch 应该会确认成功修改,如下所示:

{"_index" : "tutorial","_type" : "helloworld","_id" : "1","_version" : 2,"_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"created" : false
}

在上面的示例中,我们将第一个条目的 message 修改为 “Hello People!”。因此,版本号已自动增加到 2

您可能已经注意到上述请求中的额外参数 pretty。它启用了人类可读的格式,这样您可以将每个数据字段写在新的一行上。当检索数据并获得更好的输出时,您也可以使结果“漂亮化”:

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

现在响应将以更好的格式呈现:

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

到目前为止,我们已经向 Elasticsearch 添加了数据并进行了查询。要了解其他操作,请查看 API 文档。

结论

这就是安装、配置和开始使用 Elasticsearch 有多么容易。一旦您已经足够熟悉手动查询,您的下一个任务将是从您的应用程序开始使用它。

相关文章:

在Ubuntu 16.04上安装和配置Elasticsearch的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强大功能和可扩展性而备受欢迎。 Elasticsearch 支持 R…...

C#给SqlSugar封装一个单例类

.NET兼职社区 可以直接用,轻量方便,无需重复造轮子。 这里只对CRUD进行封装,我的应用比较简单。 using SqlSugar; using System.Collections.Generic;namespace MusicApp.Assist {internal class SqlSugarAssist{private static readonly ob…...

Postman接口测试工具的原理及应用详解(六)

本系列文章简介: 在当今软件开发的世界中,接口测试作为保证软件质量的重要一环,其重要性不言而喻。随着前后端分离开发模式的普及,接口测试已成为连接前后端开发的桥梁,确保前后端之间的数据交互准确无误。在这样的背景…...

【算法 之插入排序 原理及案例】

插入排序原理: 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常…...

第一节:如何开发第一个spring boot3.x项目(自学Spring boot 3.x的第一天)

大家好,我是网创有方,从今天开始,我会记录每篇我自学spring boot3.x的经验。只要我不偷懒,学完应该很快,哈哈,更新速度尽可能快,想和大佬们一块讨论,如果需要讨论的欢迎一起评论区留…...

JS逆向:由 words 、sigBytes 引发的一系列思考与实践

【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 在做JS逆向时,你是否经常看到 words 和 sigBytes 这两个属性呢,比如&#xff…...

计算机的错误计算(十五)

摘要 介绍历史上由于计算精度问题引起的灾难或事件。 今天换个话题,说说历史上曾经发生过的一些事件。 1961 年 , 美国麻省理工学院气象学家洛伦兹在仿真天气预报时 , 将 0.506127 舍入到 0.506 , 所得计算结果大相径庭 ! 这种“差之毫厘 , 谬以千里”的现象…...

制作img文件

安装软件包 sudo apt-get install dosfstools dump parted kpartx 创建空白img文件 sudo dd if/dev/zero ofraspberrypi.img bs1M count4000 给img文件分区 sudo parted raspberrypi.img --script -- mklabel msdos sudo parted raspberrypi.img --script -- mkpart primar…...

GB28181视频汇聚平台EasyCVR接入Ehome设备视频播放出现异常是什么原因?

多协议接入视频汇聚平台EasyCVR视频监控系统采用了开放式的架构,系统可兼容多协议接入,包括市场标准协议:国标GB/T 28181协议、GA/T 1400协议、JT808、RTMP、RTSP/Onvif协议;以及主流厂家私有协议及SDK,如:…...

Java利用poi实现word,excel,ppt,pdf等各类型文档密码检测

介绍 最近工作上需要对word,excel,ppt,pdf等各类型文档密码检测,对文件进行分类,有密码的和没密码的做区分。查了一堆资料和GPT都不是很满意,最后东拼西凑搞了个相对全面的检测工具代码类,希望能给需要的人带来帮助。 说明 这段…...

顺序表与链表学习笔记

顺序表及其结构定义 (1)结构定义 顺序存储: 顺序表的元素按顺序存储在一块连续的内存区域中,每个元素占用相同大小的存储空间。通过数组实现,每个元素可以通过下标快速访问。 存储密度高: 因为顺序表使用…...

2.SQL注入-字符型

SQL注入-字符型(get) 输入kobe查询出现id和邮箱 猜测语句,字符在数据库中需要用到单引号或者双引号 select 字段1,字段2 from 表名 where usernamekobe;在数据库中查询对应的kobe,根据上图对应上。 select id,email from member where usernamekobe;编写payload语…...

在Ubuntu 14.04上安装和配置Elasticsearch的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强大功能和可扩展性而备受欢迎。 Elasticsearch 支持 R…...

C++:inline关键字nullptr

inline关键字 C中inline使用关键点强调 (1)inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”,所以关键字 inline 必须与函数定义体放在一起,而不是和声明放在一起 (2)如果希望在多个c文件中使用,则inline函数应…...

数字信号处理实验三(IIR数字滤波器设计)

IIR数字滤波器设计(2学时) 要求: 产生一复合信号序列,该序列包含幅度相同的28Hz、50Hz、100Hz、150Hz的单音(单频)信号;其中,50Hz及其谐波为工频干扰(注:采样…...

Why is Kafka fast?(Kafka性能基石)

Kafka概述 Why is kafka fast? 思考一下,当我们在讨论Kafka快的时候我们是在谈论什么呢?What does it even mean that Kafka is fast? 我们是在谈论kafka的低延迟(low latency)还是在讨论吞吐量(through…...

Linux下的SSH详解及Ubuntu教程

前言 SSH(Secure Shell)是一种用于计算机之间安全通信的协议,广泛应用于远程登录、系统管理和文件传输等场景。本文将详细介绍SSH在Linux系统(特别是Ubuntu)下的使用,包括安装、配置、密钥管理和常见应用&…...

MobPush HarmonyOS NEXT 版本集成指南

开发工具:DevEco Studio 集成方式:在线集成 HarmonyOS API支持:> 11 集成前准备 注册账号 使用MobSDK之前,需要先在MobTech官网注册开发者账号,并获取MobTech提供的AppKey和AppSecret,详情可以点击查…...

什么是封装?为什么要封装?

什么是封装? 封装是计算机科学中的一个重要概念,尤其在面向对象编程(OOP)中占据核心地位。封装主要指的是将数据(属性)和对这些数据的操作(方法)组合在一个单元中(我们称…...

远程桌面无法复制粘贴文件到本地怎么办?

远程桌面不能复制粘贴问题 Windows远程桌面为我们提供了随时随地访问文件和数据的便捷途径,大大提升了工作和生活的效率。然而,在使用过程中,我们也可能遇到一些问题。例如,在通过远程桌面传输文件时,常常会出现无法复…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...