启动Elasticsearch

251 阅读6分钟

启动Elasticsearch的方法因为你的安装方式不同而不同。

Archive Packages(.tar.gz)

如果你是使用.tar.gz包安装的ElasticSearch的话,你可以使用下面的命令行启动:

./bin/elasticsearch

当你第一次启动Elasticsearch的时候,他的安全特性会以默认的方式配置。下面的这些安全配置是自动的:

  • 授权和认证被开启,并且为内置的super 用户 elastic自动生成了密码。
  • TLS所需要的证书和密钥自动生成,同时TSL使用这些配置启用。
  • 用于kibanan的验证token自动生成,在30分钟内有效。

super用户elastic生成的密码和kiabana的token会被输出到命令行中。

我们强烈建议使用环境变量存储密码:

export ELASTIC_PASSWORD="your_password"

如果你使用了密码来保护你的钥匙串,你需要为你的钥匙串输入密码,详情参考:Secure settings

默认情况下,Elasticsearch将日志打印在控制台中以及日志目录的「cluster_name」.log文件名里。在他启动的时候会记录一些信息,但是启动和初始化之后他依然运行在前台,但是不会再打印任何日志除非遇到了他需要记录的事件。当Elasticsearch在运行的时候,你可以通过HTTP和他交互,端口号默认是9200.

使用CTRL+C键可以停止Elasticsearch。

:::info 随着Elasticsearch一起打包的所有脚本,需要Bash的版本能够支持Array,并且默认他的访问地址是/bin/bash,因此需要Bash在这个路径上或者是软连接到这个位置。

:::

当Elasticsearch第一次启动的时候,他绑定在HTTP协议层的0.0.0.0的地址上,传输层则绑定在localhost上,这功能让你在不用做任何配置的情况下,以安全的方式启动一个单节点的集群。

注册一个节点到集群

在注册一个新节点前,在生产环境中,绑定一个其他地址而不是localhost以及启动前的检查是必要的。在此期间,可能注册token就过期了,这就是为什么注册token不自动生成的原因。

同时,在没有任何额外配置的前提下,只有相同的host才能加入集群。如果你希望其他的节点能够加入集群,你需要将你的transport.host配置项设置成合适的值(例如删除建议的0.0.0.0的注释)或者绑定一个别的节点可以访问的IP地址。参考transport settings 配置。

向集群注册新的节点前,使用elasticsearch-create-enrollment-token工具生成一个token,并且在具体加入的时候使用参数--enrollment-token加入集群。

启动另外一个命令行窗口,并定位到你的 ElasticSearh 安装目录,然后输入下面的命令:

bin/elasticsearch-create-enrollment-token -s node

拷贝生成的token。

然后到你的需要启动的机器上,找到安装目录,输入下面的命令:

bin/elasticsearch --enrollment-token <enrollment-token>

ElasticSearch会自动生成证书和密钥在下面的目录

config/certs

重复上面的步骤,直到你想启动的节点都加入了集群。

使用daemon模式启动ElasticSearch

以deamon模式运行ES需要输入-d参数,并使用-p参数指定记录pid的路径:

./bin/elasticsearch -d -p pid

如果你使用了密码来保护你的钥匙串,你需要为你的钥匙串输入密码,详情参考:Secure settings

日志在这个路径下,$ES_HOME/logs/

使用文件里记录的pid来杀死进程:

pkill -F pid

:::info 注意: 使用tar.gz的安装方式并没有包含systemd模块,如果要以service运行ES,你需要使用RPM或者Debian的方式安装ElasticSearch

:::

ZIP包安装方式

如果你使用的.zip包在Windows操作系统安装的话,你可以使用命令行启动ES,如果要在系统启动的时候自动启动,你需要使用service的方式运行ES。

使用命令行启动ES

你可以使用下面的命令行来启动ES

.\bin\elasticsearch.bat

Debian包

如果要在系统启动的时候自动启动ElasticSearch的话,使用下面的命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

ElasitcSearch可以使用下面的命令启动和停止:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令不会提供启动与否的反馈,相反他们被记录在日志文件里,/var/log/elasticsearch/

如果你有钥匙串的密码,你需要在systed的命令行里以环境变量的方式传入存储有钥匙串密码的文件

echo "keystore_password" > /path/to/my_pwd_file.tmp
chmod 600 /path/to/my_pwd_file.tmp
sudo systemctl set-environment ES_KEYSTORE_PASSPHRASE_FILE=/path/to/my_pwd_file.tmp
sudo systemctl start elasticsearch.service

默认情况下,ElasticSearch不会打印日志到systemd日志,如果要启用journalctl日志到话,--quiet选项需要从ExecStart命令行里移除,他们写在elasticsearch.service这个文件里。

一旦systemd日志开启,你可以使用下面的命令来查看

sudo journalctl -f

使用下面的命令列出日志体:

sudo journalctl --unit elasticsearch

加上时间后,列出这个指定时间以后的:

sudo journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

使用帮助命令查看更多的man journalctl

:::info 注意:默认情况下,ElasticSearch的systemd的TimeoutStartSec参数设置的是900s。如果你运行的是238之后的systemd版本的话,他在启动的阶段会自动扩展这个超时时间,直到他正确的启动。然而,238之前的版本没有这个功能,在设置的超时时间到了的时候,elasticsearch的启动会被终止。在命令行里不会有任何日志记录

[2022-01-31T01:22:31,077][INFO ][o.e.n.Node ] [instance-0000000123] starting ...

...

[2022-01-31T01:37:15,077][INFO ][o.e.n.Node ] [instance-0000000123] stopping ...

但是在日志文件里有详细的报告timeout的日志:

Jan 31 01:22:30 debian systemd[1]: Starting Elasticsearch...

Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Start operation timed out. Terminating.

Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Main process exited, code=killed, status=15/TERM

Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Failed with result 'timeout'.

Jan 31 01:37:15 debian systemd[1]: Failed to start Elasticsearch.

:::

Docker镜像

如果使用docker安装的话,可以使用命令行来启动,参考Run Elasticsearch in Docker

RPM包

和Debian包类似,请完全参考Debian包章节。