启动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包章节。