diff --git a/distribution/build.gradle b/distribution/build.gradle index 3522becc53ec2..454f49173c34c 100644 --- a/distribution/build.gradle +++ b/distribution/build.gradle @@ -422,6 +422,11 @@ configure(distributions.findAll { ['deb', 'rpm'].contains(it.name) }) { fileType CONFIG | NOREPLACE from "${packagingFiles}/systemd/elasticsearch.service" } + configurationFile '/usr/lib/systemd/system/elasticsearch@.service' + into('/usr/lib/systemd/system') { + fileType CONFIG | NOREPLACE + from "${packagingFiles}/systemd/elasticsearch@.service" + } into('/usr/lib/sysctl.d') { fileType CONFIG | NOREPLACE from "${packagingFiles}/systemd/sysctl/elasticsearch.conf" diff --git a/distribution/src/main/packaging/systemd/elasticsearch@.service b/distribution/src/main/packaging/systemd/elasticsearch@.service new file mode 100644 index 0000000000000..bda2f05897732 --- /dev/null +++ b/distribution/src/main/packaging/systemd/elasticsearch@.service @@ -0,0 +1,60 @@ +[Unit] +Description=Elasticsearch Instance %I +Documentation=http://www.elastic.co +Wants=network-online.target +After=network-online.target + +[Service] +RuntimeDirectory=elasticsearch +Environment=ES_HOME=/usr/share/elasticsearch +Environment=ES_PATH_CONF=${path.conf}/%i +Environment=PID_DIR=/var/run/elasticsearch +EnvironmentFile=-${path.env}-%i + +WorkingDirectory=/usr/share/elasticsearch + +User=elasticsearch +Group=elasticsearch + +ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch-%i.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=65536 + +# 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 + +[Install] +WantedBy=multi-user.target + +# Built for ${project.name}-${project.version} (${project.name}) diff --git a/docs/reference/setup/install/systemd.asciidoc b/docs/reference/setup/install/systemd.asciidoc index bf94e95fb63df..90e782ff0dc52 100644 --- a/docs/reference/setup/install/systemd.asciidoc +++ b/docs/reference/setup/install/systemd.asciidoc @@ -51,3 +51,25 @@ sudo journalctl --unit elasticsearch --since "2016-10-30 18:17:16" Check `man journalctl` or https://www.freedesktop.org/software/systemd/man/journalctl.html for more command line options. + +===== Managing Multiple Instances + +Optional systemd service templates are included to better aid in running more +than one instance on a host. +This is an non-standard configuration scenario intended for advanced users. + +In order to do so, necessary directories and configuration files must be +created to manage separate instances of Elasticsearch. +The following bash commands will start three local instances sharing a data +directory: + +[source,sh] +-------------------------------------------- +sudo echo node.max_local_storage_nodes: 3 >> /etc/elasticsearch/elasticsearch.yml +sudo echo discovery.zen.minimum_master_nodes: 2 >> /etc/elasticsearch/elasticsearch.yml +for instance in 1 2 3 ; do + sudo mkdir /etc/elasticsearch/$instance + sudo cp -p /etc/elasticsearch/*.* /etc/elasticsearch/$instance + sudo systemctl start elasticsearch@$instance.service +done +--------------------------------------------