Elastic Cloud Enterprise (ECE) is a significant innovation from Elastic, designed to simplify the deployment, management, and scaling of Elasticsearch clusters in various environments. ECE provides a unified, efficient platform for handling Elasticsearch clusters on-premises, in the cloud, or in hybrid setups. It offers a centralized orchestration layer, enhancing operational efficiency through automation, monitoring, and seamless scaling. ECE empowers organizations to utilize the full Elastic Stack (Elasticsearch, Kibana, Beats, Logstash) for robust search, observability, and security solutions while maintaining control over their data.
In this blog, we’ll delve into ECE’s architecture, setup, features, and deployment strategies.
For this setup, it requires three hosts such as:
Component Name | RAM | CPUs | Storage | Operating System |
Nginx | 16 GB | 4 | 64 GB (SSD) | Ubuntu 20.04 |
Director and Coordinator | 32GB | 8 | 128GB ( SSD ) | Ubuntu 20.04 |
Proxy and Allocator | 64 GB | 16 | 512 GB ( SSD ) | Ubuntu 20.04 |
Note: consider example.com is your domain name.
cloudui.example.com (for accessing Cloud UI)
*.kibana.example.com (for accessing Kibana UI)
*.fleet.kibana.example.com (for Fleet server)
*.apm.kibana.example.com (for APM)
Note: Fleet and APM endpoint URLs will be created as subdomains of the Kibana endpoint URL.
Create a user named elastic with sudo privilege.
useradd elastic
sudo mkfs.xfs /dev/< disk path>
sudo install -o $USER -g $USER -d -m 700 /mnt/data
/dev/<disk path> /mnt/data xfs defaults,nofail,x-systemd.automount,prjquota,pquota 0 2
sudo systemctl daemon-reload
sudo systemctl restart local-fs.target
Install Docker LTS version 24.0 for Ubuntu 20.04 or 22.04.
sudo systemctl stop docker
In the /etc/default/grub file, ensure that the GRUB_CMDLINE_LINUX= variable includes these values:
cgroup_enable=memory swapaccount=1 cgroup.memory=nokmem
sudo update-grub
cat <<EOF | sudo tee -a /etc/sysctl.conf
The following is an example of the configuration file fields:
# Required by Elasticsearch
vm.max_map_count=262144
# enable forwarding so the Docker networking works as expected
net.ipv4.ip_forward=1
# Decrease the maximum number of TCP retransmissions to 5 as recommended for Elasticsearch TCP retransmission timeout.
# See https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config-tcpretries.html
net.ipv4.tcp_retries2=5
# Make sure the host doesn't swap too early
vm.swappiness=1
EOF
sudo sysctl –p
* 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
elastic soft nproc unlimited
elastic hard nproc unlimited
root soft nofile 1024000
root hard nofile 1024000
root soft memlock unlimited
[Unit]
Description=Docker Service
After=multi-user.target
[Service]
Environment="DOCKER_OPTS=-H unix:///run/docker.sock --data-root /mnt/data/docker --storage-driver=overlay2 --bip=172.17.42.1/16 --raw-logs --log-opt max-size=500m --log-opt max-file=10 --icc=false"
ExecStart=
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
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
sudo reboot -f
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.
Note: Repeat the same steps to configure the other host that we are going it for the role Allocator and Proxy.
This is the high-level overview of default installation of ECE. The below picture depicts the admin user using Cloud UI for creating and managing deployments. The end users will be accessing Kibana via Proxy, and all the ELK clusters will be running in the Allocator. The proxy communicates and routes the traffic to the allocator for the relevant ELK cluster.
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install --availability-zone MY_ZONE-1 --memory-settings '{"runner":{"xms":"1G","xmx":"1G"},"zookeeper":{"xms":"4G","xmx":"4G"},"director":{"xms":"1G","xmx":"1G"},"constructor":{"xms":"4G","xmx":"4G"},"admin-console":{"xms":"4G","xmx":"4G"}}'
curl -k -H 'Content-Type: application/json' -u admin:<password> https://localhost:12443/api/v1/platform/configuration/security/enrollment-tokens -d '{ "persistent": false, "roles": ["proxy”] }'
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install --coordinator-host HOST_IP --roles-token '<Token>' --roles "proxy" --availability-zone MY_ZONE-1 --memory-settings '{"runner":{"xms":"1G","xmx":"1G"}
curl -k -H 'Content-Type: application/json' -u admin:<password> https://localhost:12443/api/v1/platform/configuration/security/enrollment-tokens -d '{ "persistent": false, "roles": ["allocator”] }'
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install --coordinator-host HOST_IP --roles-token '<Token>' --roles "allocator" --availability-zone MY_ZONE-1 --memory-settings '{"runner":{"xms":"1G","xmx":"1G"},"allocator ":{"xms":"4G","xmx":"4G"}}'
Note: Initially it won’t be possible to remove the allocator role from the first host. Because the allocator will be in use by running three instances/clusters which are created by default during the installation and these clusters are known to be a system deployment.
In the Cloud UI, navigate to Platform –> Hosts –> Select the Host IP which has all the roles –> Allocator. Check the boxes of instances that you want to move it to new allocator and click Move Instances.
In the next screen, you need to select the allocator that you’re moving to (In our case, it is the second host). Once it has been moved to another allocator host. We could be able to remove the allocator role in the first host.
Here we successfully separated the proxy and allocator roles from the director and controller host.
cloudui.example.com (for accessing Cloud UI)
*.kibana.example.com (for accessing Kibana UI)
*.fleet.kibana.example.com (for Fleet server)
*.apm.kibana.example.com (for APM)
cloudui.example.com --> < Your Public IP >
*.kibana.example.com --> cloudui.example.com
*.fleet.kibana.example.com --> cloudui.example.com
*.apm.kibana.example.com --> cloudui.example.com
Partner with Sennovate and learn more about the Elastic Cloud Enterprise. Our cybersecurity experts will work closely with you to develop tailored solutions that meet your specific needs and regulatory obligations. Let’s build a secure and compliant future for your bank, together. Contact Sennovate today and ditch the compliance worries!