如何部署 ElasticSearch 服务

Elasticsearch是一个实时分布式搜索和分析数据的平台。其易使用,具有强大的功能和可扩展性。Elasticsearch支持RESTful操作。这意味着您可以将HTTP方法(GET,POST,PUT,DELETE等)与HTTP URI(/collection/entry)结合使用来操作数据。直观的RESTful方法既开发人员又方便用户使用,这也是Elasticsearch流行的原因之一。

本文将向您介绍Elasticsearch,并向您展示如何安装,配置和使用它。还没有云服务器的同学可以到腾讯云官网点击产品中的云服务器,进行购买。您也可以到这里免费领取一台腾讯云服务器。双十二的促销力度非常大。

下载和安装Elasticsearch

Elasticsearch可以直接从elastic.co下载ziptar.gzdeb,或rpm包。对于Ubuntu,最好使用deb(Debian)软件包。

首先,更新您的包索引。

sudo apt-get update

下载最新的Elasticsearch版本。

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

然后用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之前,请查看下一节有关建议的最低配置的信息。

配置Elasticsearch

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

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

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

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

使用文本编辑器开始编辑elasticsearch.yml主配置文件。

sudo nano /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.yml

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

这些是您可以从使用Elasticsearch开始的最低设置。

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

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

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

/etc/elasticsearch/elasticsearch.yml

. . .
node.master: false
. . .

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

同样,如果您只有一个Elasticsearch节点,则不应更改此值。否则,禁止在本地存储数据:

/etc/elasticsearch/elasticsearch.yml

. . .
node.data: false
. . .

在具有许多节点的较大Elasticsearch部署中,另外两个重要选项是index.number_of_shardsindex.number_of_replicas。第一个确定将索引分成多少个碎片。第二个定义将在群集中分发的副本数。拥有更多分片可以提高索引性能,而拥有更多副本可以提高搜索速度。

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

/etc/elasticsearch/elasticsearch.yml

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

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

/etc/elasticsearch/elasticsearch.yml

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

完成所有更改后,保存并退出文件。现在您可以第一次启动Elasticsearch。

sudo systemctl start elasticsearch

测试Elasticsearch

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

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

您应该看到以下响应:

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命令:c reate,r ead,u pdate和d elete。为了使用它,我们将再次使用curl

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

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

您应该看到以下响应:

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

有了cuel,我们已经向Elasticsearch服务器发送了一个HTTP POST请求。请求的URI /tutorial/helloworld/1有几个参数:

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

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

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

结果应如下所示:

Output{"_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的修改如下:

Output{
  "_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'

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

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

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

结论

这就是安装,配置和开始使用Elasticsearch的所有流程。您也可以对您的服务器进行保护,可以先点击这里进行 SSL 证书的试用,在体验加密证书的优势之后再进行抉择。

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

【ES私房菜】收集 Linux 系统日志

ES环境已经就绪,我们需要先调通一类简单日志作为数据上报全链路的试运行。恰好Linux系统日志就是这样一个角色,随处可见,风险可控。这里,我们选择了2种Linu...

86710
来自专栏小狼的世界

在Codeigniter框架中使用NuSOAP

NuSOAP 是一组功能强大的PHP类,这个工具的发布让使用和创建SOAP消息变得相当简单。 NuSOAP有Dirtrich Ayala编写,可以无缝的与许多最...

9510
来自专栏听雨堂

【7】AccessDB快速数据访问

阅读目录 C#和VB数据访问的比较 AccessDB的设计 数据库的连接 三种主要操作 错误输出及调试 小结 C#和VB数据访问的比较 C#中要进行...

205100
来自专栏IT派

在Python中使用Elasticsearch

在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。

10950
来自专栏PPV课数据科学社区

【平台】HBase学习总结

HBase的下载与安装 (HBase是一种数据库:Hadoop数据库,它是一种NoSQL存储系统,专门设计用来快速随机读写大规模数据。本文介绍HBase的下...

72470
来自专栏JavaEdge

操作系统之文件管理一、文件与文件系统二、文件控制块和文件目录三、文件的物理结构四、文件系统的实现五、文件系统实例(UNIX)六、UNIX文件系统一、文件系统实例(FAT)二、文件操作的实现三、文件系统

61860
来自专栏运维

yum安装rabbitmq3.6.11与erlange20配置及优化

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件...

19410
来自专栏JavaEdge

操作系统之内存管理内存管理3.1 内存管理的概念3.2 内存覆盖与内存交换3.3 内存连续分配管理方式3.4 内存非连续分配管理方式

66360
来自专栏点点滴滴

CentOS7编译安装FFMPEG

48840
来自专栏三杯水

RabbitMQ3.6.11部署配置及优化

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件...

16010

扫码关注云+社区

领取腾讯云代金券