OpenSearch כחלופה ל-Elasticsearch: הגירה והתקנה

מחפשים חלופה אמינה ל-Elasticsearch ללא עלויות רישוי? אנחנו עוזרים לחברות לבצע מעבר ל-OpenSearch — פתרון קוד פתוח תואם לחלוטין עם אבטחה מובנית. הצוות שלנו מספק מעבר מפתח: מבדיקת נתונים והעברתם ועד להגדרת cluster ותמיכה שוטפת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

OpenSearch כחלופה ל-Elasticsearch: העברה והתקנה

אשכול ה-Elasticsearch שלך פועל תחת רישיון SSPL, ואתה מחפש חלופה חסכונית מבלי לוותר על פונקציונליות. לאחר ש-Elasticsearch עברה לרישיון SSPL, AWS פיצלה את הגרסה האחרונה בקוד פתוח (7.10) ויצרה את OpenSearch תחת רישיון Apache 2.0. היא שומרת על תאימות API מלאה אך מוסיפה אבטחה מובנית: TLS, RBAC, ביקורת (audit) — הכל בחינם, ללא צורך ברכישת X-Pack. עבור סביבת production, מדובר בתחליף ישיר שיכול לחסוך עד 70% מעלויות הרישוי.

פרסנו עשרות אשכולות OpenSearch עבור לקוחות, מחברות סטארטאפ ועד ארגונים גדולים. בפרויקט אחד, העברנו 2 TB של לוגים מ-Elasticsearch 6.8 ל-OpenSearch 2.12 בארבעה ימים. ה-reindex העיקרי ארך שעתיים; שאר הזמן הוקדש לבדיקות ולכיוונון ISM. לפי תיעוד OpenSearch, ISM תואם לחלוטין ל-ILM של Elasticsearch.

כיצד ISM מנהל את מחזור חיי האינדקס

ISM (Index State Management) הוא המקבילה ל-ILM ב-Elasticsearch. מדיניות מנהלת את מחזור החיים: hot → warm → delete. הנה דוגמה לאינדקסי לוגים:

PUT _plugins/_ism/policies/logs-policy
{
  "policy": {
    "description": "Log retention policy",
    "default_state": "hot",
    "states": [
      {
        "name": "hot",
        "actions": [
          {
            "rollover": {
              "min_index_age": "1d",
              "min_primary_shard_size": "50gb"
            }
          }
        ],
        "transitions": [
          {
            "state_name": "warm",
            "conditions": {
              "min_index_age": "7d"
            }
          }
        ]
      },
      {
        "name": "warm",
        "actions": [
          {
            "force_merge": {
              "max_num_segments": 1
            }
          },
          {
            "replica_count": {
              "number_of_replicas": 0
            }
          }
        ],
        "transitions": [
          {
            "state_name": "delete",
            "conditions": {
              "min_index_age": "30d"
            }
          }
        ]
      },
      {
        "name": "delete",
        "actions": [
          {
            "delete": {}
          }
        ],
        "transitions": []
      }
    ],
    "ism_template": [
      {
        "index_patterns": ["logs-*"],
        "priority": 100
      }
    ]
  }
}

המדיניות מבצעת rollover אוטומטי לאינדקסים כאשר ה-shard הראשי עולה על 50 GB או שהגיל עולה על יום אחד. לאחר שבעה ימים, היא מבצעת force-merge לסגמנט אחד ומסירה רפליקות. לאחר 30 יום, האינדקס נמחק.

פריסה באמצעות Docker Compose

---
# docker-compose.yml
version: '3'
services:
  opensearch-node1:
    image: opensearchproject/opensearch:2.12.0
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data1:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600
  opensearch-node2:
    image: opensearchproject/opensearch:2.12.0
    container_name: opensearch-node2
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node2
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data2:/usr/share/opensearch/data
  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:2.12.0
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    environment:
      OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]'
volumes:
  opensearch-data1:
  opensearch-data2:

קובץ ה-compose הזה מעלה שני צמתים עם מיפוי פורטים עבור 9200 ו-5601. חשוב: הגדר את הסיסמה באמצעות משתנה סביבה וכלול memlock ב-ulimits ליציבות.

תכונות אבטחה מובנות

בניגוד ל-Elasticsearch בקוד פתוח (ללא X-Pack), OpenSearch כוללת את תוסף האבטחה (Security) בחינם: TLS, RBAC, תיעוד ביקורת (audit logging), אינטגרציה עם LDAP/SAML. הנה דוגמה להגדרת תפקיד (role):

---
# roles.yml
log_reader:
  cluster_permissions:
    - 'cluster:monitor/health'
  index_permissions:
    - index_patterns:
        - 'logs-*'
      allowed_actions:
        - 'read'
        - 'indices:monitor/stats'
---

לסביבת production, תמיד הפעל TLS, הגדר RBAC עבור חשבונות שירות, והפעל ביקורת (auditing).

דוגמה להגדרת ביקורת הפעל ביקורת ב-`opensearch.yml`: `plugins.security.audit.type: internal_opensearch`. זה כותב את כל האירועים לאינדקס ייעודי.

כיצד אנו מעבירים מ-Elasticsearch ל-OpenSearch

ההעברה מורכבת משלושה שלבים:

  1. ביקורת (Audit) – השוואת גרסאות ותוספים, בדיקת תאימות תוספים מותאמים אישית.
  2. העברת נתונים – שימוש ב-PUT _plugins/_ism/policies/logs-policy { "policy": { "description": "Log retention policy", "default_state": "hot", "states": [ { "name": "hot", "actions": [ { "rollover": { "min_index_age": "1d", "min_primary_shard_size": "50gb" } } ], "transitions": [ { "state_name": "warm", "conditions": { "min_index_age": "7d" } } ] }, { "name": "warm", "actions": [ { "force_merge": { "max_num_segments": 1 } }, { "replica_count": { "number_of_replicas": 0 } } ], "transitions": [ { "state_name": "delete", "conditions": { "min_index_age": "30d" } } ] }, { "name": "delete", "actions": [ { "delete": {} } ], "transitions": [] } ], "ism_template": [ { "index_patterns": ["logs-*"], "priority": 100 } ] } } או snapshot/restore.
  3. מעבר לקוחות – שינוי ה-endpoint בתצורות האפליקציה.

דוגמה ל-reindex בפייתון:

from opensearchpy import OpenSearch
client = OpenSearch(['http://old-elastic:9200'])
reindex_body = {
    "source": {"index": "old_index"},
    "dest": {"index": "new_index", "host": "http://new-opensearch:9200"}
}
client.reindex(body=reindex_body)

בפועל, העברת אינדקס של 1 TB אורכת 2–3 שעות בהתאם לרשת ולחומרה. צור קשר להערכה ראשונית של הפרויקט שלך – נתכנן את תוכנית ההעברה האופטימלית.

שלבי העברה מ-Elasticsearch ל-OpenSearch

שלב פעולה זמן אופייני
ביקורת בדיקת גרסאות, תוספים, אינדקסים יום אחד
פריסה התקנת אשכול OpenSearch + Dashboards יום אחד
העברת נתונים Snapshot/restore או reindex 2–3 שעות ל-TB
בדיקות אימות תאימות וביצועים 1–2 ימים
מעבר שינוי endpoints באפליקציות שעה אחת

העלות נקבעת לפי פרויקט בהתאם לנפח הנתונים ולמורכבות התשתית. קבל ייעוץ – נספק הערכה מדויקת.

השוואה: OpenSearch מול Elasticsearch

קריטריון OpenSearch Elasticsearch
רישיון Apache 2.0 SSPL (מסחרי)
אבטחה מובנית (TLS, RBAC, ביקורת) רק במנוי בתשלום
תאימות API מלאה עם Elasticsearch 7.10 קנייני
עלות חינם פונקציונליות חינמית מוגבלת
קהילה פעילה, בחסות AWS ענקית, אך מסחרית

OpenSearch היא זולה פי 2–3 בסביבת production בשל היעדר רישיונות אבטחה בתשלום. החיסכון ברישוי יכול להגיע ל-70% מעלויות התשתית. היציבות שווה – אנו מפעילים אשכולות עם זמינות של 99.99%.

מה כלול בעבודה שלנו

  • ביקורת תשתית Elasticsearch קיימת (גרסה, תוספים, עומס)
  • פריסת אשכול OpenSearch (3+ צמתים) עם ISM ואבטחה
  • העברת נתונים עם זמן השבתה מינימלי (snapshot → reindex)
  • הגדרת OpenSearch Dashboards וניטור (Prometheus + Grafana)
  • תיעוד (runbook, מדיניות, דיאגרמות רשת)
  • הדרכה לצוות שלך (2–3 מפגשים)
  • חודש תמיכה לאחר ההשקה

לוח זמנים: 3 עד 7 ימים עבור אשכול עד 10 צמתים. העלות נקבעת באופן אישי. בקש ביקורת על המערכת שלך – צור קשר.

למה להפקיד בידינו את ההעברה שלך?

אנחנו צוות של מהנדסי DevOps עם ניסיון של למעלה מעשור בסביבות production עם מערכות חיפוש. השלמנו למעלה מ-50 פרויקטי העברה מ-Elasticsearch ל-OpenSearch עבור בנקים, חברות מסחר אלקטרוני וחברות SaaS. כל האשכולות פועלים תחת עומסים של עד 100,000 שאילתות בשנייה.

אנו מבטיחים תאימות API מלאה, אפס אובדן נתונים, ותוכנית rollback שלב אחר שלב. קבל ייעוץ לפרויקט שלך – צור קשר.