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


介绍 Elasticsearch是用于实时分布式搜索和数据分析的平台。它的受欢迎程度是由于其易用性,强大的功能和可伸缩性。

Elasticsearch支持RESTful操作。这意味着,你可以使用HTTP方法(GET,POST,PUT,DELETE组合等)与HTTP URI(/收集/输入)来操作你的数据。直观的RESTful方法既对开发人员又对用户友好,这是Elasticsearch受欢迎的原因之一。

Elasticsearch是免费的开源软件,背后有一家实力雄厚的公司-Elastic。这种组合使其适用于从个人测试到公司集成的许多用例。

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

先决条件 要遵循本教程,您将需要以下内容:

  • 运行CentOS 7且至少有1GB内存和非root用户sudo用户的服务器。有关详细说明,请查看我们的《 CentOS 7初始服务器设置指南》。
  • wget安装在您的服务器上

第1步-在CentOS 7上安装Java

Elasticsearch是用Java编程语言编写的。然后,您的第一个任务是在服务器上安装Java Runtime Environment(JRE)。您将对JRE使用本地CentOS OpenJDK软件包。该JRE是免费的,得到良好支持的,并且可以通过CentOS Yum安装管理器自动进行管理。

安装最新版本的OpenJDK 8

sudo yum install java-1.8.0-openjdk.x86_64

现在验证您的安装:

java -version

该命令将创建如下输出:

Output
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

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

步骤2 —在CentOS 7上下载并安装Elasticsearch 您可以直接从下载Elasticsearchelastic.cozip,tar.gz,deb,或rpm包。对于CentOS,最好使用本机rpm软件包,它将安装运行Elasticsearch所需的一切。

在撰写本文时,最新的Elasticsearch版本是7.9.2。

从您选择的工作目录中,下载程序:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-x86_64.rpm

然后使用以下rpm命令安装它:

sudo rpm -ivh elasticsearch-7.9.2-x86_64.rpm

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

为了确保Elasticsearch在服务器上自动启动和停止,请将其初始化脚本添加到默认运行级别:

sudo systemctl enable elasticsearch.service

安装Elasticsearch之后,您现在将配置一些重要设置。

步骤3 —在CentOS 7上配置Elasticsearch 现在,您已经安装了Elasticsearch及其Java依赖项,现在该配置Elasticsearch了。

Elasticsearch配置文件位于/etc/elasticsearch目录中。我们将审查和编辑的是:

elasticsearch.yml—配置Elasticsearch服务器设置。这是大多数选项的存储位置,这就是为什么我们对该文件最感兴趣的原因。 jvm.options —提供JVM的配置,例如内存设置。 在任何Elasticsearch服务器上自定义的第一个变量是node.namecluster.nameelasticsearch.yml。现在就开始吧。

顾名思义,node.name指定服务器(节点)的名称以及与之关联的集群。如果您不自定义这些变量,node.name则将根据服务器主机名自动分配a 。在cluster.name将被自动设置为默认的簇的名称。

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

让我们开始编辑主elasticsearch.yml配置文件。

使用nano或您喜欢的文本编辑器将其打开:

sudo nano /etc/elasticsearch/elasticsearch.yml

删除和取消注释#各行开头的字符,然后更改其值。文件中的首次配置更改将如下所示:node.namecluster.name/etc/elasticsearch/elasticsearch.yml

/etc/elasticsearch/elasticsearch.yml
...
node.name: "My First Node"
cluster.name: mycluster1
...

也可以在中找到网络设置elasticsearch.yml。默认情况下,Elasticsearch将在端口9200上的localhost上侦听,以便仅来自同一服务器的客户端可以连接。从安全角度来看,应该保留这些设置不变,因为Elasticsearch的开源和免费版不提供身份验证功能。

另一个重要设置是node.roles属性。您可以将其设置为master-eligible(仅master在配置中)dataingest

该master-eligible角色负责群集的运行状况和稳定性。在具有许多群集节点的大型部署中,建议有多个master仅具有角色的专用节点。通常,专用master节点既不会存储数据,也不会创建索引。因此,将不会有过载的机会,否则集群健康就可能受到威胁。

该data角色定义了将存储数据的节点。即使数据节点过载,只要有其他节点来承担额外的负载,群集的运行状况也不会受到严重影响。

最后,该ingest角色允许节点接受和处理数据流。在较大的设置中,应有专用ingest节点,以避免masteranddata节点上可能的过载。

注意:一个节点可能具有一个或多个角色,从而允许Elasticsearch设置具有可伸缩性,冗余性和高可用性。默认情况下,所有这些角色都分配给该节点。如本文中描述的示例方案那样,这适用于单节点Elasticsearch。因此,您不必更改角色。不过,如果您想更改角色(例如将节点专用为)master,则可以通过如下更改来实现/etc/elasticsearch/elasticsearch.yml

/etc/elasticsearch/elasticsearch.yml
...
node.roles: [ master ]
...

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

/etc/elasticsearch/elasticsearch.yml
...
path.data: /media/different_media
...

既然您已进行了所有更改,请保存并关闭elasticsearch.yml

您还必须在中编辑配置jvm.options

回想一下,Elasticsearch由JVM运行,即本质上是Java应用程序。因此,就像任何Java应用程序一样,它具有可以在文件中配置的JVM设置/etc/elasticsearch/jvm.options。Xms和Xmx,这两个最重要的设置(特别是关于性能)是和,它们定义最小(Xms)和最大(Xmx)内存分配。

