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.
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 |
MEOD is managed through the Eliatra Controlplane UI - a centralized platform for configuring and monitoring your OpenSearch clusters.
To begin:
Note: Some features (Expert mode, Support level, Automatic Backup/Updates) are currently in Early Access and will be available in future releases.
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.
Once your cluster shows “Ready”:
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:
Note: Some features (Expert mode, Support level, Automatic Backup/Updates) are currently in Early Access and will be available in future releases.
Important: For high availability, maintain at least 2 nodes per pool in each zone.
Each MEOD cluster node operates on a dedicated Kubernetes node to ensure optimal performance and resource isolation. For example:
Expert mode enables advanced cluster customization but requires careful handling:
Warning: Use Expert mode with caution as improper settings can affect cluster performance or cause outages.
The Resources panel, accessible via Cockpit and during cluster creation, provides resource allocation visibility:
Resource Categories:
Use this panel to track and manage your cluster’s resource utilization effectively.
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.
View your current pricing summary in the “Cluster Resources” panel:
During cluster creation, the pricing panel displays two key figures per interval (Min/Hour/Month):
To update your MEOD password:
Enhance your account security by enabling 2FA:
The 2FA configuration page allows you to select your authentication method:
We strongly recommend enabling 2FA for enhanced account security.
Each Node Pool requires specific configuration parameters:
Roles can be assigned using predefined templates or custom configurations:
cluster_manager
coordinating
data
ingest
ml
remote_cluster_client
search
Resource allocation is configured per node pool, with all nodes in a pool sharing identical specifications. Consider role requirements when allocating resources:
For Expert mode clusters, access advanced OpenSearch APIs using admin certificates:
https://admin-api.[Cluster_ID].eliatra.cloud:8443
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
Access control is managed through standard OpenSearch Access Control API. Admin users have full access to security configurations.
Via OpenSearch Dashboard:
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."}
Both opensearch.yml
and opensearch_dashboards.yml
can be customized through UI or API when Expert mode is enabled.
opensearch.yml
opensearch_dashboards.yml
Example YAML configuration:
# Thread pools and queues
thread_pool.write.size: 2
thread_pool.write.queue_size: 1000
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"
}
}
}'
For complete API documentation, refer to:
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"
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 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"
}
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"
}
}
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"
}
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"
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
}
}
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"
}
]
}
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"
}
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
}
]
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"
}
When an account is created, the following default quotas are assigned:
If you need to increase these quotas, please contact Support
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.
Once a cluster is created with either OpenSearch or EOD, it is not possible to switch between these flavors.