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

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

简介

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

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

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

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

先决条件

在按照本教程操作之前,请确保您完成以下先决条件:

  • 一个 Ubuntu 14.04 Droplet
  • 一个非 root sudo 用户。详情请参阅《使用 Ubuntu 14.04 进行初始服务器设置》。

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

假设

本教程假设您的服务器正在使用类似于此处描述的 VPN:《如何使用 Ansible 和 Tinc VPN 保护您的服务器基础设施》。这将为服务器提供私有网络功能,无论其物理网络如何。

如果您正在使用共享私有网络,比如 DigitalOcean 私有网络,则此安全功能将已经对同一团队或同一区域帐户中的服务器启用。这在使用 Elasticsearch 时尤为重要,因为它的 HTTP 接口中没有内置安全性。

步骤 1 — 安装 Java

首先,您需要在 Droplet 上安装 Java 运行环境(JRE),因为 Elasticsearch 是用 Java 编写的。Elasticsearch 需要 Java 7 或更高版本。Elasticsearch 推荐使用 Oracle JDK 版本 1.8.0_73,但本地 Ubuntu OpenJDK JRE 包也可以正常工作。

本步骤将向您展示如何安装这两个版本,以便您可以决定哪个更适合您。

安装 OpenJDK

本地 Ubuntu OpenJDK JRE 包是免费的,得到良好支持,并通过 Ubuntu APT 安装管理器自动管理。

在使用 APT 安装 OpenJDK 之前,请运行以下命令更新您的 Ubuntu Droplet 上可用的安装包列表:

sudo apt-get update

之后,您可以使用以下命令安装 OpenJDK:

sudo apt-get install openjdk-7-jre

要验证您的 JRE 是否已安装并可用,请运行以下命令:

java -version

结果应如下所示:

[secondary_label Output of java -version]
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

安装 Java 8

当您在使用 Elasticsearch 时,开始寻找更好的 Java 性能和兼容性时,您可能选择安装 Oracle 的专有 Java(Oracle JDK 8)。

将 Oracle Java PPA 添加到 apt:

sudo add-apt-repository -y ppa:webupd8team/java

更新您的 apt 包数据库:

sudo apt-get update

使用以下命令安装 Oracle Java 8 的最新稳定版本(并接受弹出的许可协议):

sudo apt-get -y install oracle-java8-installer

最后,验证它是否已安装:

java -version

步骤 2 — 下载并安装 Elasticsearch

Elasticsearch 可以直接从 elastic.co 以 zip、tar.gz、deb 或 rpm 包的形式下载。对于 Ubuntu,最好使用 deb(Debian)包,它将安装运行 Elasticsearch 所需的一切。

在撰写本文时,最新的 Elasticsearch 版本是 1.7.2。使用以下命令在您选择的目录中下载它:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

然后,以通常的 Ubuntu 方式使用 dpkg 命令安装它,如下所示:

sudo dpkg -i elasticsearch-1.7.2.deb

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

为确保 Elasticsearch 随 Droplet 自动启动和停止,使用以下命令将其 init 脚本添加到默认运行级别:

sudo update-rc.d elasticsearch defaults

步骤 3 — 配置 Elastic

现在 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 节点到一个集群。因此,如果您不更改默认值,您可能会在集群中发现不需要的节点,这些节点在同一网络上被找到。

要开始编辑主要的 elasticsearch.yml 配置文件:

sudo nano /etc/elasticsearch/elasticsearch.yml

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

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

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

“Slaves” 用作可以加载数据任务的 “工作马”。即使 “slave” 节点被过载,只要有其他节点来承担额外负载,集群健康就不应受到严重影响。

确定服务器角色的设置称为 node.master。如果您只有一个 Elasticsearch 节点,应该将此选项保持注释状态,以保持其默认值 true — 即唯一节点也应该是主节点。或者,如果您希望将节点配置为从节点,删除 node.master 行开头的 # 字符,并将值更改为 false

...
node.master: false
...

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

同样,如果您只有一个 Elasticsearch 节点,应该将此设置保持注释状态,以保持默认值 true。否则,要禁用本地存储数据,请取消注释以下行并将值更改为 false

...
node.data: false
...

