Configuration des répliques en lecture

Vous pouvez configurer votre déploiement IBM Cloud® Databases for MySQL pour qu'il soit une réplique en lecture d'un autre déploiement Databases for MySQL.

Un réplica en lecture est configuré pour répliquer toutes vos données de l'instance source vers le déploiement du réplica à l'aide d'une réplication asynchrone. Comme leur nom l'indique, les répliques en lecture prennent en charge les transactions en lecture et peuvent être utilisées pour équilibrer les bases de données dont les opérations sont à la fois lourdes en écriture et en lecture. Vous pouvez également utiliser la promotion de lecture réplique pour la récupération de données si l'instance de base de données source échoue. La réplique en lecture a un seul membre de données MySQL et elle est facturée aux mêmes taux de consommation par membre que l'instance de la base de données source.

Lire les considérations sur les répliques

  • Une réplique en lecture peut exister dans la même région que votre instance de base de données source ou dans une région différente, ce qui permet de répliquer vos données entre les régions.

  • Une réplique en lecture doit être de la même version majeure que son instance de base de données source.

  • Les sauvegardes sont désactivées sur les répliques en lecture. Les sauvegardes sont effectuées uniquement sur les instances de la base de données source.

  • La réplication en lecture n'est pas prise en charge dans ou en dehors des régions compatibles EU Cloud (actuellement, eu-de). Elle est prise en charge dans ces régions.

  • Il y a une limite de cinq répliques de lecture par instance source.

  • La réplique de lecture ne participe pas aux élections de l'instance de la base de données source et le basculement vers la réplique de lecture n'est pas automatisé. La promotion du réplica en lecture vers un déploiement complet est une tâche manuelle, initiée par l'utilisateur.

  • La taille minimale d'une réplique en lecture est de 2 Go de RAM et 20 Go de disque. Cela est vrai même si le déploiement de l'instance de la base de données source est plus petit.

  • Les répliques de lecture ne s'adaptent pas automatiquement à l'instance de la base de données source. Si la quantité de données stockées dépasse le disque alloué à vos déploiements, mettez le disque à l'échelle des répliques de lecture, puis de l'instance de la base de données source. La mise à l'échelle de la réplique de lecture en premier permet de ne pas manquer d'espace sur les répliques de lecture. Si vous avez dimensionné le disque de l'instance de la base de données source en fonction des performances et non de l'espace, il n'est pas nécessaire de dimensionner les répliques de lecture.

  • La réplication est asynchrone et peut générer un décalage. Par défaut, il n'y a aucune communication entre le maître et la réplique en matière de cohérence. Il est possible qu'une réplique de lecture prenne suffisamment de retard pour devoir être resynchronisée. Le délai de réplication peut être plus important lorsque la réplique se trouve dans une région géographiquement éloignée de l'instance de la base de données source.

  • Une réplique en lecture est un déploiement avec un seul membre de données et n'a pas de haute disponibilité interne. Elle est sujette à des interruptions temporaires et à des temps d'indisponibilité durant la maintenance. Si vos applications reposent sur des répliques de lecture, assurez-vous de disposer d'une logique permettant de réessayer les requêtes qui ont échoué ou d'équilibrer la charge sur plusieurs répliques de lecture.

Le maître

Dans l'onglet Répliques en lecture d' un déploiement Databases for MySQL, avant qu'aucune réplique en lecture ne soit provisionnée, le volet central indique qu'aucune réplique en lecture n'existe et propose un bouton Créer.

Volet de réplication avant une réplique*Volet de
avant une

Si un déploiement est un leader et qu'un réplica en lecture lui est déjà attaché, le volet Réplication contient une liste des déploiements de répliques et un lien vers chacun d'entre eux.

Liste des répliques attachées à un
des répliques attachées à un

Provisionnement d'un réplica en lecture

Vous pouvez fournir une réplique en lecture à partir de l'onglet Répliques en lecture du leader en cliquant sur Créer une réplique en lecture. L'instance source est automatiquement définie. Le nom du réplica de lecture est généré automatiquement dans le champ Nom du service, mais vous pouvez le renommer librement. Vous pouvez choisir la région dans laquelle effectuer le déploiement, ainsi que son allocation de mémoire initiale. La taille du disque, la version et les points d'extrémité publics ou privés sont automatiquement configurés pour correspondre aux paramètres du déploiement de l'instance de la base de données source.

