Ubuntu 14.04 LTS (Trusty Tahr)

edit

The official end-of-life (EOL) from Canonical for Ubuntu 14.04 LTS (Trusty Tahr) is April 2019, and so it’s time to say goodbye to this version of Ubuntu. After the EOL, Elastic will no longer be able to support you fully, if your ECE installation runs on Ubuntu 14.04. You can use Ubuntu 16.04 LTS (Xenial Xerus) instead.

The following instructions show you how to prepare your hosts on Ubuntu Trusty.

Install a supported Linux kernel

edit

Elastic Cloud Enterprise requires 3.10 or higher. The steps shown here install kernel 4.4.

  1. Refresh the package index files from their sources:

    sudo apt-get update
  2. Install the Linux kernel and the xfsprogs package available on your system. You can omit the xfsprogs package if you don’t plan to use XFS.

    sudo apt-get install -y linux-generic-lts-xenial xfsprogs

Install Docker

edit

We recommend that you install Docker LTS version 18.09.2.

  1. Add the Docker repository:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo \
         apt-key add -
    sudo apt-get update
  2. Verify that you have the key with the 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 fingerprint:

    sudo apt-key fingerprint 0EBFCD88
    ...
    pub   4096R/0EBFCD88 2017-02-22
          Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid                  Docker Release (CE deb) <docker@docker.com>
    sub   4096R/F273FCD8 2017-02-22
    ...
  3. Add the stable docker repository:

    sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
  4. Install the correct version of the docker-ce package:

    sudo apt-get install docker-ce=18.09.2*

Recommended: Set up XFS on Ubuntu

edit

Elastic Cloud Enterprise can run without XFS, but XFS is required to support disk space quotas for Elasticsearch data directories. Some Linux distributions such as RHEL and CentOS already provide XFS as the default file system. On Ubuntu, we recommend that you set up an XFS file system first.

Disk space quotas set a limit on the amount of disk space an Elasticsearch cluster node can use. Currently, quotas are calculated by a static ratio of 1:32, which means that for every 1 GB of RAM a cluster is given, a cluster node is allowed to consume 32 GB of disk space.

Using LVM, mdadm, or a combination of the two for block device management is possible, but the configuration is not covered here, nor is it provided as part of supporting Elastic Cloud Enterprise.

Example: Set up XFS on a single, pre-partitioned block device named /dev/xvdg1.

  1. Format the partition:

    sudo mkfs.xfs /dev/xvdg1
  2. Create the /mnt/data/ directory as a mount point:

    sudo install -o $USER -g $USER -d -m 700 /mnt/data
  3. Add an entry to the /etc/fstab file for the new XFS volume. The default filesystem path used by Elastic Cloud Enterprise is /mnt/data.

    /dev/xvdg1 /mnt/data xfs  defaults,nofail,pquota,prjquota  0 2

Update the configurations settings

edit
  1. Stop the Docker service:

    sudo service docker stop
  2. Enable cgroup accounting for memory and swap space.

    1. In the /etc/default/grub file, ensure that the GRUB_CMDLINE_LINUX= variable includes these values:

      cgroup_enable=memory swapaccount=1 cgroup.memory=nokmem
    2. Update your Grub configuration:

      sudo update-grub
  3. If you plan to run Elasticsearch 5.0 and later: Update the /etc/sysctl.conf file to set the maximum number of mapped memory areas a process can have:

    echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
  4. Verify that IPv4 forwarding is enabled:

    cat /proc/sys/net/ipv4/ip_forward

    If the output of this command is not 1, you must enable IPv4 forwarding so that Docker can work as expected:

    1. Update the /etc/sysctl.conf file to include this line:

      net.ipv4.ip_forward = 1
    2. Restart the network service:

      sudo sysctl -p
    3. Verify that the change is applied:

      cat /proc/sys/net/ipv4/ip_forward

      The output 1 indicates that IPv4 forwarding is turned on.

  5. Adjust the system limits.

    Add the following configuration values to the /etc/security/limits.conf file. These values are derived from our experience with the Elastic Cloud hosted offering and should be used for Elastic Cloud Enterprise as well.

    If you are using a user name other than elastic, adjust the configuration values accordingly.

    *                soft    nofile         1024000
    *                hard    nofile         1024000
    *                soft    memlock        unlimited
    *                hard    memlock        unlimited
    elastic          soft    nofile         1024000
    elastic          hard    nofile         1024000
    elastic          soft    memlock        unlimited
    elastic          hard    memlock        unlimited
    root             soft    nofile         1024000
    root             hard    nofile         1024000
    root             soft    memlock        unlimited
  6. If you did not create the mount point earlier (if you did not set up XFS), create the /mnt/data/ directory as a mount point:

    sudo install -o $USER -g $USER -d -m 700 /mnt/data
  7. If you set up a new device with XFS earlier:

    1. Mount the block device (change the device name if you use a different device than /dev/xvdg1):

      sudo mount /dev/xvdg1
    2. Set the permissions on the newly mounted device:

      sudo chown $USER:$USER /mnt/data
  8. Create the /mnt/data/docker directory for the Docker service storage:

    sudo install -o $USER -g $USER -d -m 700 /mnt/data/docker

Configure the Docker daemon options

edit
  1. Set the new data path, storage driver, and specify the bridge IP address:

    For the bridge IP address, use the --bip parameter if there is a conflict, or omit the parameter. Update /etc/default/docker:

    • If you are using Docker version 18.09.2:

      DOCKER_OPTS="--data-root /mnt/data/docker --storage-driver=aufs --bip=172.17.42.1/16"
  2. Apply the updated Docker daemon configuration by restarting the Docker service:

    sudo service docker restart
  3. Enable your user to communicate with the Docker subsystem by adding it to the docker group:

    sudo usermod -aG docker $USER
  4. Recommended: Tune your network settings.

    Create a 70-cloudenterprise.conf file in the /etc/sysctl.d/ file path that includes these network settings:

    cat << SETTINGS | sudo tee /etc/sysctl.d/70-cloudenterprise.conf
    net.ipv4.tcp_max_syn_backlog=65536
    net.core.somaxconn=32768
    net.core.netdev_max_backlog=32768
    SETTINGS
  5. Pin the Docker version to ensure that the docker package does not get upgraded:

    echo "docker-ce hold" | sudo dpkg --set-selections
  6. Reboot your system to ensure that all configuration changes take effect:

    sudo reboot
  7. After rebooting, verify that your Docker settings persist as expected:

    sudo docker info | grep Root

    If the command returns Docker Root Dir: /mnt/data/docker, then your changes were applied successfully and persist as expected.

    If the command returns Docker Root Dir: /var/lib/docker, then you need to troubleshoot the previous configuration steps until the Docker settings are applied successfully before continuing with the installation process. For more information, see Custom Docker daemon options in the Docker documentation.

  8. Repeat these steps on other hosts that you want to use with Elastic Cloud Enterprise or follow the steps in the next section to start installing Elastic Cloud Enterprise.