另外两个重要选项是 index.number_of_shardsindex.number_of_replicas。前者确定索引将被分成多少片段(shards)。后者定义将在集群中分布的副本数量。拥有更多的分片可以提高索引性能,而拥有更多的副本可以加快搜索速度。

假设您仍在单个节点上探索和测试 Elasticsearch,最好从只有一个分片和没有副本开始。因此,它们的值应设置为以下内容(确保删除行开头的 #):

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

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

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

完成所有更改后,请保存并退出文件。现在,您可以使用以下命令首次启动 Elasticsearch:

sudo service elasticsearch start

请至少等待 10 秒,以便 Elasticsearch 完全启动,然后才能使用它。否则,您可能会收到无法连接的错误。

第四步 —— 安全设置 Elastic

Elasticsearch 没有内置的安全机制,可以被访问 HTTP API 的任何人控制。本节不是一个全面的 Elasticsearch 安全设置指南。请采取必要的措施防止未经授权的访问以及保护其运行的服务器/虚拟机。考虑使用 iptables 进一步保护您的系统。

第一个安全调整是防止公共访问。要移除公共访问,请编辑文件 elasticsearch.yml

sudo nano /etc/elasticsearch/elasticsearch.yml

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

...
network.bind_host: localhost
...

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

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

...script.disable_dynamic: true
...

第五步 —— 测试

到目前为止,Elasticsearch 应该在 9200 端口上运行。您可以使用 curl 这个命令行客户端 URL 传输工具进行测试,执行一个简单的 GET 请求,如下所示:

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

您应该会看到以下响应:

[secondary_label Output of curl]
{"status" : 200,"name" : "Harry Leland","cluster_name" : "elasticsearch","version" : {"number" : "1.7.2","build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec","build_timestamp" : "2015-09-14T09:49:53Z","build_snapshot" : false,"lucene_version" : "4.10.4"},"tagline" : "You Know, for Search"
}

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

第六步 —— 使用 Elasticsearch

要开始使用 Elasticsearch,让我们首先添加一些数据。如前所述,Elasticsearch 使用 RESTful API,响应通常包括 CRUD 命令:创建、读取、更新和删除。我们将再次使用 curl 进行操作。

您可以使用以下命令添加第一条数据:

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

您应该会看到以下响应:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}

通过 curl,我们向 Elasticseach 服务器发送了一个 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,"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 World!" }
}

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

结论

这就是安装、配置和开始使用Elasticsearch的简单过程。一旦你对手动查询有了足够的了解,下一个任务将是从你的应用程序开始使用它。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

热管的制作工艺流程

1、什么是热管,热管的起源和发展 热管技术早在1942年前就已出现,当时Perkins发明并改进了热虹吸管(一种简单的重力热管)。1942年后,Gaugler提出了现代热管的原理,但未实际应用。直到1963年在位于美国的Los…

Vue解决父子组件传值,子组件改变值后父组件的值也改变的问题

vue开发过程中,父组件通过props传值给子组件,子组件在页面展示父组件的值,在操作子组件值以后,即使不点击确定按钮,父组件中的值也发生了变化,但是需求是操作子组件数据以后,必须点击"确定…

C# 中 MessageBox 定时关闭

C# 中 MessageBox 定时关闭 WPF中 System.Windows.Forms 的 MessageBox 并未提供定时关闭的功能,所以要实现此目标,需添加一些其他代码,如定时监控等。 需求说明: 弹出提示框后若一定时间内未点击此提示框,则其自动…

【信息系统项目管理师知识点速记】项目管理实践模型

20.5 项目管理实践模型 随着项目管理理论和实践在全球范围内的不断发展和积累,多个组织开发并发布了项目管理的最佳实践集合,其中得到广泛使用的是CMMI模型和PRINCE2模型,用于指导各个领域组织的项目管理活动。利用CMMI模型和PRINCE2模型的最佳实践,能够迅速将项目管理者的…

【AI提升】AI利器Tool Call/Function Call(一):langchain+ollama+llama3/qwen2

1、使用AI的一个常用场景就是,接收人类的语言,识别人类的意图,最终进行相关的业务处理,这就是设计Tool Call / Function Call的初衷。 2、现在一般都说Tool Call,以前常叫Function Call,不要纠结。 一、安…

探索 .NET 基准测试库(BenchmarkDotNet)

