如何部署 ElasticSearch 服务

2018-12-11 18:30:00 浏览数 (1)

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)软件包。

首先,更新您的包索引。

代码语言:javascript复制
sudo apt-get update

下载最新的Elasticsearch版本。

代码语言:javascript复制
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

然后用dpkg安装它。

代码语言:javascript复制
sudo dpkg -i elasticsearch-2.3.1.deb

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

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

代码语言:javascript复制
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主配置文件。

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

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

/etc/elasticsearch/elasticsearch.yml

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

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

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

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

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

/etc/elasticsearch/elasticsearch.yml

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

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

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

/etc/elasticsearch/elasticsearch.yml

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

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

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

/etc/elasticsearch/elasticsearch.yml

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

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

/etc/elasticsearch/elasticsearch.yml

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

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

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

测试Elasticsearch

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

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

您应该看到以下响应:

代码语言:javascript复制
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执行更彻底的检查,请执行以下命令:

代码语言:javascript复制
curl -XGET 'http://localhost:9200/_nodes?pretty'

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

使用Elasticsearch

要开始使用Elasticsearch,我们先添加一些数据。如前所述,Elasticsearch使用RESTful API,它响应通常的CRUD命令:c reate,r ead,u pdate和d elete。为了使用它,我们将再次使用curl

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

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

您应该看到以下响应:

代码语言:javascript复制
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请求检索此第一个条目。

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

结果应如下所示:

代码语言:javascript复制
Output{"_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复制
Output{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : false
}

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

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

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

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

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

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

结论

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

0 人点赞