SUSE Linux Enterprise Server (SLES) 12

edit

The following instructions show you how to prepare your hosts on SLES 12.

If you want to install Elastic Cloud Enterprise on your own hosts, the steps for preparing your hosts can take a bit of time. There are two ways you can approach this:

  • Think like a minimalist: Install the correct version of Docker on hosts that meet the prerequisites for Elastic Cloud Enterprise, then skip ahead and install Elastic Cloud Enterprise. Be aware that some checks during the installation can fail with this approach, which will mean doing further host preparation work before retrying the installation.
  • Cover your bases: If you want to make absolutely sure that your installation of Elastic Cloud Enterprise can succeed on hosts that meet the prerequisites, or if any of the checks during the installation failed previously, run through the full preparation steps in this section and then and install Elastic Cloud Enterprise. You’ll do a bit more work now, but life will be simpler later on.

Regardless of which approach you take, the steps in this section need to be performed on every host that you want to use with Elastic Cloud Enterprise.

Install Docker version 18.09.9
edit
  1. Add the SLES Virtualization:containers repository:

    sudo zypper ar -t rpm-md https://download.opensuse.org/repositories/Virtualization:containers/SLE_12_SP3/Virtualization:containers.repo
    sudo zypper refresh
  2. Install the correct version of the docker package:

    sudo zypper install -y docker-18.09.7_ce-98.43.1
Set up XFS on SLES
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 SLES 12, 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.

If you use XFS, you must use XFS on all allocators.

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,pquota,prjquota,x-systemd.automount  0 0
  4. Regenerate the mount files:

    sudo mount -a
Update the configurations settings
edit
  1. Stop the Docker service:

    sudo systemctl stop docker
  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-bootloader
  3. Configure kernel parameters

    cat <<EOF | sudo tee -a /etc/sysctl.conf
    # Required by Elasticsearch 5.0 and later
    vm.max_map_count = 262144
    # enable forwarding so the Docker networking works as expected
    net.ipv4.ip_forward = 1
    # Make sure the host doesn't swap too early
    vm.swappiness=1
    EOF
    1. Apply the settings:

      sudo sysctl -p
      sudo service network restart
  4. 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
  5. 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
  6. 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
  7. 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. Update /etc/sysconfig/docker. If the file path and file do not exist, create them first.

    • Docker version 18.09.9

      ## Path           : System/Management
      ## Description    : Extra cli switches for docker daemon
      ## Type           : string
      ## Default        : ""
      ## ServiceRestart : docker
      #
      DOCKER_OPTS="-H unix:///run/docker.sock -g /mnt/data/docker --storage-driver=overlay --bip=172.17.42.1/16"
  2. Apply the updated Docker daemon configuration:

    Reload the Docker daemon configuration:

    sudo systemctl daemon-reload

    Restart the Docker service:

    sudo systemctl restart docker

    Enable Docker to start on boot:

    sudo systemctl enable docker
  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
    net.ipv4.tcp_keepalive_time=1800
    net.netfilter.nf_conntrack_tcp_timeout_established=7200
    net.netfilter.nf_conntrack_max=262140
    SETTINGS
    1. Ensure settings in /etc/sysctl.d/*.conf are applied on boot

      SCRIPT_LOCATION="/var/lib/cloud/scripts/per-boot/00-load-sysctl-settings"
      sudo sh -c "cat << EOF > ${SCRIPT_LOCATION}
      #!/bin/bash
      
      set -x
      
      lsmod | grep ip_conntrack || modprobe ip_conntrack
      
      sysctl --system
      EOF
      "
      sudo chmod +x ${SCRIPT_LOCATION}
  5. Reboot your system to ensure that all configuration changes take effect:

    sudo reboot
  6. 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.

  7. 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.