Managed Eliatra OpenSearch Distribution Documentation

What is MEOD

MEOD (Managed Eliatra OpenSearch Distribution) is an enterprise-grade managed hosting solution for OpenSearch. Built and maintained by Eliatra, MEOD delivers robust search and analytics capabilities with enhanced security, reliability, and professional support. It maintains full compatibility with OpenSearch while offering long-term support (LTS) and rapid security updates.

MEOD vs OpenSearch Comparison

Feature MEOD (EOD) Standard OpenSearch
Compatibility Full OpenSearch compatibility Standard features
Support Enterprise-grade with 24/7 SLA options Community support
Security Guaranteed CVE patch delivery No patch timeline guarantee
Customization Enterprise-specific solutions Standard options
Management Eliatra Controlplane and integrations OpenSearch Dashboards only

Getting Started

Accessing the Control Plane

MEOD is managed through the Eliatra Controlplane UI - a centralized platform for configuring and monitoring your OpenSearch clusters.

To begin:

  1. Register at https://ui.controlplane.prod.eliatra.cloud
  2. Log in to access the control panel

cockpit

Quick Test Cluster Deployment

Note: Some features (Expert mode, Support level, Automatic Backup/Updates) are currently in Early Access and will be available in future releases.

  1. Navigate to CockpitClustersCreate
  2. Enter your cluster name
  3. Select either OpenSearch or EOD
  4. Choose your version
  5. Keep default settings for Expert mode and Support Level
  6. Disable Automatic Backups/Updates for test clusters
  7. Select the Starter template
  8. Review and adjust Node Pools if needed
  9. Click “Launch new cluster”

Deployment typically takes 15-30 minutes. You’ll receive an email from Eliatra Customer Care when your cluster is ready. The cluster may show as “Unhealthy” during deployment.

Accessing Your Cluster

Once your cluster shows “Ready”:

  1. Access OpenSearch Dashboards using CockpitClustersDashboard
  2. Find your credentials under ClustersDetailsInitial credentials for EOD/OpenSearch API and Dashboards
  3. Locate your OpenSearch Dashboards URL and API URL in the same view

Deploying a Production-Ready HA Cluster

This guide walks you through deploying a high-availability cluster optimized for production workloads. The example configuration includes 3 master nodes, 3 data/ingest nodes, and 2 OpenSearch Dashboards nodes, designed for:

  • 2GB daily log ingestion
  • 14-day retention period
  • 100MB/second peak ingest rate
  • High availability requirements
  • ~110GB total storage (28GB raw data × 1.5 indexing overhead × 2 replication factor + 30% headroom)

Note: Some features (Expert mode, Support level, Automatic Backup/Updates) are currently in Early Access and will be available in future releases.

Deployment Steps

Basic Configuration

  1. Navigate to CockpitClustersCreate
  2. Enter your cluster name
  3. Choose between OpenSearch and EOD
  4. Select your version
  5. Configure Expert mode (enable only if admin certificate access is required)
  6. Set Support level (recommended: Plus or Pro; Time and Material if Expert mode is enabled)
  7. Set Automatic Backups to 24h/14d or 24h/30d (contact Support for custom options)
  8. Configure Automatic Updates (minimum recommendation: Critical Security fixes only)
  9. Select Custom template
  10. Leave OpenSearch Dashboards default configuration (1 CPU, 4GB RAM per node)
  11. Create “Manager-pool”:
    • Enable “cluster_manager” role
    • 3 nodes
    • 2-4 CPU
    • 8GB RAM
    • 50GB storage
    • Assign to ZONE_1
  12. Create first data node pool in ZONE_2:
    • 2 nodes
    • 8 CPU cores
    • 32GB RAM
    • 150GB storage
    • Roles: data, ingest
  13. Create second data node pool in ZONE_1:
    • 3 nodes
    • Same specifications as first data pool
  14. Create final data node pool in ZONE_2:
    • 2 nodes
    • Same specifications as first data pool
  15. Click “Launch new cluster”

Important: For high availability, maintain at least 2 nodes per pool in each zone.

