45 Cross Cluster Replication

Cross Cluster Replication (CCR) in OpenSearch ermöglicht die automatische Synchronisation von Indizes zwischen verschiedenen Clustern. Stellen Sie sich das wie mehrere synchronisierte Kopien einer Bibliothek vor, bei der sich Änderungen an einem Standort automatisch in den anderen widerspiegeln. Diese Funktion ist entscheidend für Disaster Recovery, Datenverfügbarkeit in verschiedenen Regionen und das Erstellen von schreibgeschützten Kopien für Reporting oder Analysen.

45.1 Cross Cluster Replication verstehen

Bevor wir in die Implementierung einsteigen, sollten wir verstehen, wie CCR unter der Haube funktioniert. Wenn Sie die Replikation einrichten, etabliert OpenSearch eine kontinuierliche Verbindung zwischen den Clustern, wobei ein Cluster als Leader (früher “Master” genannt) und andere als Follower agieren. Der Prozess ähnelt der Nachrichtenverbreitung: Der Hauptreporter (Leader) liefert Updates, und Korrespondenten (Follower) geben diese Informationen an ihr lokales Publikum weiter.

45.1.1 Der Replikationsprozess

Der Replikationsprozess umfasst mehrere Schritte:

  1. Initiale Einrichtung: Der Follower-Cluster verbindet sich mit dem Leader und fordert eine Kopie des Index an
  2. Bulk-Kopie: Der Leader sendet einen Snapshot des aktuellen Index-Zustands
  3. Kontinuierliche Synchronisation: Der Leader sendet laufende Änderungen
  4. Verifizierung: Der Follower bestätigt die erfolgreiche Replikation

Sehen wir uns die praktische Implementierung an.

45.2 Cross Cluster Replication einrichten

45.2.1 Cluster-Verbindungen konfigurieren

Zunächst müssen wir Vertrauen zwischen unseren Clustern aufbauen. Dies ist vergleichbar mit dem Aufbau sicherer diplomatischer Kanäle zwischen Ländern. Beginnen wir mit der Konfiguration der Cluster-Einstellungen:

PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "leader-cluster": {
          "seeds": [
            "leader-node-1:9300",
            "leader-node-2:9300"
          ],
          "transport.ping_schedule": "30s",
          "connection_timeout": "30s"
        }
      }
    }
  }
}

Diese Konfiguration etabliert eine sichere Verbindung zwischen den Clustern. Der ping_schedule stellt sicher, dass die Verbindung aktiv bleibt, ähnlich wie ein Herzschlag-Monitor.

45.2.2 Den Leader-Index vorbereiten

Bevor die Replikation beginnen kann, müssen wir unseren Leader-Index vorbereiten. Dies beinhaltet die korrekte Konfiguration für die Replikation:

PUT /sales-data
{
  "settings": {
    "index": {
      "number_of_shards": 5,
      "number_of_replicas": 1,
      "soft_deletes": {
        "enabled": true,
        "retention_lease.period": "12h"
      }
    }
  },
  "mappings": {
    "properties": {
      "sale_id": { "type": "keyword" },
      "timestamp": { "type": "date" },
      "amount": { "type": "double" },
      "customer_id": { "type": "keyword" }
    }
  }
}

Die soft_deletes-Einstellung ist besonders wichtig. Sie fungiert wie ein Änderungsprotokoll, das Followern hilft zu verstehen, welche Änderungen aufgetreten sind, selbst wenn Dokumente gelöscht wurden.

45.2.3 Follower-Index erstellen

Jetzt können wir unseren Follower-Index einrichten. Dieser Prozess teilt dem Follower-Cluster mit, wie er Daten vom Leader replizieren soll:

PUT /sales-data-replica/_ccr/follow
{
  "remote_cluster": "leader-cluster",
  "leader_index": "sales-data",
  "settings": {
    "index.number_of_replicas": 2
  },
  "parameters": {
    "max_read_request_operation_count": 5000,
    "max_outstanding_read_requests": 12,
    "max_read_request_size": "32mb",
    "max_write_request_operation_count": 5000,
    "max_write_request_size": "9mb",
    "max_outstanding_write_requests": 9,
    "max_write_buffer_count": 2147483647,
    "max_write_buffer_size": "512mb",
    "max_retry_delay": "500ms",
    "read_poll_timeout": "1m"
  }
}

Diese Parameter optimieren den Replikationsprozess. Betrachten Sie sie als Regeln dafür, wie der Follower Updates vom Leader anfordern und verarbeiten soll.

45.3 Replikation überwachen und verwalten

45.3.1 Replikationsstatus prüfen

Es ist wichtig, den Zustand Ihrer Replikation zu überwachen. Sie können den Status wie folgt prüfen:

GET /sales-data-replica/_ccr/stats

Die Antwort liefert detaillierte Informationen über den Replikationsprozess:

{
  "indices": [
    {
      "index": "sales-data-replica",
      "leader_index": "sales-data",
      "leader_global_checkpoint": 1000,
      "follower_global_checkpoint": 999,
      "last_requested_seq_no": 1000,
      "outstanding_read_requests": 1,
      "outstanding_write_requests": 0,
      "write_buffer_operation_count": 0,
      "follower_mapping_version": 1,
      "total_read_time_millis": 100000,
      "total_read_remote_exec_time_millis": 50000,
      "successful_read_requests": 100,
      "failed_read_requests": 0,
      "operations_read": 1000,
      "bytes_read": 1048576,
      "total_write_time_millis": 100000,
      "successful_write_requests": 100,
      "failed_write_requests": 0,
      "operations_written": 1000,
      "read_exceptions": [],
      "time_since_last_read_millis": 100
    }
  ]
}