默认情况下,两者都设置为1GB,但这几乎从来都不是最佳选择。不仅如此,如果您的服务器只有1GB RAM,您将无法使用默认设置启动Elasticsearch。这是因为操作系统至少需要100MB的空间,所以不可能将1GB专用于Elasticsearch

不幸的是,没有用于计算内存设置的通用公式。自然,分配的内存越多,性能就越好,但是请确保为服务器上的其余进程留出足够的内存。例如,如果您的计算机具有1GB的RAM,则可以将Xms和都设置Xmx512MB,从而为其余的进程留出512MB的空间。请注意,通常将XmsXmx设置为相同的值,以避免JVM垃圾回收的性能下降。

如果您的服务器只有1GB的RAM,则必须编辑此设置。

营业时间jvm.options

sudo nano /etc/elasticsearch/jvm.options

现在将XmsXmx值更改为512MB

/etc/elasticsearch/jvm.options
...
-Xms512m
-Xmx512m
...

保存并退出文件。

现在第一次启动Elasticsearch:

sudo service elasticsearch start

在尝试使用Elasticsearch之前,至少要等待10秒钟,以便Elasticsearch启动。否则,您可能会收到连接错误。

注意:您应该知道并非所有Elasticsearch设置都已设置并保留在配置文件中。相反,某些设置是通过其API设置的,例如index.number_of_shardsindex.number_of_replicas。第一个参数确定索引将分割成几部分(碎片)。第二个定义了将在整个群集中分布的副本数量。拥有更多的分片可以提高索引性能,而拥有更多的副本可以加快搜索速度。

假设您仍在单个节点上探索和测试Elasticsearch,则可以使用以下设置并通过执行以下curl命令更改它们:

curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
  "index.number_of_replicas" : "0",
  "index.number_of_shards" : "1"
}'

安装并配置了Elasticsearch之后,您现在将保护并测试服务器。

步骤4 —(可选)确保CentOS 7上的Elasticsearch安全 Elasticsearch没有内置的安全性,任何可以访问HTTP API的人都可以对其进行控制。本部分不是确保Elasticsearch安全的综合指南。采取必要的措施来防止未经授权的访问它以及运行它的服务器/虚拟机。

默认情况下,Elasticsearch配置为仅在本地主机网络接口上侦听,即无法进行远程连接。除非您已采取以下一项或两项措施,否则应保持此设置不变:

  • 您仅对具有iptables的受信任主机限制了对TCP端口9200的访问。
  • 您已在受信任的主机之间创建了一个VPN,并且将在VPN的虚拟接口之一上公开Elasticsearch。 只有完成上述操作,您才应考虑允许Elasticseach监听除localhost外的其他网络接口。例如,当您需要从另一台主机连接到Elasticsearch时,可以考虑这样的更改。

要更改网络曝光,请打开文件elasticsearch.yml

sudo nano /etc/elasticsearch/elasticsearch.yml

在此文件中找到包含的行,network.host通过删除该#行开头的字符来取消注释,然后将该值更改为安全网络接口的IP地址。该行将如下所示:

/etc/elasticsearch/elasticsearch.yml
...
network.host: 10.0.0.1
...

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

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

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

/etc/elasticsearch/elasticsearch.yml
...
script.allowed_types: none
...

为了使以上更改生效,您必须重新启动Elasticsearch。

立即重新启动Elasticsearch:

sudo service elasticsearch restart

在此步骤中,您采取了一些措施来保护您的Elasticsearch服务器。现在,您可以测试应用程序了。

第5步—在CentOS 7上测试Elasticsearch

到目前为止,Elasticsearch应该在端口9200上运行。您可以使用curl,用于客户端URL传输的命令行工具,对此进行测试。

要测试服务,GET请发出如下请求:

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

您将看到以下响应:

Output
{
  "name" : "My First Node",
  "cluster_name" : "mycluster1",
  "cluster_uuid" : "R23U2F87Q_CdkEI2zGhLGw",
  "version" : {
    "number" : "7.9.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
    "build_date" : "2020-09-23T00:45:33.626720Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

如果您看到类似的响应,则表明Elasticsearch正常工作。如果不是,请重新检查安装说明,并留出一些时间让Elasticsearch完全启动。

您的Elasticsearch服务器现在可以运行了。在下一步中,您将从应用程序中添加和检索一些数据。

第6步—在CentOS 7上使用Elasticsearch

在此步骤中,您将向Elasticsearch添加一些数据,然后进行一些手动查询。

使用curl添加您的第一个条目:

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

您将看到以下输出:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4

使用curl,您向POSTElasticseach服务器发送了HTTP请求。该请求的URI为/tutorial/helloworld/1。让我们仔细看看这些参数:

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

请注意,还需要POST使用参数将所有请求的内容类型设置为JSON -H 'Content-Type: application/json'。如果您不这样做,Elasticsearch将拒绝您的请求。

现在,使用HTTPGET请求检索您的第一个条目:

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

结果将如下所示:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}

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

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

Elasticsearch将确认成功的修改,如下所示:

Output
{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

在上面的示例中,您message将第一个条目的修改为"Hello People!"。这样一来,版本号增加到2。

为了使GET操作的输出更易于理解,您还可以通过添加pretty参数来“美化”结果:

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

现在,响应将以更具可读性的格式输出:

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

这是您可以在Elasticsearch中添加和查询数据的方式。要了解其他操作,可以查看Elasticsearch API文档。

结论 在本教程中,您在CentOS 7上安装,配置并开始使用Elasticsearch。一旦您对手动查询感到满意,您的下一个任务就是开始从您的应用程序中使用该服务。


原文链接:http://codingdict.com/