Si vous utilisez Key Protect, le mode BYOK (Bring Your Own Key (BYOK)) est pris en charge uniquement lors de la mise à disposition à partir de l'interface de ligne de commande et de l'API. Dans le cas contraire, la réplique de lecture est cryptée avec une clé générée.

Mise à disposition via l'API ou l'interface de ligne de commande

Le provisionnement d'une réplique en lecture par l'intermédiaire de la CLI et de l'API fonctionne de la même manière que le provisionnement d'un déploiement standard sur Databases for MySQL. L'application des accès est gérée par le contrôleur de ressources et utilise un paramètre {"remote_leader_id": "crn:v1:..."} pour spécifier le responsable de la réplique que vous provisionnez.

Par exemple, pour approvisionner une réplique en lecture via la CLI,

ibmcloud resource service-instance-create <replica_name> databases-for-mysql standard <region> \
-p \ '{
  "remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
  "members_memory_allocation_mb": "2048",
  "members_disk_allocation_mb": "10240"
}'

Le même paramètre est utilisé pour provisionner une réplique en lecture via l'API du contrôleur de ressources.

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "<replica_name>",
    "target": "<region>",
    "resource_group": "<your_resource_group_id>",
    "resource_plan_id": "databases-for-mysql-standard",
    "remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
    "members_memory_allocation_mb": "2048",
    "members_disk_allocation_mb": "10240"
  }'

Pour les commandes CLI et API, vous devez indiquer les quantités de RAM et de disque, en gardant à l'esprit que la taille minimale est de 2 Go de RAM et de 20 Go de disque. Vous pouvez éventuellement préciser si le réplica de lecture utilise des points d'extrémité publics ou privés. Vous ne pouvez pas spécifier de version pour le réplica de lecture. La version est automatiquement définie sur la même version majeure que le déploiement de l'instance de la base de données source.

La réplique de la lecture

Dans l'onglet Répliques en lecture d'une réplique en lecture, le volet Réplication contient son nom et sa région, ainsi que le nom et la région de son instance de base de données source. Il dispose également de boutons permettant de resynchroniser la réplique de lecture et de la promouvoir.

Volet de réplication d'une réplique en lecture*Volet de
d'une réplique en

Vérification du statut de la réplication

Le statut de la réplication n'est pas automatiquement surveillé. Il vous incombe de surveiller la réplication.

Vous pouvez vérifier l'état de réplication, ainsi que le délai de réplication, d'un réplica en lecture avec mysql à partir de son instance de base de données source. Connectez-vous à l'instance de base de données source déployée avec mysql en utilisant les crédits d'accès administrateur. Une fois connecté, exécutez la commande suivante :

mysql> SHOW SLAVE STATUS \G

Une zone clé du rapport d'état de la commande sera Seconds_Behind_Master: _. Il s'agit du nombre de secondes pendant lequel l'unité d'exécution SQL de réplication est derrière le traitement du journal binaire de la source.

Pour plus d'informations, voir la vérification du statut de la réplication de MySQL.

Lire les utilisateurs du réplica et leurs privilèges

  • Tout utilisateur de l'instance de la base de données source, même celui présent avant la mise à disposition du réplica de lecture, peut se connecter et exécuter des lectures sur un réplica de lecture avec les mêmes privilèges sur les objets que ceux dont il dispose sur l'instance de la base de données source.

  • Si plusieurs répliques de lecture sont attachées à une instance de base de données source, un utilisateur créé sur la source est également créé sur toutes les autres répliques de lecture.

  • Les utilisateurs créés sur l'instance de la base de données source persistent sur la réplique en lecture lorsqu'elle est promue à un déploiement autonome, y compris l'utilisateur admin. Lorsque le réplica en lecture est promu, les utilisateurs et les privilèges de tous les utilisateurs de l'instance de la base de données source sont transférés vers le déploiement promu.

  • Les opérations d'écriture sur le réplica de lecture pour tous les utilisateurs ne sont pas filtrées ou rejetées, mais échouent au niveau de la base de données.

  • Les utilisateurs de répliques en lecture qui sont créés sur une réplique en lecture peuvent se connecter à l'instance de la base de données source avec l'autorisation SELECT.

Resynchronisation d'une réplique en lecture

Si vous devez resynchroniser un réplica en lecture, cliquez sur le bouton Resynchroniser le réplica en lecture. La resynchronisation est une opération perturbatrice et l'exécution d'une resynchronisation détruit et reconstruit les données dans la réplique de lecture. Le réplica en lecture n'est pas en mesure d'effectuer d'autres opérations ou d'exécuter des requêtes pendant qu'une resynchronisation est en cours. Les requêtes ne sont pas redirigées vers l'instance de la base de données source, de sorte que toute connexion à la réplique de lecture échoue jusqu'à ce que la resynchronisation soit terminée.

Le temps nécessaire à la resynchronisation d'une réplique de lecture est variable, mais le processus peut être très long.

Pour démarrer une resynchronisation via l'interface de ligne de commande, utilisez la commande cdb read-replica-resync.

ibmcloud cdb read-replica-resync <deployment name>

Pour démarrer une resynchronisation via l'API, envoyez une demande POST au noeud final /deployments/{id}/remotes/resync.

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/resync \
  -H 'Authorization: Bearer <>'

Promouvoir une réplique de lecture

Une réplique en lecture peut être promue à un cluster indépendant qui peut accepter des opérations d'écriture aussi bien que des opérations de lecture. En cas d'incident sur l'instance de la base de données source, le réplica de lecture peut être promu en cluster autonome et commencer à accepter les écritures de votre application.

Pour promouvoir un réplica en lecture à partir de l'interface utilisateur, cliquez sur le bouton Promouvoir le réplica en lecture.

Lors de la promotion, le réplica en lecture met fin à sa connexion à l'instance de la base de données source et devient un déploiement autonome sur le site Databases for MySQL. Le déploiement peut commencer à accepter et exécuter des opérations de lecture et d'écriture, les sauvegardes sont activées, et il émet son propre nom d'administrateur. Un nouveau membre de données est ajouté pour que le déploiement devienne un cluster avec trois membres de données. Cela augmente le coût car il est facturé au même taux de consommation par membre, mais le déploiement compte trois membres au lieu d'un.

Lorsque vous promouvez un réplica en lecture, vous pouvez ignorer la sauvegarde initiale qui serait normalement effectuée lors de la promotion. Lorsque vous ignorez la sauvegarde initiale, votre réplique devient disponible plus rapidement, mais aucune sauvegarde n'est disponible immédiatement. Vous pouvez lancer une sauvegarde à la demande une fois la promotion terminée.

Une fois qu'une réplique de lecture est promue à un déploiement indépendant, il n'est pas possible de la ramener à une réplique de lecture ou de la faire rejoindre une instance de base de données source.

Pour effectuer la promotion via l'interface de ligne de commande, utilisez la commande cdb read-replica-promote.

ibmcloud cdb read-replica-promote <deployment name>

Pour effectuer la promotion via l'API, envoyez une demande POST au noeud final /deployments/{id}/remotes/promotion.

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {}}' \

Pour effectuer la promotion et ignorer la sauvegarde initiale après la promotion, définissez également skip_initial_backup dans le corps JSON.

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {"skip_initial_backup": true}}' \

Durée d'exécution

La recette de promotion s'exécute uniquement lorsque la base de données a une haute disponibilité. Cependant, la disponibilité en lecture/écriture se produit après environ 10 minutes avec une mise en garde majeure à prendre en compte : la base de données n'a pas une haute disponibilité tant que la recette n'est pas terminée.

Le temps de promotion complet d'une réplique en lecture seule est déterminé par la taille des données, de deux manières possibles :

  • Les répliques en lecture seule sont des membres uniques. Lors de la promotion, deux membres supplémentaires sont ajoutés en tant que répliques. Le temps nécessaire dépend de la taille des données. Avec la croissance des bases de données, la création peut prendre beaucoup de temps. L'opération de promotion n'est pas terminée tant que la création des deux répliques n'est pas terminée.
  • Si vous choisissez d'effectuer une sauvegarde dans le cadre de la promotion, cette sauvegarde doit être finalisée avant la fin de la recette. Ici encore, cela dépend de la taille de la base de données.

N'oubliez pas qu'aucun membre à haute disponibilité n'existe tant que la recette de promotion n'est pas terminée. De même, si vous avez choisi d'effectuer une sauvegarde initiale, il n'existe aucune sauvegarde tant que le second point n'est pas terminé ou qu'une sauvegarde manuelle est créée.