如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

在今天的这篇文章中,我想介绍如何在 Linux 及 MacOS 上进行安装 Elasticsearch。Elasticsearch 的安装是非常直接的。在今天的这篇文章中,我们介绍如果直接从已经编译好的档案(.tar.gz)中来直接安装 Elasticsearch。如果大家想对 Elasticsearch 有一个大概的了解,请参照我的文章 “Elasticsearch简介

此软件包可在 Elastic 许可下免费使用。 它包含开源和免费商业功能以及付费商业功能。 开始为期30天的试用,试用所有付费商业功能。 有关弹性许可级别的信息,请参阅“订阅”页面。

可以在 Download Elasticsearch 页面上找到最新的稳定版 Elasticsearch。 其他版本可在 “历史版本” 页面上找到。

注意:Elasticsearch包含来自 JDK 维护者(GPLv2 + CE)的捆绑版 OpenJDK。 要使用您自己的Java版本,请参阅JVM版本要求。大家如果想学习如何在Ubuntu/Linux 上安装JAVA,请参阅我的文章 “如何在Ubuntu上安装Java”。Java的版本不可以低于1.7_55。从Elastic 7.0开始,我们可以不安装JAVA。安装包包含一个相匹配的JAVA版本在里面。

 

下载并安装 Linux 归档文件

 

在如下的安装中,我们以7.3.0来为例进行安装。在实际的安装中,可以替换命令行中的7.3.0,并用最新的发行版本号来代替,比如7.5.1。如果你想直接从网站上下载你想要的版本,你可以直接在 https://www.elastic.co/downloads/past-releases 进行下载。


可以按如下方式下载和安装 Elasticsearch v7.3.0 的 Linux 归档文件:

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-7.3.0-linux-x86_64.tar.gz.sha512 
$ tar -xzf elasticsearch-7.3.0-linux-x86_64.tar.gz
$ cd elasticsearch-7.3.0/ 

在上面的第三行,比较下载的 .tar.gz 存档的 SHA 和发布的校验和,该校验和应输出 elasticsearch- {version} -linux-x86_64.tar.gz:OK。这个是为了校验下载的文件是正确的。

上面的最后一行所在的目录代表 $ES_HOME。在下面的表述中我们使用它来进行表述我们的安装目录。

或者,您可以下载以下软件包,其中仅包含 Apache 2.0 许可代码:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.3.0-linux-x86_64.tar.gz
 

注意:由于 Elasticsearch 的迭代比较快,所以你可以在下载最新的版本进行安装。最新的版本可以在地址找到:https://www.elastic.co/downloads/elasticsearch

 

下载并安装 MacOS 的存档


可以按如下方式下载和安装 Elasticsearch v7.3.0 的 MacOS 存档:

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-darwin-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-darwin-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-7.3.0-darwin-x86_64.tar.gz.sha512 
$ tar -xzf elasticsearch-7.3.0-darwin-x86_64.tar.gz
$ cd elasticsearch-7.3.0/ 

在上面的第三行,比较下载的. tar.gz 存档的 SHA 和发布的校验和,该校验和应输出 elasticsearch- {version} -linux-x86_64.tar.gz:OK。这个是为了校验下载的文件是正确的。

上面的最后一行所在的目录代表 $ES_HOME。在下面的表述中我们使用它来进行表述我们的安装目录。

或者,您可以下载以下软件包,其中仅包含 Apache 2.0 许可代码:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.3.0-linux-x86_64.tar.gz

 

下载并安装 Windows .zip 文件

从以下位置下载 Elasticsearch v7.3.1 的 .zip 存档:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.1-windows-x86_64.zip

或者,您可以下载以下软件包,其中仅包含 Apache 2.0 许可证下提供的功能:

用你最喜欢的解压缩工具解压缩它。 这将创建一个名为 elasticsearch-7.3.1 的文件夹,我们将其称为 %ES_HOME%。 在终端窗口中,cd 到 %ES_HOME% 目录,例如:

cd c:\elasticsearch-7.3.1

在 Windows 下时,请打开具有管理员权限的 Command Prompt 来启动 Elasticsearch:

bin\elasticsearch.bat

 

从命令行运行 Elasticsearch

可以从命令行启动 Elasticsearch,如下所示:

./bin/elasticsearch

默认情况下,Elasticsearch在前台运行,将其日志打印到 STDOUT,并可以通过按 Ctrl-C 来停止。