45.3.2 Replikationsverzögerung behandeln

Manchmal können Follower hinter dem Leader zurückfallen. Wir können diese Verzögerung überwachen und verwalten:

PUT /sales-data-replica/_ccr/pause

PUT /sales-data-replica/_ccr/resume

Diese Befehle ermöglichen es Ihnen, die Replikation bei Bedarf vorübergehend zu pausieren, etwa während einer Wartung oder bei der Fehlersuche.

45.4 Fortgeschrittene Replikationsszenarien

45.4.1 Multi-Region-Deployments

Für globale Anwendungen möchten Sie möglicherweise Daten über mehrere Regionen hinweg replizieren. Hier ist ein Beispiel für eine Replikationskette:

# Region 1 (Leader)
PUT /sales-data
{
  "settings": {
    "index": {
      "number_of_shards": 5,
      "soft_deletes.enabled": true
    }
  }
}

# Region 2 (Follower und Leader)
PUT /sales-data-region2/_ccr/follow
{
  "remote_cluster": "region1",
  "leader_index": "sales-data",
  "settings": {
    "index": {
      "number_of_replicas": 1,
      "soft_deletes.enabled": true
    }
  }
}

# Region 3 (Follower)
PUT /sales-data-region3/_ccr/follow
{
  "remote_cluster": "region2",
  "leader_index": "sales-data-region2"
}

45.4.2 Auto-Follow-Muster

Für Szenarien, in denen Sie neue Indizes, die bestimmten Mustern entsprechen, automatisch replizieren möchten:

PUT /_ccr/auto_follow/logs_pattern
{
  "remote_cluster": "leader-cluster",
  "leader_index_patterns": ["logs-*"],
  "follow_index_pattern": "{{leader_index}}-replica",
  "settings": {
    "index.number_of_replicas": 1
  },
  "parameters": {
    "max_read_request_operation_count": 5000,
    "max_outstanding_read_requests": 12
  }
}

Diese Konfiguration erstellt automatisch Follower-Indizes für alle neuen Log-Indizes, die im Leader-Cluster erstellt werden.

45.5 Disaster Recovery Strategien

45.5.1 Failover-Szenarien testen

Es ist wichtig, Ihre Disaster Recovery-Prozeduren regelmäßig zu testen. Hier ist ein Prozess für Failover-Tests:

# Schritt 1: Replikation pausieren
PUT /sales-data-replica/_ccr/pause

# Schritt 2: Alle Änderungen verifizieren
GET /sales-data-replica/_ccr/stats

# Schritt 3: Follower zum Leader befördern
POST /sales-data-replica/_ccr/unfollow

# Schritt 4: Schreibzugriff auf dem ehemaligen Follower aktivieren
PUT /sales-data-replica/_settings
{
  "index.blocks.write": null
}

45.5.2 Automatisches Failover implementieren

Für automatisches Failover können Sie die Monitoring-Funktionen von OpenSearch zusammen mit benutzerdefinierten Skripten verwenden:

PUT _plugins/_alerting/monitors/replication_monitor
{
  "type": "monitor",
  "name": "CCR Health Monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "search": {
        "indices": [".ccr-stats*"],
        "query": {
          "bool": {
            "must": [
              {
                "range": {
                  "time_since_last_read_millis": {
                    "gte": 300000
                  }
                }
              }
            ]
          }
        }
      }
    }
  ],
  "triggers": [
    {
      "name": "Replikationsverzögerung-Alert",
      "severity": "High",
      "condition": {
        "script": {
          "source": "ctx.results[0].hits.total.value > 0"
        }
      },
      "actions": [
        {
          "name": "Operations-Team benachrichtigen",
          "destination_id": "ops_webhook",
          "message_template": {
            "source": "Replikationsverzögerung erkannt. Initiiere Failover-Prozeduren."
          }
        }
      ]
    }
  ]
}

45.6 Best Practices und Optimierung

Bei der Implementierung von CCR sollten Sie diese wichtigen Praktiken beachten:

Index-Design: Stellen Sie sicher, dass Ihre Indizes für die Replikation ausgelegt sind. Dies umfasst geeignete Sharding-Strategien und Mapping-Konfigurationen, die clusterübergreifend gut funktionieren.

Netzwerk-Konfiguration: Achten Sie besonders auf die Netzwerkeinstellungen zwischen den Clustern. Konfigurieren Sie angemessene Timeouts und Retry-Einstellungen basierend auf Ihren Netzwerkeigenschaften.

Monitoring-Strategie: Implementieren Sie ein umfassendes Monitoring, das sowohl den Replikationsprozess selbst als auch die Auswirkungen auf Ihre Cluster abdeckt.

Ressourcenplanung: Berücksichtigen Sie die zusätzlichen Ressourcenanforderungen der Replikation, einschließlich Netzwerkbandbreite, Speicherplatz und Verarbeitungsleistung.