Advanced Configuration Details

Dedicated Kubernetes Nodes

Each MEOD cluster node operates on a dedicated Kubernetes node to ensure optimal performance and resource isolation. For example:

  • A cluster with 3 manager nodes and 3 data nodes uses 6 distinct Kubernetes nodes
  • No other processes share resources with your OpenSearch/EOD nodes
  • Complete isolation guarantees consistent performance

Expert Mode Configuration

Expert mode enables advanced cluster customization but requires careful handling:

  • Provides access to Extra settings
  • Enables admin certificate access
  • Restricts support to Time and Materials only
  • Incorrect configuration may impact cluster stability

Warning: Use Expert mode with caution as improper settings can affect cluster performance or cause outages.

Resource Management

The Resources panel, accessible via Cockpit and during cluster creation, provides resource allocation visibility:

resources

Resource Categories:

  • Billable: Total resources under active billing
  • Standby: Reserved maintenance resources (not billed)
  • Requested: Additional resources being configured
  • Available: Remaining resource capacity

Use this panel to track and manage your cluster’s resource utilization effectively.

Resource Management Details

Additional Resources

During cluster deployment, MEOD provisions temporary bootstrap resources that are automatically removed post-deployment. Each node also receives a small storage buffer for operational purposes. These auxiliary resources are included in the displayed total cost.

Understanding Pricing

Current Pricing Overview

View your current pricing summary in the “Cluster Resources” panel:

pricing

Deployment Pricing Details

During cluster creation, the pricing panel displays two key figures per interval (Min/Hour/Month):

pricing creation

  • Upper amount: Cost for new cluster
  • Lower amount (bracketed): Total cost including all clusters

Account Security

Password Management

To update your MEOD password:

  1. Click the profile icon (top right)
  2. Select “Change Password”
  3. Follow the on-screen instructions

Change password

Two-Factor Authentication (2FA)

Enhance your account security by enabling 2FA:

  1. Click the profile icon
  2. Select “Manage 2FA”
  3. Choose and configure your preferred 2FA method

manage 2FA

The 2FA configuration page allows you to select your authentication method:

2FA

We strongly recommend enabling 2FA for enhanced account security.

Cluster Configuration Guide

Node Pool Management

Node Pool Configuration

Each Node Pool requires specific configuration parameters:

  • Node pool name
  • Node count
  • CPU cores per node
  • RAM allocation
  • Storage capacity
  • Zone placement
  • Node roles

nodepool

Role Assignment

Roles can be assigned using predefined templates or custom configurations:

roles

Available Roles

cluster_manager

  • Manages cluster-wide operations
  • Controls metadata and shard allocation
  • Handles cluster state management

coordinating

  • Routes cluster requests
  • Manages search/index distribution
  • Acts as cluster load balancer

data

  • Stores and processes data
  • Handles indexing and search operations
  • Requires largest storage allocation

ingest

  • Processes data pre-indexing
  • Manages transformation pipelines
  • Offloads preprocessing from data nodes

ml

  • Executes machine learning operations
  • Handles model training and analysis
  • Supports anomaly detection

remote_cluster_client

  • Enables cross-cluster operations
  • Manages remote cluster connections
  • Facilitates distributed searches

search

  • Optimizes search operations
  • Processes search queries
  • Enhances query performance

Resource Allocation

Resource allocation is configured per node pool, with all nodes in a pool sharing identical specifications. Consider role requirements when allocating resources:

  • Manager nodes: Lower storage needs
  • Data nodes: Higher storage priority
  • Search nodes: RAM and CPU priority

Admin Certificate Access

For Expert mode clusters, access advanced OpenSearch APIs using admin certificates:

  1. Navigate to Cockpit → Clusters → [Your Cluster] → Admin Certificate/Key
  2. Use endpoint: https://admin-api.[Cluster_ID].eliatra.cloud:8443

admin certificate

Example API call using cluster_ID “5267d2bb-2a23-43a1-a861-02f167953fd2”:

