Note :

Migrer la grappe Redis vers Oracle Cloud Infrastructure Cache

Présentation

Ce tutoriel fournit un processus étape par étape pour la migration de la mémoire cache Redis Cluster partitionnée à l'aide de l'outil pyredis-dump. pyredis-dump est un outil basé sur Python conçu pour simplifier le dumping et la restauration des données Redis. La procédure s'applique à l'un des scénarios de migration suivants :

Bien que ce tutoriel se concentre principalement sur la migration d'une grappe Redis sur place vers OCI sans architecture maître-esclave, la même approche peut également être appliquée aux environnements qui utilisent une configuration maître-esclave Redis.

Qu'est-ce que Redis?

Qu'est-ce que Redis Cluster?

Redis Cluster offre une haute disponibilité et une mise à l'échelle horizontale. Il divise les données en partitions, réparties sur plusieurs noeuds. Chaque partition horizontale comporte un noeud principal et des répliques pour la tolérance aux pannes. Cela permet à Redis Cluster de gérer des jeux de données plus volumineux et un débit d'écriture plus élevé.

L'image suivante présente une grappe à 3 noeuds contenant 3 noeuds en tant que noeud principal (M1, M2 et M3), chaque noeud étant asservi en tant que (S1, S2 et S3). La configuration de l'esclave est facultative pour fournir une haute disponibilité.

Image

Redis Cluster n'utilise pas de hachage cohérent, mais une forme différente de partitionnement horizontal où chaque clé fait partie conceptuellement de ce que nous appelons un emplacement de hachage. Il y a 16384 emplacements de hachage dans Redis Cluster. Chaque noeud d'un cluster Redis est responsable d'un sous-ensemble des emplacements de hachage. Par exemple, vous pouvez avoir un cluster avec 3 noeuds, où :

À quoi sert le cache OCI?

Image

Objectifs

Préalables

