D'une simple instance MysQL à une haute-disponibilité multi-sites, voici ce que vous décrouvrirez dans cette présentation. Comment effectuer cette transition et quelles solutions conviennent les mieux aux évolutions des exigences commerciales (RPO, RTO). Récemment, MySQL a étendu les possibilités de déploiement aisé d'architecture avec des outils intégrés. Venez découvrir ces solution Open Source qui font partie de MySQL.
2. Copyright @ 2022 Oracle and/or its affiliates.
Qui suis-je ?
about.me/lefred
2
3.
Frédéric Descamps
Copyright @ 2022 Oracle and/or its affiliates.
@lefred
Évangesliste MySQL
Utilise MySQL depuis la version 3.21
passionné devops
habitant en
h ps://lefred.be
3
4. Copyright @ 2022 Oracle and/or its affiliates.
les bonnes pratiques en 2022
paramètres de con guration
4
5. je présume lors de ce e présentation que votre système
utilise MySQL 8.0.28 ou plus récent
n'utilise que InnoDB
a les "binary logs" activés
le format des "binary logs" est ROW
utilise GTID
Copyright @ 2022 Oracle and/or its affiliates.
5
6. Copyright @ 2022 Oracle and/or its affiliates.
Évolution vers la Haute Disponibilité
MySQL 8.0
6
8. Voici où tout commence...
et on n'oublie pas:
on utilise QUE InnoDB
on garde les paramètres de durabilité
par défaut
Une simple instance MySQL
Copyright @ 2022 Oracle and/or its affiliates.
8
9. Une simple instance MySQL
Copyright @ 2022 Oracle and/or its affiliates.
/
/
RPO ?
?
RTO
9
10. Palier suivant (level up)
La base de données gagne en importance, la perdre totalement pourrait être un problème...
Copyright @ 2022 Oracle and/or its affiliates.
10
11. Palier suivant (level up)
La base de données gagne en importance, la perdre totalement pourrait être un problème...
RTO → heures
Copyright @ 2022 Oracle and/or its affiliates.
10
12. Palier suivant (level up)
La base de données gagne en importance, la perdre totalement pourrait être un problème...
RTO → heures
RPO → 1 jour
Copyright @ 2022 Oracle and/or its affiliates.
10
13. Palier suivant (level up)
La base de données gagne en importance, la perdre totalement pourrait être un problème...
RTO → heures
RPO → 1 jour
RTO: Recovery Time Objective (combien de temps pour récupérer les données?)
RPO: Recovery Point Objective (combien de données peut-on perdre?)
Copyright @ 2022 Oracle and/or its affiliates.
10
14. Sauvegarde Physique
Sauvegarde Logique
Pour les sauvegardes logiques, c'est MySQL
Shell Dump & Load Utility qu'il faut utiliser!
Sauvegardes
Copyright @ 2022 Oracle and/or its affiliates.
11
15. Une simple instance MySQL avec sauvegarde journalière
Copyright @ 2022 Oracle and/or its affiliates.
heures
1 jour
RPO ?
?
RTO
12
16. Palier suivant (level up)
RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques
minutes maximum !
Copyright @ 2022 Oracle and/or its affiliates.
13
17. Palier suivant (level up)
RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques
minutes maximum !
RTO → heures
Copyright @ 2022 Oracle and/or its affiliates.
13
18. Palier suivant (level up)
RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques
minutes maximum !
RTO → heures
RPO → minutes
Copyright @ 2022 Oracle and/or its affiliates.
13
19. Ceci sont les valeurs par défaut de MySQL
8.0:
Des Binlogs Fiables et Durables
On active les logs binaires (binary logs) qui nous perme ent de rejouer les écritures depuis
la dernière sauvegarde(*)
Copyright @ 2022 Oracle and/or its affiliates.
14
20. Une simple instance MySQL avec sauvegarde journalière
et les binlogs activés
Copyright @ 2022 Oracle and/or its affiliates.
heures
minutes
RPO ?
?
RTO
15
21. Récupération Pontcuelle - Point-in-Time Recovery (PITR)
Il s'agit de la technique par laquelle un administrateur peut restaurer ou récupérer un
ensemble de données à un certain point dans le passé.
Avec MySQL, la récupération ponctuelle consiste à restaurer un dump des données puis à
rejouer les binlogs depuis et jusqu'à un point précis.
Ce e technique est utilisée pour:
résoudre un problème
pratiquer une migration en temps réel (live migration)
Copyright @ 2022 Oracle and/or its affiliates.
16
22. Point-in-Time Recovery : comment ça marche ?
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
Copyright @ 2022 Oracle and/or its affiliates.
17
23. Point-in-Time Recovery : comment ça marche ?
day 1
BACKUPS
Binlogs
day 2
nous voulons restaurer
jusqu'à ce point
day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
Copyright @ 2022 Oracle and/or its affiliates.
18
24. Point-in-Time Recovery : comment ça marche ?
day 1
BACKUPS
Binlogs
day 2
nous voulons restaurer
jusqu'à ce point
day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
1. nous restaurons le dump (jour3)
Copyright @ 2022 Oracle and/or its affiliates.
19
25. Point-in-Time Recovery : comment ça marche ?
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
2
.
n
o
u
s
r
e
j
o
u
o
ns
le
binlog (.008)
1. nous restaurons le dump (jour3)
Copyright @ 2022 Oracle and/or its affiliates.
20
26. Point-in-Time Recovery : conceptes importants
Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary
logs sont purgés du serveur MySQL:
Copyright @ 2022 Oracle and/or its affiliates.
21
27. Point-in-Time Recovery : conceptes importants
Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary
logs sont purgés du serveur MySQL:
Copyright @ 2022 Oracle and/or its affiliates.
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
21
28. Point-in-Time Recovery : conceptes importants
Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary
logs sont purgés du serveur MySQL:
Copyright @ 2022 Oracle and/or its affiliates.
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
day 1
BACKUPS
points possibles
de récupération
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
}
21
29. Palier suivant (level up)
Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre
moins d'une seconde en cas de problème !
Copyright @ 2022 Oracle and/or its affiliates.
22
30. Palier suivant (level up)
Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre
moins d'une seconde en cas de problème !
RTO → heures
Copyright @ 2022 Oracle and/or its affiliates.
22
31. Palier suivant (level up)
Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre
moins d'une seconde en cas de problème !
RTO → heures
RPO → moins d'une seconde
Copyright @ 2022 Oracle and/or its affiliates.
22
32. Activer les GTIDs
Sauvegarder en temps réel les binlogs
sur un autre système (OCI Object
Storage, S3, ...)
VCN
10.0.0.0/16
Public Subnet
10.0.0.0/24
Private Subnet
10.0.1.0/24
MySQL Shell
MySQL
Database Service
Internet
Gateway
Oracle Cloud Infrastructure
Availability Domain 1
Fault Domain 1
mysql-dump-bucket
mysql-binlogs-bucket
Object Storage
dump instance
streambinlogs
Meilleur Point-in-Time Recovery (PITR)
Copyright @ 2022 Oracle and/or its affiliates.
23
36. Sauvegardes des Binlogs
Sur un autre système:
mysqlbinlog --raw --read-from-remote-server --stop-never --host 10.0.0.2
--port 3306 -u getbinlog -ppassword
--ssl-mode='REQUIRED' binlog.xxxxxx
Copyright @ 2022 Oracle and/or its affiliates.
25
37. Point-in-Time Recovery : conceptes importants (2)
Comme vous avez pu le constater, nous ne pouvons récupérer qu'à l'heure exacte des
sauvegardes et nous ne pouvons faire une récupération ponctuelle qu'à partir de la dernière
!
C'est pourquoi il est recommandé de délocaliser les binlogs (sur un autre serveur, un NAS, le
cloud, ...).
Cela perme ra d'e ectuer une restauration ponctuelle à n'importe quel moment dans le
temps :
Copyright @ 2022 Oracle and/or its affiliates.
26
38. Point-in-Time Recovery : conceptes importants (2)
Comme vous avez pu le constater, nous ne pouvons récupérer qu'à l'heure exacte des
sauvegardes et nous ne pouvons faire une récupération ponctuelle qu'à partir de la dernière
!
C'est pourquoi il est recommandé de délocaliser les binlogs (sur un autre serveur, un NAS, le
cloud, ...).
Cela perme ra d'e ectuer une restauration ponctuelle à n'importe quel moment dans le
temps :
Copyright @ 2022 Oracle and/or its affiliates.
}
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005
.001
.002
.003
.004
.005
.006 .007 .008 .009 .010
.006
.007
.008
.009
.010
b
i
n
l
o
g
s
t
r
e
a
m
i
n
g
points possibles
de récupération
26
39. Une simple instance MySQL avec sauvegarde journalière
et archivage externe des binlogs
Copyright @ 2022 Oracle and/or its affiliates.
heures
< 1 seconde
RPO ?
?
RTO
27
40. Palier suivant (level up)
Mon service est maintenant très important, je voudrais que ma base de données puisse être
de nouveau disponible en quelques minutes en cas d'incident.
Copyright @ 2022 Oracle and/or its affiliates.
28
41. Palier suivant (level up)
Mon service est maintenant très important, je voudrais que ma base de données puisse être
de nouveau disponible en quelques minutes en cas d'incident.
RTO → minutes
Copyright @ 2022 Oracle and/or its affiliates.
28
42. Palier suivant (level up)
Mon service est maintenant très important, je voudrais que ma base de données puisse être
de nouveau disponible en quelques minutes en cas d'incident.
RTO → minutes
RPO → moins d'une seconde
Copyright @ 2022 Oracle and/or its affiliates.
28
43. Fondé à partir de la réplication
asynchrone
Mais plus facile... et plus facile, c'est
mieux !
Transfert initial des données
("provisioning") inclus (clone)
2 noeuds ou plus
Basculement manuel (failover)
Routage transparent/automatique des
requêtes avec MySQL Router
MySQL InnoDB ReplicaSet
Copyright @ 2022 Oracle and/or its affiliates.
29
45. MySQL InnoDB ReplicaSet
Connecté au serveur actuel:
JS > dba.con gureReplicaSetInstance()
JS > rs=dba.createReplicaSet('myreplicaset')
Sur le nouveau serveur où seul MySQL est installé (serveur et shell):
JS > dba.con gureReplicaSetInstance()
Et de nouveau sur l'instance principale:
JS > rs.addInstance('mysql-2')
Copyright @ 2022 Oracle and/or its affiliates.
31
49. MySQL Router
MySQL Router est très simple a con gurer, il su t d'utiliser la commande bootstrap!
Copyright @ 2022 Oracle and/or its affiliates.
35
50. MySQL Router
Et comme d'habitude visible avec MySQL Shell
Copyright @ 2022 Oracle and/or its affiliates.
36
51. MySQL InnoDB ReplicaSet - Basculement Manuel
Copyright @ 2022 Oracle and/or its affiliates.
MySQL Shell est connecté à MySQL InnoDB ReplicaSet via MySQL Router.
37
52. MySQL InnoDB ReplicaSet - Basculement Manuel
Copyright @ 2022 Oracle and/or its affiliates.
38
54. Palier suivant (level up)
Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours
disponible (basculment automatique) et ne jamais perdre de données !
Copyright @ 2022 Oracle and/or its affiliates.
40
55. Palier suivant (level up)
Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours
disponible (basculment automatique) et ne jamais perdre de données !
RTO → secondes
Copyright @ 2022 Oracle and/or its affiliates.
40
56. Palier suivant (level up)
Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours
disponible (basculment automatique) et ne jamais perdre de données !
RTO → secondes
RPO → 0
Copyright @ 2022 Oracle and/or its affiliates.
40
57. Fondé à partir de Group Replication
Mais plus simple... et c'est toujours
mieux
Transfert des données initiales inclus
(clone)
3 noeuds ou plus (un nombre impair est
recommandé)
Basculement Automatique
Utilise MySQL Router
Niveaux de consistances des données
con gurable
MySQL InnoDB Cluster
Copyright @ 2022 Oracle and/or its affiliates.
41
59. Sur le serveur "Primary" de notre
ReplicaSet:
JS > dba.dropMetadataSchema()
JS > cluster=dba.createCluster('mycluster')
Et sur l'instance "Secondary":
SQL > STOP REPLICA;
SQL > RESET ALL REPLICA;
Et à nouveau sur le nouveau "Primary" du
Cluster:
JS > cluster.addInstance('mysql-2')
MySQL InnoDB Cluster
On peut maintenant ajouter un troisième
membre pour béné cier du basculement
automatique:
Copyright @ 2022 Oracle and/or its affiliates.
43
60. Sur le serveur "Primary" de notre
ReplicaSet:
JS > dba.dropMetadataSchema()
JS > cluster=dba.createCluster('mycluster')
Et sur l'instance "Secondary":
SQL > STOP REPLICA;
SQL > RESET ALL REPLICA;
Et à nouveau sur le nouveau "Primary" du
Cluster:
JS > cluster.addInstance('mysql-2')
JS > dba.con gureInstance()
À partir d'une instance du cluster:
JS > cluster=dba.getCluster()
JS > cluster.addInstance('mysql-3')
En n, on peut recon gurer le routeur:
# mysqlrouter --bootstrap
clusteradmin@single-mysql:3306
--conf-use-gr-noti cations
--user mysqlrouter --force
# systemctl restart mysqlrouter
MySQL InnoDB Cluster
On peut maintenant ajouter un troisième
membre pour béné cier du basculement
automatique:
Copyright @ 2022 Oracle and/or its affiliates.
43
63. Palier suivant (level up)
Et si quelque chose arrivait à notre centre de données ?
Copyright @ 2022 Oracle and/or its affiliates.
46
64. Palier suivant (level up)
Et si quelque chose arrivait à notre centre de données ?
Comment déployer un plan de reprise en cas de catastrophe (Disaster Recovery) ?
Copyright @ 2022 Oracle and/or its affiliates.
46
65. Palier suivant (level up)
Et si quelque chose arrivait à notre centre de données ?
Comment déployer un plan de reprise en cas de catastrophe (Disaster Recovery) ?
Copyright @ 2022 Oracle and/or its affiliates.
MySQL InnoDB ClusterSet !!
46
66. L'évolution ultime !
disponible depuis MySQL 8.0.27
support du "fencing" depuis 8.0.28
MySQL InnoDB ClusterSet
Copyright @ 2022 Oracle and/or its affiliates.
47
67. Fruit de plusieurs transformations au cours des sorties précédentes:
8.0.22: Automatic Connection Failover (Async Replication Channels)
8.0.23: Automatic Connection Failover (Async Replication Channels using Group
Replication)
8.0.24: transformation de skip-replica-start en variable globale, persistante et en
lecture-seule
8.0.26: Ajout d'actions pour les membres de Group Replication (ex: super_read_only
con gurable)
8.0.26: Ajout d'un UUID spéci que pour les évènements liés aux changements
structurels du Groupe (View_change_log_event)
8.0.27: la con guration de l'Asynchronous Replication Channel suit automatiquement le
Primary.
Copyright @ 2022 Oracle and/or its affiliates.
48
72. Extra
Depuis MySQL 8.0.19, les connecteurs supportent également dns-srv qui avec un
"discovery service" tel que Consul, peut remplacer MySQL Router quand il est impossible
de l'installer sur les serveurs d'applications:
Copyright @ 2022 Oracle and/or its affiliates.
51
73. Extra
Depuis MySQL 8.0.19, les connecteurs supportent également dns-srv qui avec un
"discovery service" tel que Consul, peut remplacer MySQL Router quand il est impossible
de l'installer sur les serveurs d'applications:
Copyright @ 2022 Oracle and/or its affiliates.
51