curl -XGET "https://admin-api.5267d2bb-2a23-43a1-a861-02f167953fd2.eliatra.cloud:8443/_cat/indices?expand_wildcards=all" \
--cert certs/5267d2bb-2a23-43a1-a861-02f167953fd2_admin_cert.pem \
--key certs/5267d2bb-2a23-43a1-a861-02f167953fd2_admin_certkey.pem

Security Configuration

Access Control Management

Access control is managed through standard OpenSearch Access Control API. Admin users have full access to security configurations.

Admin Password Management

Initial Password

  • A random admin password is generated during cluster initialization
  • Access this password through the UI
  • Change this password immediately after cluster setup

password

Password Update Methods

Via OpenSearch Dashboard:

  1. Navigate to Security → Internal users
  2. Select admin user
  3. Enter new password

Via API: Example using cluster ID: ceb4030f-5941-4cd6-b6dd-1481ecfc71c2

curl -u admin:R4vZdC0h6ovNob9y7S1c7nVOoAKldkFb -XPUT \
"https://api.ceb4030f-5941-4cd6-b6dd-1481ecfc71c2.eliatra.cloud/_plugins/_security/api/account" \
-H 'Content-Type: application/json' \
-d '{
    "current_password": "R4vZdC0h6ovNob9y7S1c7nVOoAKldkFb",
    "password": "OvC77aBkv9OKluZd0QGEK6tncUoepPVl"
}'

Successful response:

{"status":"OK","message":"'admin' updated."}

Configuration Settings

Custom Configuration

Both opensearch.yml and opensearch_dashboards.yml can be customized through UI or API when Expert mode is enabled.

UI Configuration

  1. Enable Expert mode
  2. Access Custom Settings
  3. Configure:
    • OpenSearch: Modify opensearch.yml
    • OpenSearch Dashboards: Modify opensearch_dashboards.yml

custom settings

Example YAML configuration:

# Thread pools and queues
thread_pool.write.size: 2
thread_pool.write.queue_size: 1000

Advanced Configuration and API Usage

Custom Settings via API

When using the MEOD API, customize your cluster configuration through the customSettings parameter.

Example cluster creation with custom settings:

curl -X POST "https://api.controlplane.prod.eliatra.cloud/v1/clusters" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "flavor": "eod",
    "openSearchVersion": "2.11.1-ee2",
    "customSettings": {
      "bootstrap.memory_lock": "true",
      "indices.breaker.total.limit": "70%",
      "indices.breaker.request.limit": "60%",
      "indices.breaker.fielddata.limit": "40%",
      "indices.memory.index_buffer_size": "20%",
      "indices.queries.cache.size": "5%",
      "indices.fielddata.cache.size": "15%"
    },
    "nodepools": [
      {
        "name": "string",
        "nodes": 3,
        "roles": "default",
        "zone": "ZONE_1",
        "nodeResources": { }
      }
    ],
    "dashboard": {
      "replicas": 2,
      "ramInGb": 4,
      "cpuCores": 1,
      "customSettings": {
        "opensearch_dashboards.branding.useCustomLogo": true,
        "opensearch_dashboards.branding.logoUrl": "/path/to/logo.png",
        "opensearch_dashboards.branding.title": "My Custom OpenSearch Dashboards"
      }
    }
}'

MEOD API Guide

For complete API documentation, refer to:

Authentication

Generating Access Tokens

Standard authentication:

export YOUR_API_KEY=$( curl -Ss -L -X POST 'https://auth.controlplane.prod.eliatra.cloud/realms/meod/protocol/openid-connect/token' \
 -H 'Content-Type: application/x-www-form-urlencoded' \
 --data 'client_id=meod-controlplane-prod' \
 --data 'grant_type=password' \
 --data 'scope=openid' \
 --data 'username={email}' \
 --data 'password={password}' | jq -r '.access_token' )

MFA-enabled authentication:

export YOUR_API_KEY=$( curl -Ss -L -X POST 'https://auth.controlplane.prod.eliatra.cloud/realms/meod/protocol/openid-connect/token' \
 -H 'Content-Type: application/x-www-form-urlencoded' \
 --data 'client_id=meod-controlplane-prod' \
 --data 'grant_type=password' \
 --data 'otp=862257' \
 --data 'scope=openid' \
 --data 'username={email}' \
 --data 'password={password}' | jq -r '.access_token' )

Use the token in API requests:

-H "Authorization: Bearer $YOUR_API_KEY"

Clusters

List All Clusters

Retrieve information about all clusters linked to your account.

Example request:

curl -X GET "https://api.controlplane.prod.eliatra.cloud/v1/clusters" \
  -H "Authorization: Bearer $YOUR_API_KEY"

Example Response:

{
"clusters": [
  {
  "IUUID": "1b7af28e-afb2-4174-b622-490a0017edf8",
  "status": "string",
  "clusterSpec": {
    "name": "string",
    "flavor": "eod",
    "openSearchVersion": "2.11.1-ee2",
    "customSettings": { },
    "nodepools": [
      {
      "name": "string",
      "nodes": 3,
      "roles": "default",
      "zone": "ZONE_1",
      "nodeResources": { }
      }
    ],
    "dashboard": { }
    },
    "clusterInfo": {
      "url": "http://example.com",
      "dashboardUrl": "http://example.com",
      "health": "string",
      "adminUserName": "string",
      "initialAdminUserPassword": "string",
      "adminCert": "string",
      "adminCertKey": "string",
      "createdAt": "2019-08-24T14:15:22Z"
    }
  }
  ]
}

Create a cluster

Create a new OpenSearch cluster with customized settings.

Example request:

curl -X POST "https://api.controlplane.prod.eliatra.cloud/v1/clusters" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "flavor": "eod",
    "openSearchVersion": "2.11.1-ee2",
    "customSettings": { },
    "nodepools": [
      {
      "name": "string",
      "nodes": 3,
      "roles": "default",
      "zone": "ZONE_1",
      "nodeResources": { }
      }
    ],
    "dashboard": { }
}'

Example Response:

{
  "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"
}

Get cluster

Retrieve details for a specific OpenSearch cluster.

Example request:

curl -X GET "https://api.controlplane.prod.eliatra.cloud/v1/clusters/{clusterIUUID}" \
  -H "Authorization: Bearer $YOUR_API_KEY"

Example Response:

{
  "IUUID": "1b7af28e-afb2-4174-b622-490a0017edf8",
  "status": "string",
  "clusterSpec": {
    "name": "string",
    "flavor": "eod",
    "openSearchVersion": "2.11.1-ee2",
    "customSettings": { },
    "nodepools": [],
    "dashboard": { }
  },
  "clusterInfo": {
    "url": "http://example.com",
    "dashboardUrl": "http://example.com",
    "health": "string",
    "adminUserName": "string",
    "initialAdminUserPassword": "string",
    "adminCert": "string",
    "adminCertKey": "string",
    "createdAt": "2019-08-24T14:15:22Z"
  }
}

Update number of nodes

Modify the number of nodes in an existing node pool.

Example request:

curl -X PUT "https://api.controlplane.prod.eliatra.cloud/v1/clusters/{clusterIUUID}" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "flavor": "eod",
    "openSearchVersion": "2.11.1-ee2",
    "customSettings": { },
    "nodepools": [
      {
      "name": "string",
      "nodes": 5,
      "roles": "default",
      "zone": "ZONE_1",
      "nodeResources": { }
      }
    ],
    "dashboard": { }
}'

Note: Currently the only supported update is the number of nodes in the node pool. In order to update resources assigned to the nodes, it is recommended to create a new node pool and delete the old.

Example Response:

{
  "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"
}

Delete cluster

Remove an existing cluster using its ID.

Example request:

curl -X DELETE "https://api.controlplane.prod.eliatra.cloud/v1/clusters/{clusterIUUID}" \
  -H "Authorization: Bearer $YOUR_API_KEY"

Accounts

Retrieve Account Details

Fetch account information, including quota limits and usage statistics.

