前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上安装和配置Elasticsearch

如何在CentOS 7上安装和配置Elasticsearch

原创
作者头像
何处惹尘埃
修改2018-09-29 17:08:43
1K0
修改2018-09-29 17:08:43
举报
文章被收录于专栏:云计算教程系列

介绍

Elasticsearch是一个实时分布式搜索和分析数据的平台。它的流行是由于它的易用性,强大的功能和可扩展性。

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

Elasticsearch是一个免费的开源软件,背后有一个坚实的公司 -Elastic。这种组合使其适用于从个人测试到企业集成的任何地方。

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

课程准备

在学习本教程之前,请确保完成以下先决条件:

第1步 - 安装Java

首先,您需要在腾讯CVM上使用Java Runtime Environment(JRE),因为Elasticsearch是用Java编程语言编写的。您可以将本机CentOS OpenJDK程序包用于JRE。此JRE是免费的,并且受到良好支持,并通过CentOS Yum安装管理器自动管理。

您可以使用以下命令安装最新的OpenJDK:

代码语言:javascript
复制
sudo yum install java-1.8.0-openjdk.x86_64

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

代码语言:javascript
复制
java -version

结果应如下所示:

代码语言:javascript
复制
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

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

第2步 - 下载和安装Elasticsearch

Elasticsearch可以直接从elastic.co下载zip,tar.gz,deb或rpm包。对于CentOS,最好使用本机rpm包,它将安装运行Elasticsearch所需的一切。

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

代码语言:javascript
复制
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm

然后使用如下rpm命令以通常的CentOS方式安装它:

代码语言:javascript
复制
sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm

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

要确保Elasticsearch使用腾讯CVM自动启动和停止,请使用以下命令将其init脚本添加到默认运行级别:

代码语言:javascript
复制
sudo systemctl enable elasticsearch.service

第3步 - 配置弹性

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

Elasticsearch配置文件位于/etc/elasticsearch目录中。有两个文件:

  • elasticsearch.yml - 配置Elasticsearch服务器设置。这是存储除日志记录之外的所有选项的地方,这就是我们对此文件最感兴趣的原因。
  • logging.yml - 提供日志记录配置。首先,您不必编辑此文件。您可以保留所有默认日志记录选项。您可以在默认情况下在/var/log/elasticsearch中找到生成的日志。

第一个可以在任何Elasticsearch服务器上来定制的变量是elasticsearch.yml中的 node.namecluster.name。顾名思义,node.name指定服务器(节点)的名称以及与之关联的集群。

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

Elasticsearch的自动发现功能会使用该cluster.name值来自动发现Elasticsearch节点并将其关联到集群。因此,如果不更改默认值,则可能在群集中的同一网络上找到了不需要的节点。

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

代码语言:javascript
复制
sudo nano /etc/elasticsearch/elasticsearch.yml

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

代码语言:javascript
复制
...
node.name: "My First Node"
cluster.name: mycluster1
...

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

“从属”被用作“workhorse”,可以加载数据任务。即使“从属”节点过载,也不应严重影响群集运行状况,前提是还有其他节点需要额外负载。

调用确定服务器角色的设置叫node.master。如果您只有一个Elasticsearch节点,则应该将此选项注释掉,以使其保持其默认值true- 即唯一节点也应该是主节点。或者,如果要将节点配置为从属节点,请删除该node.master行开头的字符#,并将值更改为false

代码语言:javascript
复制
...
node.master: false
...

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

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

代码语言:javascript
复制
...
node.data: false
...

另外两个重要的选择是index.number_of_shardsindex.number_of_replicas。第一个决定索引将分成多少个(分片)。第二个定义将在群集中分发的副本数。拥有更多分片可以提高索引性能,而拥有更多副本可以提高搜索速度。

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

代码语言:javascript
复制
...
index.number_of_shards: 1
index.number_of_replicas: 0
...

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

代码语言:javascript
复制
...
path.data: /media/different_media
...

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

代码语言:javascript
复制
sudo service elasticsearch start

在您使用Elasticsearch之前,请至少给它10秒钟让他完全启动。否则,您可能会收到无法连接的错误。

第4步 - 保护弹性

Elasticsearch没有内置安全性,可以由任何可以访问HTTP API的人控制。

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

代码语言:javascript
复制
sudo nano /etc/elasticsearch/elasticsearch.yml

找到包含network.bind_host的行,通过删除开头行的字符#取消注释,然后将值更改为localhost,他将如下所示:

代码语言:javascript
复制
...
network.bind_host: localhost
...

警告:由于Elasticsearch没有任何内置安全性,因此不要将此设置为任何您无法控制或信任的服务器可访问的IP地址,这一点非常重要。不要将Elasticsearch绑定到公共或共享专用网络 IP地址!

此外,为了提高安全性,您可以禁用用于评估自定义表达式的动态脚本。通过制作自定义恶意表达式,攻击者可能会破坏您的环境。

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

代码语言:javascript
复制
...
script.disable_dynamic: true
...

要使上述更改生效,您必须使用以下命令重新启动Elasticsearch:

代码语言:javascript
复制
sudo service elasticsearch restart

第5步 - 测试

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

代码语言:javascript
复制
curl -X GET 'http://localhost:9200'

您应该看到以下响应:

代码语言:javascript
复制
{
  "status" : 200,
  "name" : "CentOS Node",
  "cluster_name" : "mysqluster",
  "version" : {
    "number" : "1.7.3",
    "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682",
    "build_timestamp" : "2015-10-15T09:14:17Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

如果您看到类似于上面的响应,则Elasticsearch正常工作。如果没有,请确保您已正确遵循安装说明,并且您已经有足够的时间让Elasticsearch完全启动。

第6步 - 使用Elasticsearch

要开始使用Elasticsearch,我们先添加一些数据。如前所述,Elasticsearch使用RESTful API,它响应常用的CRUD命令:Create,Read,Update和Delete。为了使用它,我们将再次使用curl。

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

代码语言:javascript
复制
curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

您应该看到以下响应:

代码语言:javascript
复制
{"_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请求检索此第一个条目,如下所示:

代码语言:javascript
复制
curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

结果应如下所示:

代码语言:javascript
复制
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}

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

代码语言:javascript
复制
curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
  "message": "Hello People!"
}'

Elasticsearch应该承认这是一个成功的修改,并且如下所示:

代码语言:javascript
复制
{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "created" : false
}

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

您可能已经注意到上述请求中的额外参数pretty。它支持人类可读的格式,因此您可以在新行上写入每个数据字段。您还可以在检索数据时“美化”您的结果并获得更好的输出,如下所示:

代码语言:javascript
复制
curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'

现在响应将采用更好的格式:

代码语言:javascript
复制
{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "found" : true,
  "_source":{ "message": "Hello World!" }
}

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

结论

这就是安装,配置和开始使用Elasticsearch的难易程度。一旦你玩了足够的手动查询,你的下一个任务就是从你的应用程序开始使用它。

更多CentOS教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Configure Elasticsearch on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 课程准备
  • 第1步 - 安装Java
  • 第2步 - 下载和安装Elasticsearch
  • 第3步 - 配置弹性
  • 第4步 - 保护弹性
  • 第5步 - 测试
  • 第6步 - 使用Elasticsearch
  • 结论
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档