基准测试是软件开发中的一项重要实践,它允许开发人员测量和比较不同代码段的性能。在 .NET 中,最流行的基准测试库之一是 BenchmarkDotNet。这里将介绍 BenchmarkDotNet,解释它为何必不可少,并提供分步示例来帮助您入门。 什么是…

程序猿大战Python——实现简单的图书馆系统操作

步骤1:安装和导入库 首先,确保已经安装了 pymysql 库。如果没有安装,请执行以下命令: pip install pymysql 然后,导入必要的库: import pymysql 步骤2:创建数据库和表的函数 编写一个函数来…

MySQL 重要参数优化

max_connections = 3000 innodb_buffer_pool_size = 8G max_allowed_packet = 32M innodb_file_io_threads = 8 innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M 参数说明 max_connections = 3000 运行MySQL的最大连…

2-19 基于matlab的薄板弯曲的算例

基于matlab的薄板弯曲的算例,利用有限元方法编制matlab程序。对二维薄板进行单元化,输出薄板结构参数及载荷,输出弯曲情况,并可视化展示。程序已调通,可直接运行。 2-19 薄板弯曲 有限元方法 薄板结构参数 - 小红书 (x…

阿里web前端面试-笔试题

面试中遇到的笔试题,记录一下~ 题目: 1.写一个方法,统计字符串中出现的字母及出现次数。 比如:入参abcAAAabc 返回:a:2,b:2,c:2,A:3(示形式不限,但是结果中要能清晰感知出现字母及出现的次数…

odoo17 在线聊天报错提示 Couldn‘t bind the websocket...

在17版本中,使用在线聊天功能时,发现有报错 Couldnt bind the websocket. Is the connection opened on the evented port 8072在跟踪代码后,发现在 odoo-17.0\addons\bus\websocket.py 836 行在linux有差异 进行修改优化 修改前 socket …

福昕阅读器再打开PDF文件时,总是单页显示,如何设置打开后就自动显示单页连续的模式呢

希望默认进入连续模式 设置方法 参考链接 如何设置使福昕阅读器每次启动时不是阅读模式 每次启动后都要退出阅读模式 麻烦_百度知道 (baidu.com)https://zhidao.baidu.com/question/346796551.html#:~:text%E5%9C%A8%E3%80%90%E5%B7%A5%E5%85%B7%E3%80%91%E9%87%8C%E6%9C%89%E…

等保测评练习卷14

等级保护初级测评师试题14 姓名: 成绩: 判断题(10110分) 1. 方案编制活动中测评对象确定、测评指…

Unity+OpenCV+Dlib实现换脸+图片生成+上传服务器+生成二维码[纯干货]

UnityOpenCVDlib实现换脸图片生成上传服务器生成二维码 功能描述 一句话描述:让游客体验一下当宇航员的乐趣。 具体功能:游客通过摄像头拍照,生成有着“自己的脸”的宇航员的图片,然后展示二维码,供游客下载。 效果…

Python学习笔记五

1.当循环执行完整后&#xff0c;就会执行else里面的代码 s0 i1 while i<100:sii1 else:print(s) 当循环不完整就会如下 s0 i1 while i<100:sii1if s6:break; else:print(s) 2. 实现密码匹配&#xff0c;可以输入三次&#xff0c;若输入三次错误会退出&#xff0c;或者输…

部分力扣题记

1.. - 力扣&#xff08;LeetCode&#xff09; 这题用到了map和栈的知识点 我们利用map的特性&#xff0c;将&#xff08;&#xff09;【】{}&#xff0c;分别一一对应 然后遍历&#xff0c;如果map&#xff08;char&#xff09;为真&#xff0c;就意味着是左边的部分&#x…

界面组件DevExpress WinForms v24.1 - 支持DateOnly TimeOnly类型

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

1976 ssm 营地管理系统开发mysql数据库web结构java编程计算机网页源码Myeclipse项目

一、源码特点 ssm 营地管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开…

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述&#xff1a;模块…

网络爬虫的架构

网络爬虫的架构 网络爬虫的架构&#xff0c;犹如一座精心设计的桥梁&#xff0c;连接着海量的互联网数据与我们的需求。在网络爬虫的世界里&#xff0c;每一个组件都扮演着至关重要的角色&#xff0c;它们协同工作&#xff0c;确保数据的高效获取与处理。 在爬虫架构的顶层&a…