Tâche 1 : Configurer la grappe Redis source dans une configuration sur place

  1. Configurez des hôtes sur place. Créez trois machines virtuelles ou hôtes physiques sur place à l'aide de RHEL8.

    • Redis_Node1: 10.0.0.151
    • Redis_Node2: 10.0.0.164
    • Redis_Node3: 10.0.0.205
  2. Ouvrez le port sur tous les noeuds.

    Chaque noeud Redis Cluster nécessite de 1 à 3 connexions TCP ouvertes en fonction de la configuration. Le port TCP Redis normal utilisé pour servir les clients, par exemple 6379, plus le port obtenu en ajoutant 10000 au port de données, donc 16379 pour cluster et 26379 pour Sentinel. Assurez-vous d'ouvrir tous les ports de votre pare-feu, sinon les noeuds de grappe Redis ne pourront pas communiquer. Exécutez les commandes suivantes.

    $firewall-cmd --permanent --add-port=6379/tcp  ( For master/slave replication and clint connection)
    $firewall-cmd --permanent --add-port=16379/tcp ( For Redis Cluster )
    $firewall-cmd --reload
    
  3. Installez le logiciel Redis sur tous les nœuds. Exécutez la commande suivante pour télécharger la dernière version de Redis Community Edition 7.4 pour RHEL8. Installez le logiciel Redis sur les trois noeuds à l'aide de l'utilisateur root.

    $mkdir /redis
    $wget http://download.redis.io/redis-stable.tar.gz
    $tar xvzf redis-stable.tar.gz
    $cd redis-stable
    $make redis-cli
    $make BUILD_TLS=yes
    $cp src/redis-cli /usr/local/bin/
    $cp redis-server /usr/local/bin/
    $redis-cli -v
    
  4. Préparez le fichier de configuration Redis sur tous les noeuds.

    Il est recommandé de configurer un cluster Redis à trois noeuds avec au moins une réplique (esclave) par maître et Sentinel pour une haute disponibilité. Dans cet exemple, nous avons créé trois grappes de noeuds sans répliques. Pour configurer une grappe Redis, nous devons préparer le fichier de configuration de grappe nommé redis.conf sur les trois noeuds du dossier /redis.

    $cd /redis
    
    $vi redis.conf
    port 6379
    timeout 0
    protected-mode no
    tcp-keepalive 300
    pidfile "/redis/redis-server.pid"
    logfile "/redis/redis-server.log"
    requirepass "pass123"
    dbfilename "dump.rdb"
    appendonly no
    masterauth "pass123"
    cluster-enabled yes
    cluster-config-file /redis/nodes.conf
    cluster-node-timeout 5000
    
  5. Démarrez le serveur Redis sur tous les noeuds. Exécutez la commande suivante pour démarrer le serveur Redis sur les trois noeuds.

    [root@instance-20250224-0709 redis]# redis-server
    814355:C 16 Apr 2025 15:30:35.171 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    814355:C 16 Apr 2025 15:30:35.171 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    814355:C 16 Apr 2025 15:30:35.171 * Redis version=7.4.2, bits=64, commit=00000000, modified=0, pid=814355, just started
    814355:C 16 Apr 2025 15:30:35.171 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    814355:M 16 Apr 2025 15:30:35.171 * Increased maximum number of open files to 10032 (it was originally set to 1024).
    814355:M 16 Apr 2025 15:30:35.172 * monotonic clock: POSIX clock_gettime
                   _._
             _.-``__ ''-._
          _.-``    `.  `_.  ''-._           Redis Community Edition
    .-`` .-```.  ```\/    _.,_ ''-._     7.4.2 (00000000/0) 64 bit
    (    '      ,       .-`  | `,    )     Running in standalone mode
    |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
    |    `-._   `._    /     _.-'    |     PID: 814355
    `-._    `-._  `-./  _.-'    _.-'
    |`-._`-._    `-.__.-'    _.-'_.-'|
    |    `-._`-._        _.-'_.-'    |           https://redis.io
    `-._    `-._`-.__.-'_.-'    _.-'
    |`-._`-._    `-.__.-'    _.-'_.-'|
    |    `-._`-._        _.-'_.-'    |
    `-._    `-._`-.__.-'_.-'    _.-'
          `-._    `-.__.-'    _.-'
             `-._        _.-'
                `-.__.-'
    
    814355:M 16 Apr 2025 15:30:35.172 * Server initialized
    814355:M 16 Apr 2025 15:30:35.173 * Loading RDB produced by version 7.4.2
    814355:M 16 Apr 2025 15:30:35.173 * RDB age 9 seconds
    814355:M 16 Apr 2025 15:30:35.173 * RDB memory usage when created 2.18 Mb
    814355:M 16 Apr 2025 15:30:35.173 * Done loading RDB, keys loaded: 1, keys expired: 0.
    814355:M 16 Apr 2025 15:30:35.173 * DB loaded from disk: 0.000 seconds
    814355:M 16 Apr 2025 15:30:35.173 * Ready to accept connections tcp
    

    Démarre le serveur Redis à l'aide d'un fichier de configuration spécifique et l'exécute en arrière-plan.

    $redis-server /redis/redis.conf &
    
  6. Créer une grappe Redis. Pour créer une grappe Redis à partir des trois serveurs Redis démarrés ci-dessus, exécutez la commande suivante à partir de Node1.

    # redis-cli --cluster create 10.0.0.151:6379 10.0.0.164:6379 10.0.0.205:6379 -a pass123
    
    output:
    
    >>> Performing hash slots allocation on 3 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    
    M: a89cae61ea55xxxxxxxxxxx8ea31c70b0dc290 10.0.0.151:6379
       slots:[0-5460] (5461 slots) master
    M: b914e2031ceaxxxxxxxxxxxa6d7d5d67fa748 10.0.0.164:6379
       slots:[5461-10922] (5462 slots) master
    M: 9e71454df3f0cbexxxxxxxxxxx6ddc34177f7465 10.0.0.205:6379
       slots:[10923-16383] (5461 slots) master
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    

    Nous pouvons voir la clé de partition pour les noeuds :

    • Noeud-1 (10.0.0.151) 0-5460
    • Noeud-2 (10.0.0.164) 5461-10922
    • Node-3 (10.0.0.205) 10923-16383
  7. Connectez-vous à la grappe Redis à l'aide de l'utilitaire client Redis et validez les noeuds de la grappe.

    L'interface de ligne de commande Redis (également connue sous le nom de redis-cli) est un programme terminal qui envoie des commandes et lit les réponses du serveur Redis. Redis-cli est installé automatiquement dans le cadre de l'installation Redis.

    • Exécutez la commande $redis-cli -a pass123 -p 6379 -c pour vous connecter à l'hôte local.

    • Exécutez la commande $redis-cli -a pass123 -p 6379 -h 10.0.0.151 -c pour vous connecter à partir d'une connexion distante.

    127.0.0.1:6379> cluster nodes
    
    b914e2031cea8bxxxxxxxxxxxe9a6d7d5d67fa748 10.0.0.164:6379@16379 master - 0 1740409776706 2 connected 5461-10922
    a89cae61ea553420c7xxxxxxxxxxx8ea31c70b0dc290 10.0.0.151:6379@16379 myself,master - 0 1740409775000 1 connected 0-5460
    9e71454df3f0cbvxxxxxxxxxxx46ddc34177f7465 10.0.0.205:6379@16379 master - 0 1740409776000 3 connected 10923-16383
    
    127.0.0.1:6379>
    
  8. Effectuez l'opération LMD (Langage de manipulation de données) dans le cluster.

    Dans un environnement Redis Cluster, les données (opération de lecture/écriture) sont automatiquement redirigées vers le noeud approprié en fonction de l'emplacement de hachage dérivé de la clé de partition.

    $redis-cli -a pass123 -p 6379 -c
    
    127.0.0.1:6379> ping
    PONG
    
    127.0.0.1:6379> set name Dharmesh
    -> Redirected to slot [5798] located at 10.0.0.164:6379
    OK
    
    10.0.0.164:6379> set age 40
    -> Redirected to slot [741] located at 10.0.0.151:6379
    OK
    
    10.0.0.151:6379> set gender M
    -> Redirected to slot [15355] located at 10.0.0.205:6379
    OK
    
    127.0.0.1:6379> KEYS *
    1) "name"
    2) "age"
    3) "gender"
    >SAVE
    10.0.0.205:6379> exit
    

    Enregistrez pour assurer la persistance des données sur une grappe Redis sous /redis/dump.rdb. Vous pouvez utiliser des instantanés de base de données Redis (RDB) ou des fichiers AOF (Append-Only Files). RDB crée des instantanés de la base de données en mémoire à des intervalles spécifiés, tandis que AOF enregistre toutes les opérations d'écriture, ce qui permet la reconstruction de la base de données en cas de défaillance.

Tâche 2 : Configurer la grappe Redis cible dans le cache OCI

  1. Connectez-vous à la console OCI, naviguez jusqu'à Base de données, Mémoire cache OCI et cliquez sur Grappes.

    Image

  2. Sélectionnez le compartiment correspondant et cliquez sur Créer une grappe.

  3. Sélectionnez le nom de la grappe, la création dans le compartiment et la version du moteur de la mémoire cache OCI.

    Image

  4. Sélectionnez Mode de grappe, Nombre de partitions, Noeud par partition et Mémoire par noeud.

    Image

  5. Sélectionnez VCN et Sous-réseau.

    Image

  6. Vérifiez et cliquez sur Créer une grappe.

    Image

    Une fois le provisionnement des grappes OCI terminé, il doit ressembler à l'image suivante. Trois noeuds de grappe et un point d'extrémité privé sont visibles.

    Image

Tâche 3 : Créer une connexion à la grappe de mémoire cache OCI

La mémoire cache OCI est SaaS, il n'y aura pas d'accès direct à l'hôte Redis. Pour nous connecter au cache OCI, nous devons créer une instance de saut ou un hôte bastion OCI dans le sous-réseau public pour un accès sécurisé aux grappes dans le même VCN et le même sous-réseau.

Image

Provisionner l'hôte bastion/le saut dans OCI

  1. Allez à la console OCI, naviguez jusqu'à Identité et sécurité et cliquez sur Hôtes bastions.

  2. Sélectionnez un compartiment, un VCN, un sous-réseau, une liste d'autorisation de blocs CIDR et cliquez sur Créer un hôte bastion.

    Image

  3. Exécutez la commande suivante pour installer Redis sur l'hôte de saut.

    sudo su -
    mkdir /redis
    wget http://download.redis.io/redis-stable.tar.gz
    tar xvzf redis-stable.tar.gz
    cd redis-stable
    make redis-cli
    make BUILD_TLS=yes
    cp src/redis-cli /usr/local/bin/
    cp redis-server /usr/local/bin/
    $redis-cli -v
    
  4. Connectez-vous à l'un des noeuds du cluster à partir de l'hôte de saut et validez les noeuds.

    Connect Cluster Node1
    $redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbxxxxxxxxxxxo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c
    
    Connect Cluster Node2
    $redis-cli -h aaantxkdlyarjuuzfc5qgic3xxxxxxxxxxxxa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c
    
    Connect Cluster Node3
    $redis-cli -h aaantxkdlyarjuuzfc5qgic3xxxxxxxxxxxfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c
    
    
    Validate OCI cluster Nodes:
    
    > cluster nodes
    b89bf86956a0ce19e6b4xxxxxxxxxxxcd41d0b78dd 10.0.15.21:6379@16379,aaantxkdlyarjuuzfc5qgicxxxxxxxxxxxvo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com master - 0 1740462307292 2 connected 5462-10922
    ba2253bcdb56f2e5227xxxxxxxxxxx9672cb527eab 10.0.5.150:6379@16379,aaantxkdlyarjuuzfc5qgic3xdbxxxxxxxxxxxvo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com master - 0 1740462305276 0 connected 10923-16383
    b59af7d22e86c5600xxxxxxxxxxxe17bf34ca5aab 10.0.61.100:6379@16379,aaantxkdlyarjuuzfc5qgicxxxxxxxxxxxa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com myself,master - 0 1740462305000 1 connected 0-5461
    

    La clé de partition est disponible :

    • Grappe-1 (1-1) 0-5461
    • Grappe-2 (2-1) 5462-10922
    • Cluster-3 (3-1) 5462-10922

Tâche 4 : Migrer les données d'une grappe sur place vers une grappe OCI à l'aide de l'utilitaire Pyredis-dump

  1. Installez l'utilitaire pyredis-dump sur l'hôte de saut/bastion.

    $cd /redis/
    $yum install git
    $git clone https://github.com/tkote/pyredis-dump.git
    $cd /redis/pyredis-dump
    $python -m pip install redis
    $python3 pyredis-dump.py -h
    
  2. Vérifiez la connexion à la grappe Redis sur place à partir de l'hôte de saut/bastion.

    [root@jump ~]# redis-cli -a pass123 -p 6379 -h 10.0.0.151 -c
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    10.0.0.151:6379>
    
    [root@jump ~]# redis-cli -a pass123 -p 6379 -h 10.0.0.164 -c
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    10.0.0.164:6379>
    
    [root@jump ~]# redis-cli -a pass123 -p 6379 -h 10.0.0.205 -c
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    10.0.0.205:6379>
    
  3. Exporter le vidage à partir de la grappe source. Connectez-vous à chaque noeud principal Redis à partir d'un hôte de saut et créez un vidage distant. Le vidage sera créé sur l'hôte de saut à l'emplacement indiqué.

    1. Effectuez le vidage à partir du fichier maître Node1.

      # python3 pyredis-dump.py -H 10.0.0.151 dump -o /redis/dump/rdump1 -w pass123
      dumping to '/redis/dump/rdump1'
      connecting to {'db': 0, 'host': '10.0.0.151', 'port': 6379, 'ssl': None, 'password': 'pass123'}
      1 keys, bulk_size: 1000, watch_keys: False
      dumped 1 records
      elapsed time: 0.399 seconds
      
    2. Effectuez le vidage à partir du fichier maître Node2.

      # python3 pyredis-dump.py -H 10.0.0.164 dump -o /redis/dump/rdump2 -w pass123
      dumping to '/redis/dump/rdump2'
      connecting to {'db': 0, 'host': '10.0.0.164', 'port': 6379, 'ssl': None, 'password': 'pass123'}
      1 keys, bulk_size: 1000, watch_keys: False
      dumped 1 records
      elapsed time: 0.004 seconds
      
    3. Effectuez le vidage à partir du fichier maître Node3.

      # python3 pyredis-dump.py -H 10.0.0.205 dump -o /redis/dump/rdump3 -w pass123
      dumping to '/redis/dump/rdump3'
      connecting to {'db': 0, 'host': '10.0.0.205', 'port': 6379, 'ssl': None, 'password': 'pass123'}
      1 keys, bulk_size: 1000, watch_keys: False
      dumped 1 records
      elapsed time: 0.006 seconds
      
  4. Avant d'importer des données, nettoyez la grappe cible dans le cache OCI et assurez-vous qu'il n'y a aucune donnée dans l'un ou l'autre des noeuds de la grappe.

    OCI Cluster Node1
    
    # redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjxxxxxxxxxxxaj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com --tls
    > flushall
    OK
    
    OCI Cluster Node2
    
    # redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjxxxxxxxxxxxj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com --tls
    > flushall
    OK
    
    OCI Cluster Node3
    
    # redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjkxxxxxxxxxxx6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com --tls
    > flushall
    OK
    
  5. Importer le vidage dans la grappe cible dans la mémoire cache OCI. Connectez-vous à chaque grappe OCI et importez le vidage vers la grappe respective en fonction de la clé de partition de la source et de la cible. Le vidage d'exportation du fichier Node1 principal ayant shard key 0-5460 doit être importé dans le fichier node1 principal de la grappe cible, respectivement.

    Nous devons importer le vidage dans les étapes suivantes, sinon il échouera.

    1. Importer le vidage de Node1 vers OCI Cluster1-1.

      # python3 pyredis-dump.py -S -H aaantxkdlyarjuuzfxxxxxxxxxxxk5bfeaa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com restore -i /redis/dump/rdump1
      restore from '/redis/dump/rdump1'
      connecting to {'db': 0, 'host': 'aaantxkdlyarjuuzfcxxxxxxxxxxxkjk5bfeaa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com', 'port': 6379, 'ssl': True}
      restored 1 records
      elapsed time: 0.023 seconds
      
    2. Importer le vidage de Node2 vers OCI Cluster2-1.

      # python3 pyredis-dump.py -S -H aaantxkdlyarjuuzfc5xxxxxxxxxxxfeaa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com restore -i /redis/dump/rdump2
      restore from '/redis/dump/rdump2'
      connecting to {'db': 0, 'host': 'aaantxkdlyarjuuzfc5xxxxxxxxxxxk5bfeaa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com', 'port': 6379, 'ssl': True}
      restored 1 records
      elapsed time: 0.024 seconds
      
    3. Importer le vidage de Node3 vers OCI Cluster3-1.

      # python3 pyredis-dump.py -S -H aaantxkdlyarjuuzfc5qgixxxxxxxxxxxfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com restore -i /redis/dump/rdump3
      restore from '/redis/dump/rdump3'
      connecting to {'db': 0, 'host': 'aaantxkdlyarjuuzfc5xxxxxxxxxxx5bfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com', 'port': 6379, 'ssl': True}
      restored 1 records
      elapsed time: 0.030 seconds
      [root@instance-20250223-1032 pyredis-dump]#
      
  6. Valider les données dans OCI. Une fois les données importées sur chaque noeud de grappe, connectez-vous à n'importe quel noeud de grappe OCI et vérifiez les données.

    Connect Cluster Node1
    $redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjk5bfxxxxxxxxxxx65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c
    
    6379> get name
    -> Redirected to slot [5798] located at aaantxkdlyarjxxxxxxxxxxx3xdbckjk5bfeaa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com:6379
    "Dharmesh"
    
    6379> get age
    -> Redirected to slot [741] located at aaantxkdlyarjuuxxxxxxxxxxxbckjk5bfeaa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com:6379
    "40"
    
    6379> get gender
    -> Redirected to slot [15355] located at aaantxkdlyarjxxxxxxxxxxxxxdbckjk5bfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com:6379
    "M"
    
    6379>
    

Remerciements

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation sur le produit, visitez Oracle Help Center.