有两个重要的配置选项

  • elasticsearch.yml(文件位于安装目录下的 config 子目录):path.data: /data/elasticsearch
  • jvm.options:-Xms512m, 配置 JVM 的内存大小的

我们可以通过如下的方法在命令行中配置这两个选项:

$ ./bin/elasticsearch -E path.data=/data/elasticsearch

或者:

$ ES_JAVA_OPTS="-Xms512m" ./bin/elasticsearch

或者

$ ES_JAVA_OPTS="-Xms512m -Xmx512m" ./bin/elasticsearch

我们也可以使用如下的方法来覆盖默认的 node 名字为 elasticsearch:

$ ./bin/elasticsearch -E node.name=mynodename

这个对于我们启动两个或多个不同的节点来做 replica 的部署测试,是非常有用的。

 

启用系统索引的自动创建


一些商业功能会在 Elasticsearch 中自动创建系统索引。 默认情况下,Elasticsearch 配置为允许自动创建索引,不需要其他步骤。 但是,如果在 Elasticsearch 中禁用了自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引:

action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

重要提示:

如果您使用的是 Logstash 或 Beats,则很可能在 action.auto_create_index 设置中需要其他索引名称,具体值取决于您的本地配置。 如果您不确定环境的正确值,可以考虑将值设置为*,这将允许自动创建所有索引。

 

Docker 安装

如果你想通过 docker 进行安装,请参照我的文档 “Elastic:用Docker部署Elastic栈”。通过 docker-compose 的使用,我们可以一次性安装 Elastic 栈里的多个软件。

对于 Docker 的安装,你可以参照我的另外一篇文章“Elasticsearch:从零开始安装Elasticsearch并使用Python装载一个CSV并读写它”来部署你的 Elasticsearch 及 Kibana。

 

从命令行运行 Elasticsearch


可以从命令行启动 Elasticsearch,如下所示:

./bin/elasticsearch

默认情况下,Elasticsearch 在前台运行,将其日志打印到标准输出(stdout),并可以通过按 Ctrl-C 来停止。

注意:与 Elasticsearch 一起打包的所有脚本都需要一个支持数组的Bash版本,并假设 Bash 在 /bin/bash 中可用。 因此,Bash 应该直接或通过符号链接在此路径上可用。

 

检查 Elasticsearch 是否已运行


您可以通过向 localhost 上的端口 9200 发送 HTTP 请求来测试您的 Elasticsearch 节点是否正在运行:

GET /

可以使用命令行上的 -q 或 --quiet 选项禁用日志打印到 stdout。

除了上面用浏览器的方式来检查我们的 Elasticsearch 是否正确运行以外,我们还可以通过如下的命令行来运行:

curl 'http://localhost:9200/?pretty'

从上面我们可以看出来,在默认的情况下我们已经创建了一个名字叫做 “elasticsearch” 的集群。

如果你为自己的集群已经创建安全访问,你可以使用如下的方式来运行上面的 curl 指令:

curl -XGET "http://elastic:password@localhost:9200/"

或者:

curl -u elastic:password -XGET "http://localhost:9200/"

这里的 elastic 及 password 分别为访问 Elasticsearch 的用户名及密码。关于如何配置安全,请阅读我的文章 “设置 Elastic 账户安全”。

对于熟悉 Postman 的开发者来说,我们可以很方便地使用 Postman 和 Elasticsearch 一起使用起来。它是一个很好的调试工具:

我们可以使用 Postman 工具在没有 Kibana 的情况下使用。如果你对这个感兴趣的话,你可以阅读我的文章 “Elastic:使用Postman来访问Elastic Stack”。

 

作为守护进程运行


要将 Elasticsearch 作为守护程序运行,请在命令行中指定 -d,并使用 -p 选项将进程 ID 记录在文件中:

./bin/elasticsearch -d -p pid

上面的这个命令把运行的进程存放于一个叫做 pid 的文件之中,为了方便下面的终止。可以在 $ES_HOME/logs/ 目录中找到日志消息。

要关闭 Elasticsearch,请终止 pid 文件中记录的进程 ID:

$ pkill -F pid

或者使用如下的命令来终止它的运行:

$ kill `cat pid`

我们也可以通过如下的 jps (Java Virtual Machine Process Status Tool)来查看 Elasticsearch 的运行: 

jps | grep Elasticsearch

上面会显示当前Elasticsearch运行的进程ID:

我们可以通过如下的命令来终止 Elasticsearch 的运行:

kill -9 6253

