11 Oktober 2024

Migration von Redis zu Valkey: Ein Leitfaden für die Zukunft von In-Memory-Schlüssel-Wert-Datenbanken

Einführung

Redis ist eine weit verbreitete In-Memory-Schlüssel-Wert-Hochleistungsdatenbank, die auch als Cache und Message Broker verwendet werden kann. Aufgrund ihrer Leistung und Vielseitigkeit ist sie für viele die erste Wahl. Viele Cloud-Anbieter bieten Redis-basierte Lösungen an:

  • Amazon Web Services (AWS) – Amazon ElastiCache für Redis
  • Microsoft Azure – Azure Cache für Redis
  • Google Cloud Platform (GCP) – Google Cloud Memorystore für Redis

Aufgrund jüngster Änderungen im Lizenzmodell von Redis ändern sich jedoch dessen Bedeutung und Nutzung. Redis wurde ursprünglich unter der open source BSD-Lizenz entwickelt, die es Entwicklern ermöglichte, den Quellcode sowohl für kommerzielle als auch für nicht-kommerzielle Zwecke frei zu nutzen, zu modifizieren und zu verbreiten. Infolgedessen gewann Redis schnell an Popularität in der Entwicklergemeinschaft.

Redis hat jedoch kürzlich auf eine duale Source-Available-Lizenz umgestellt. Genauer gesagt wird es zukünftig unter RSALv2 (Redis Source Available License Version 2) oder SSPLv1 (Server Side Public License Version 1) verfügbar sein, wobei die kommerzielle Nutzung individuelle Vereinbarungen erfordert, was potenziell die Kosten für Cloud-Dienstanbieter erhöht. Eine detaillierte Übersicht dieser Änderungen finden Sie auf der Lizenzierungsseite von Redis. Basierend auf der Redis Community Edition bleibt der Quellcode für Entwickler, Kunden und Partner des Unternehmens frei verfügbar. Cloud-Dienstanbieter und andere, die Redis als Teil kommerzieller Angebote nutzen möchten, müssen jedoch individuelle Vereinbarungen mit dem Anbieter treffen.

Aufgrund dieser jüngsten Änderungen im Lizenzmodell von Redis überdenken viele Entwickler und Organisationen ihre Wahl der In-Memory-Schlüssel-Wert-Datenbanken. Valkey, ein open source Fork von Redis, behält die hohe Leistung und Vielseitigkeit bei und gewährleistet gleichzeitig eine uneingeschränkte Nutzung für Entwickler und kommerzielle Unternehmen. Die Linux Foundation hat das Projekt geforkt, und Mitwirkende unterstützen nun das Valkey-Projekt. Weitere Informationen finden Sie hier und hier. Sein Engagement für open source Prinzipien hat die Unterstützung großer Cloud-Anbieter, einschließlich AWS, gewonnen. Amazon Web Services (AWS) kündigte an: „AWS ist bestrebt, open source Valkey langfristig zu unterstützen“, weitere Informationen finden Sie hier. Es könnte also der richtige Zeitpunkt sein, die Infrastruktur von Redis auf Valkey umzustellen.

In diesem Artikel werden wir eine Valkey-Instanz mit TLS einrichten und die Schritte zur nahtlosen Migration Ihrer Daten von Redis skizzieren.

Übersicht über mögliche Migrationsansätze

Im Allgemeinen gibt es mehrere Migrationsansätze:

  1. Wiederverwendung der Datenbankdatei
    Bei diesem Ansatz wird Redis heruntergefahren, um die RDB-Datei auf der Festplatte zu aktualisieren, und Valkey wird diese Datei in seinem Datenverzeichnis verwenden.
  2. Verwenden Sie REPLICAOF, um Valkey mit der Redis-Instanz zu verbinden
    Registrieren Sie die neue Valkey-Instanz als Replikat eines Redis-Masters, um die Daten zu streamen. Die Valkey-Instanz und ihr Netzwerk müssen den Redis-Dienst erreichen können.
  3. Automatisierte Datenmigration zu Valkey
    Die Skripting der Migration kann auf einem Rechner verwendet werden, der sowohl die Redis- als auch die Valkey-Datenbanken erreichen kann.

In diesem Blogartikel stellen wir fest, dass der direkte Zugriff auf das Dateisystem des Redis-Servers in der Cloud nicht praktikabel ist, um die Datenbankdatei wiederzuverwenden, und dass der Valkey-Dienst und der Redis-Dienst sich in verschiedenen Netzwerken befinden und sich nicht gegenseitig erreichen können, um ein Replikat einzurichten. Daher wählen wir die dritte Option und führen ein automatisiertes Datenmigrationsskript auf einem anderen Rechner aus, der sich mit beiden Servern verbinden und die Daten übertragen kann.

Einrichtung von Valkey

Falls Sie einen Cloud-Dienst nutzen, konsultieren Sie bitte deren Anweisungen zur Einrichtung einer Valkey-Instanz. Da es sich um ein neues Projekt handelt, gibt es nur wenige Distributionen, die gebrauchsfertige Pakete wie Red Hat Enterprise Linux 8 und 9 über Extra Packages for Enterprise Linux (EPEL) bereitstellen. In diesem Blogbeitrag verwenden wir einen lokalen Debian 12 Server, um den Valkey-Server in Version 7.2.6 mit TLS zu hosten. Bitte konsultieren Sie die Anleitungen Ihrer Distribution zur Installation von Valkey oder verwenden Sie das auf GitHub bereitgestellte Handbuch. Die Migration selbst wird mit einem Python 3-Skript unter Verwendung von TLS durchgeführt.

Starten Sie den Server und stellen Sie eine Client-Verbindung her:

In diesem Blogartikel werden wir einen Server mit den aufgeführten TLS-Parametern verwenden. Wir geben alle verwendeten TLS-Parameter an, einschließlich port 0, um den Nicht-TLS-Port vollständig zu deaktivieren:

$ valkey-server --tls-port 6379 --port 0 --tls-cert-file ./tls/redis.crt --tls-key-file ./tls/redis.key --tls-ca-cert-file ./tls/ca.crt

 .+^+.  
  .+#########+.  
  .+########+########+. Valkey 7.2.6 (579cca5f/0) 64 bit
 .+########+' '+########+.  
 .########+' .+. '+########. Läuft im Standalone-Modus
 |####+' .+#######+. '+####| Port: 6379
 |###| .+###############+. |###| PID: 436767  
 |###| |#####*'' ''*#####| |###|  
 |###| |####' .-. '####| |###|  
 |###| |###( (@@@) )###| |###| https://valkey.io  
 |###| |####. '-' .####| |###|  
 |###| |#####*. .*#####| |###|   
 |###| '+#####| |#####+' |###|  
 |####+. +##| |#+' .+####|  
 '#######+ |##| .+########'  
 '+###| |##| .+########+'  
 '| |####+########+'  
 +#########+'  
 '+v+'  

436767:M 27. Aug. 2024 16:08:56.058 * Server initialisiert
436767:M 27. Aug. 2024 16:08:56.058 * Lade RDB, erstellt von Valkey Version 7.2.6
[...]
436767:M 27. Aug. 2024 16:08:56.058 * Bereit, TLS-Verbindungen anzunehmen

Nun ist es Zeit, die Verbindung mit einem Client über TLS zu testen:

$ valkey-cli --tls --cert ./tls/redis.crt --key ./tls/redis.key --cacert ./tls/ca.crt -p 6379

127.0.0.1:6379> INFO SERVER
# server
server_name:valkey
valkey_version:7.2.6
[...]

Automatisierte Datenmigration zu Valkey

Schließlich migrieren wir die Daten in diesem Beispiel mithilfe eines Python 3-Skripts. Dieses Python-Skript stellt Verbindungen zu den Redis-Quell- und Valkey-Zieldatenbanken her, ruft alle Schlüssel aus der Redis-Datenbank ab und erstellt oder aktualisiert jedes Schlüssel-Wert-Paar in der Valkey-Datenbank. Dieser Ansatz ist nicht standardmäßig verfügbar und verwendet die redis-py-Bibliothek, die eine Liste von Beispielen bereitstellt. Durch die Verwendung von Python 3 könnte der Prozess sogar erweitert werden, um unerwünschte Daten zu filtern, Werte an die neue Umgebung anzupassen oder Plausibilitätsprüfungen hinzuzufügen. Das hier verwendete Skript liefert Fortschrittsaktualisierungen während des Migrationsprozesses:

#!/usr/bin/env python3

import redis

# Verbindung zur Redis-Quelldatenbank herstellen, die passwortgeschützt ist, über IP und Port
redis_client = redis.StrictRedis(host='172.17.0.3', port=6379, password='secret', db=0)

# Verbindung zur Valkey-Zieldatenbank herstellen, die TLS verwendet
ssl_certfile="./tls/client.crt"
ssl_keyfile="./tls/client.key"
ssl_ca_certs="./tls/ca.crt"
valkey_client = redis.Redis(
  host="192.168.0.3",
  port=6379,
  ssl=True,
  ssl_certfile=ssl_certfile,
  ssl_keyfile=ssl_keyfile,
  ssl_cert_reqs="required",
  ssl_ca_certs=ssl_ca_certs,
)

# Alle Schlüssel aus der Redis-Datenbank abrufen
keys = redis_client.keys('*')
print("Gefunden", len(keys), "Schlüssel in der Quelle!")

# Jedes Schlüssel-Wert-Paar in die Valkey-Datenbank migrieren
for counter, key in enumerate(keys):
  value = redis_client.get(key)
  valkey_client.set(key, value)
  print("Status: ", round((counter+1) / len(keys) * 100, 1), " %", end='
')
print()

Um den Prozess zu starten, führen Sie das Skript aus:

$ python3 redis_to_tls_valkey.py
569383 Schlüssel in der Quelle gefunden!
Status: 100,0 %

Als letzten Schritt konfigurieren Sie Ihre Anwendung so, dass sie sich mit dem neuen Valkey-Server verbindet.

Fazit

Seit der Lizenzänderung von Redis gewinnt das neue Projekt Valkey immer mehr an Attraktivität. Die Migration zu Valkey gewährleistet weiterhin den Zugriff auf eine robuste open source In-Memory-Datenbank ohne die Lizenzbeschränkungen von Redis. Ob Sie Ihre Infrastruktur lokal oder in der Cloud betreiben, dieser Leitfaden bietet die notwendigen Schritte für eine erfolgreiche Migration. Die Migration von einer Cloud-Instanz in eine neue Umgebung kann umständlich sein, da kein direkter Dateizugriff oder isolierte Netzwerke vorhanden sind. Je nach diesen Umständen haben wir ein Python-Skript verwendet, das eine flexible Möglichkeit bietet, verschiedene Schritte zur Bewältigung der Aufgabe umzusetzen.

Wenn Sie diesen Leitfaden hilfreich finden und falls Sie Unterstützung bei der Migration Ihrer Datenbanken benötigen, kontaktieren Sie uns gerne. Wir unterstützen Sie gerne lokal oder in Cloud-Umgebungen.

Kategorien: HowTos
Tags: Redis Valkey

TK

über den Autor

Tobias Kauder


Beitrag teilen: