elasticsearch 包安装方式单点启动多服务
搞调研分别以rpm包的形式布署了es官方版和亚马逊分发版
https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
https://opendistro.github.io/for-elasticsearch-docs/
集群拓扑需要单主机起多个node服务,多服务需要多项不同的配置
但可惜的是rpm安装方式以systemd方式启动,再好不过
Sysconfig fileedit
When using the RPM or Debian packages, system settings and environment variables can be specified in the system configuration file, which is located in:
RPM
/etc/sysconfig/elasticsearch
Debian
/etc/default/elasticsearch
但是systemd内的EnvironmentFile=-/etc/sysconfig/elasticsearch 并不生效,只能唯一更改/etc/default/elasticsearch
个人设置EnvironmentFile=-/etc/sysconfig/elasticsearch
为 EnvironmentFile=-/etc/sysconfig/elasticsearch-node1
,配置并不生效,实际还是会以/etc/sysconfig/elasticsearch方式执行
[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_HOME=/usr/share/elasticsearch
Environment=ES_PATH_CONF=/etc/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
Environment=ES_SD_NOTIFY=true
#EnvironmentFile=-/etc/sysconfig/elasticsearch
EnvironmentFile=-/etc/sysconfig/elasticsearch-node1
WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet
# StandardOutput is configured to redirect to journalctl since
# some error messages may be logged in standard output before
# elasticsearch logging system is initialized. Elasticsearch
# stores its logs in /var/log/elasticsearch and does not use
# journalctl by default. If you also want to enable journalctl
# logging, you can simply remove the "quiet" option from ExecStart.
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
[Install]
WantedBy=multi-user.target
# Built for packages-7.10.2 (packages)
那要布署多节点就不能用rpm包安装和systemd安装的方案了?
直接用jar包,或docker,都可以解决,如果都用docker了,也考虑能不能上k8s,直接云原生es
但对强存储的服务云原生,还是不放心,想通过裸机部署,裸机部署需要用systemd来管理,需要systemd的启动多节点的解决办法
既然外在表现是更改EnvironmentFile=-/etc/sysconfig/elasticsearch-node1
不生效,那是因为es启动脚本一定有强制加载/etc/sysconfig/elasticsearch的地方,找找看
grep '/etc/sysconfig/elasticsearch' /usr/share/elasticsearch/bin/*
/usr/share/elasticsearch/bin/elasticsearch-env:source /etc/sysconfig/elasticsearch
果然
# check the Java version
"$JAVA" "$XSHARE" -cp "$ES_CLASSPATH" org.elasticsearch.tools.java_version_checker.JavaVersionChecker
export HOSTNAME=$HOSTNAME
source /etc/sysconfig/elasticsearch
if [ -z "$ES_PATH_CONF" ]; then
echo "ES_PATH_CONF must be set to the configuration path"
exit 1
fi
source /etc/sysconfig/elasticsearch
这一行里写死了加载/etc/sysconfig/elasticsearch,所以systemd 配置里EnvironmentFile=-/etc/sysconfig/elasticsearch
并不生效,调整测试
- 首先
source /etc/sysconfig/elasticsearch
更改为source $ES_SYSCONFIG
,从ES_SYSCONFIG 加载真实的配置文件路径
#source /etc/sysconfig/elasticsearch
source $ES_SYSCONFIG
- 修改systemd 配置,添加传入ES_SYSCONFIG,指定相应配置文件的参数
EnvironmentFile=ES_SYSCONFIG=/etc/sysconfig/elasticsearch-node1
# /usr/lib/systemd/system/elasticsearch.service
[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_HOME=/usr/share/elasticsearch
Environment=ES_PATH_CONF=/etc/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
Environment=ES_SD_NOTIFY=true
#EnvironmentFile=-/etc/sysconfig/elasticsearch
EnvironmentFile=-/etc/sysconfig/elasticsearch-node1
EnvironmentFile=ES_SYSCONFIG=/etc/sysconfig/elasticsearch-node1
启动服务,测试生效,问题解决
另可能会有些es权限相关的问题,对需要读写的目录添加授权
chown elasticsearch:elasticsearch /etc/sysconfig/elasticsearch-node1
哪些目录漏掉了,会因为权限问题es启动失败,可以通过es的日志定位到具体目录