RPM 和 Debian 软件包中提供的启动脚本负责为您启动和停止 Elasticsearch 进程。

检查日志文件以确保该过程已关闭。 您将看到文本 Native controller 进程已停止,停止,关闭,在文件末尾附近关闭:

$ pwd
/Users/liuxg/elastic/elasticsearch-7.3.0/logs
(base) liuxg:logs liuxg$ ls *.log
elasticsearch.log
elasticsearch_deprecation.log
elasticsearch_index_indexing_slowlog.log
elasticsearch_index_search_slowlog.log
gc.log

在上面,我看可以看到有一个叫做 elasticsearch.log 的文件。我们可以通过如下的命令来查看 Elasticsearch 的日志(在 Elasticsearch 的安装目录运行):

tail logs/elasticsearch.log

 

在命令行上配置 Elasticsearch


默认情况下,Elasticsearch从$ES_HOME/config/elasticsearch.yml文件加载其配置。 配置Elasticsearch中介绍了此配置文件的格式。

也可以在命令行中使用-E语法指定可在配置文件中指定的任何设置,如下所示:

./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1

这种情况特别适合同样一个 Elasticsearch 的安装运行多个 Elasticsearch 的实例,这样我们可以轻松建立 replica。

我们也可以通过如下的方式来配置 http.host 的值:

./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1 -E http.host="localhost","mac"

上面的命令也可以用如下的方式进行表达:

./bin/elasticsearch -d -E cluster.name=my_cluster -E node.name=node_1 -E http.host="localhost","mac"

请注意在 -E 及参数之间多了一个空格。

请注意在上面的 mac 及 localhost 都是可以 ping 到的地址。

你在自己的电脑上可以通过 /etc/hosts 文件来指定它的地址。这样我们的 Elasticsearch 会被 http://localhost:9200 及 http://mac:9200 来访问。

提示:通常,应将任何群集范围的设置(如 cluster.name)添加到 elasticsearch.yml 配置文件中,而可以在命令行上指定任何特定于节点的设置(如 node.name)。

 

安装文件目录布局


归档分发完全是独立的。 默认情况下,所有文件和目录都包含在 $ES_HOME 中 - 解压缩归档时创建的目录。

这非常方便,因为您不必创建任何目录来开始使用 Elasticsearch,卸载 Elasticsearch 就像删除 $ES_HOME 目录一样简单。 但是,建议更改 config 目录,数据目录和 logs 目录的默认位置,以便以后不删除重要数据。

类型描述默认位置设置
homeElasticsearch 主目录或 $ES_HOME通过解压缩归档创建的目录 
bin二进制脚本包括用于启动节点的 elasticsearch 和用于安装插件的 elasticsearch-plugin

$ES_HOME/bin

 
conf配置文件包括 elasticsearch.ym

$ES_HOME/config

ES_PATH_CONF
data节点上分配的每个索引/分片的数据文件的位置。 可以容纳多个位置。

$ES_HOME/data

path.data
logslog 文件位置

$ES_HOME/logs

path.logs
plugins插件文件位置。 每个插件都将包含在一个子目录中。

$ES_HOME/plugins

 
repo共享文件系统存储库位置。 可以容纳多个位置。 文件系统存储库可以放在此处指定的任何目录的任何子目录中。没有配置path.repo
script脚本文件的位置

$ES_HOME/scripts

path.scripts

 

设置安全账户

如果我们在部署时,不希望我们的部署对所有的人使用。我们只希望对有账户的用户进行访问,那么我们可以对我们的Elastic进行设置安全。这个需要用到 x-pack 相关的功能。具体安装请参阅我的另外一篇文章 “Elasticsearch:设置Elastic账户安全”。

 

下一步


您现在已经设置了测试 Elasticsearch 环境。 在开始认真开发或使用 Elasticsearch 投入生产之前,您必须进行一些额外的设置:

我们可以接下来安装 Kibana。Kibana 有一个 Web 界面。它可以帮助我们展示及分析我们的数据。同时也可以帮我们很方便地通过用户界面的方式来把我们的数据输入到 Elasticsearch 里的数据库中。请参阅文章:

如果你想在云上部署一个 Elastic 的集群,那么你可以阅读我一下的两篇文章:

  1. Elastic::在Elastic云上3分钟部署Elastic集群
  2. Elastic: 如何在阿里云上构建Elastic集群

Elastic Stack 简介及安装

 

参考:

【1】https://www.elastic.co/downloads/past-releases