Example request:

curl -X GET "https://api.controlplane.prod.eliatra.cloud/v1/accounts" \
  -H "Authorization: Bearer $YOUR_API_KEY"

Example Response:

{
  "IUUID": "1b7af28e-afb2-4174-b622-490a0017edf8",
  "status": "string",
  "companyName": "string",
  "vatId": "string",
  "country": "string",
  "billingAddress": "string",
  "currentUser": {
    "fullName": "string",
    "email": "user@example.com"
  },
  "quotas": {
    "ramInGbUsage": 0,
    "cpuCoresUsage": 0,
    "storageInGbUsage": 0,
    "clusters": 0,
    "clustersUsage": 0,
    "ramInGb": 0,
    "ramInGbPerNode": 0,
    "cpuCores": 0,
    "cpuCoresPerNode": 0,
    "storageInGb": 0,
    "storageInGbPerVolume": 0
  }
}

Modify Account Information

Update billing details or VAT information.

Example request:

curl -X PUT "https://api.controlplane.prod.eliatra.cloud/v1/accounts" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "vatId": "string",
  "country": "string",
  "billingAddress": "string"
}'

Example Response:

{
  "status": "VALIDATION_ERROR",
  "code": 400,
  "timestamp": "2024-02-20T15:33:14.988531Z",
  "errors": [
    {
      "message": "Provided value is out of range '^[a-zA-Z]+$'",
      "field": "dashboard.cpuCores"
    }
  ]
}

Asynchronous Account Creation

Initiate the creation of a new account asynchronously. The resource ID is returned in the Location header.

Example request:

curl -X POST "https://api.controlplane.prod.eliatra.cloud/v1/accounts" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "vatId": "string",
  "country": "string",
  "billingAddress": "string",
  "adminUser": {
    "fullName": "string",
    "email": "user@example.com"
  }
}'

Example Response:

{
  "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"
}

Retrieve Supported EOD and OpenSearch Versions

Fetch a list of all supported EOD and OpenSearch versions.

Example request:

curl -X POST "https://api.controlplane.prod.eliatra.cloud/v1/versions" \
  -H "Authorization: Bearer $YOUR_API_KEY"

Example Response:

[
  {
    "flavor": "eod",
    "version": "2.11.1-ee1",
    "status": "supported",
    "latest": true
  }
]

Resources

Check Resource Availability

Verify the availability of the requested resources.

Example request:

curl -X POST "https://api.controlplane.prod.eliatra.cloud/v1/resources" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dashboard": {
    "cpuCores": 0,
    "ramInGb": 0,
    "replicas": 0
  },
  "nodepools": [
    {
      "nodes": 0,
      "nodeResources": {
        "ramInGb": 0,
        "cpuCores": 0,
        "storageInGb": 0
      }
    }
  ]
}'

Example Response:

{
  "requested": {
    "ramInGb": 0,
    "cpuCores": 0,
    "storageInGb": 0,
    "clusters": 0
  },
  "used": {
    "ramInGb": 0,
    "cpuCores": 0,
    "storageInGb": 0,
    "clusters": 0
  },
  "available": {
    "ramInGb": 0,
    "cpuCores": 0,
    "storageInGb": 0,
    "clusters": 0
  },
  "remaining": {
    "ramInGb": 0,
    "cpuCores": 0,
    "storageInGb": 0,
    "clusters": 0
  },
  "result": "rejected"
}

Limitations

Account quotas

When an account is created, the following default quotas are assigned:

  • Number of CPUs: 10
  • Maximum Memory Usage: 24GB
  • Maximum Storage Size: 400GB
  • Maximum Number of Running Clusters: 5
  • Maximum Number of Node Pools per Cluster: 10

If you need to increase these quotas, please contact Support

Cluster Updates

Currently, updating the resources of existing node pools within a cluster is not supported. To modify these resources, create new node pools with the desired configuration and delete the existing ones.

Changing OS/EOD Flavors

Once a cluster is created with either OpenSearch or EOD, it is not possible to switch between these flavors.