Gestionarea aplicațiilor cu state precum bazele de date în Kubernetes poate fi o provocare. Operatorii grupează cunoștințele practice în soluții care automatizează sarcinile de management.
Utilizarea operatorului MySQL simplifică implementarea și extinderea unui cluster MySQL pregătit pentru producție. De asemenea, permite o disponibilitate ridicată prin replicarea pod-urilor care găzduiesc baza de date și permite backup-urile și recuperarea.
Clusterul InnoDB
Haroon Khan este un profesionist de date care creează și întreține baze de date care acceptă aplicații de înaltă performanță. Are peste un deceniu de experiență cu diverse tehnologii, inclusiv MySQL, Microsoft SQL Server, DB2 și instrumente open source.
Este pasionat să ajute companiile să adopte o arhitectură de date modernă care poate face față cerințelor extinse de date. InnoDB Cluster este o componentă critică în acest efort, oferind o scalabilitate de scriere îmbunătățită. Cu toate acestea, implementarea acestuia poate fi o provocare dacă trebuie să vă familiarizați cu diferitele sale componente.
În plus, poate necesita mai multe instrumente pentru a gestiona topologia. Este posibil ca această soluție să nu fie potrivită pentru aplicația dvs. dacă nu doriți să investiți în timpul de dezvoltare/integrare/testare pentru fiecare tehnologie. Aici strălucește busola Kubernetes a lui Haroon.
El crede că scalarea MySQL cu InnoDB Cluster ar trebui să fie separată de scalarea complexității acestuia. De aceea pledează pentru integrarea cu operatorul MySQL Kubernetes. Această combinație puternică combină puterea clusterului InnoDB cu eleganța Kubernetes, simplificând managementul și orchestrarea dintr-o singură lovitură.
Dacă o instanță este repornită, aceasta părăsește grupul și trebuie să se alăture grupului pentru a fi adăugată înapoi la setul de replici implicit. Pentru a vă alătura un exemplu, puteți utiliza comanda cluster.rejoinInstance(), care ia un URI ca parametru. Această comandă asigură că instanța este ONLINE și poate fi adăugată la grup.
De asemenea, verifică dacă nu sunteți un creier divizat (comparând GTID-urile executate cu GTID-urile executate/eliminate ale altor membri ONLINE). Comanda poate eșua dacă o instanță nu este accesibilă, dar puteți încerca din nou mai târziu.
PodDisruptionBuget
Un buget de întrerupere a podurilor (PDB) specifică numărul minim sau procentul de poduri dintr-o colecție care trebuie să fie întotdeauna active. Este un instrument valoros atunci când aveți de-a face cu aplicații care necesită disponibilitate ridicată, cum ar fi aplicațiile bazate pe cvorum sau front-end-urile web.
Bugetele de întrerupere a podului vă ajută să vă asigurați că operațiunile nodurilor vă vor reduce serviciul doar prin epuizarea simultană a unor instanțe de pod. Acestea lucrează împreună cu Horizontal Pod Autoscaler pentru a proteja împotriva timpilor de nefuncţionare inutile ai implementării.
Pentru a utiliza un PDB, trebuie să creați un fișier YAML care să definească disponibilitatea dorită pentru aplicația dvs. De asemenea, puteți defini un obiect PodDisruptionBudgetStatus pentru a urmări starea curentă a PDB. Acest lucru poate fi util atunci când aveți de-a face cu situații în schimbare, deoarece starea PDB-ului dvs. poate rămâne în urmă față de starea actuală.
Bugetele de întrerupere a podului sunt utile pentru aplicațiile care trebuie să își mențină disponibilitatea în timp ce au loc upgrade-uri de cluster. De exemplu, o companie de telecomunicații poate dori să se asigure că serviciile sale VoIP rămân disponibile în timpul întreținerii sau corecțiilor sistemului.
Acest lucru permite companiilor de telecomunicații să implementeze funcții care pot îmbunătăți experiența utilizatorului final fără a sacrifica disponibilitatea. PodDisruptionBudget este util și pentru furnizorii de software ca serviciu (SaaS) care trebuie să echilibreze disponibilitatea cu upgrade-urile și întreținerea sistemului. Acest lucru este valabil mai ales atunci când un furnizor SaaS trebuie să mențină disponibilitatea în timp ce lansează o nouă caracteristică sau implementează actualizări pentru serviciul său.
Seturi de replici
ReplicationSets sunt obiecte de control Kubernetes care dețin un număr specificat de replici pod. Sunt excelenți în gestionarea nevoilor simple de scalabilitate și pot ajuta la asigurarea unei disponibilități ridicate și a rezistenței.
ReplicaSets poate gestiona, de asemenea, modificări ale stării dorite, cum ar fi un pod care eșuează sau ștergerea manuală a unui pod, crearea de noi poduri pentru a le înlocui sau oprirea replicilor în exces pentru a readuce sistemul la starea dorită.
ReplicaSets sunt configurate într-un fișier manifest YAML, inclusiv specificații pentru numărul de replici și modelul pod. De asemenea, susțin utilizarea etichetelor pod pentru a identifica și selecta podurile pe care le gestionează.
De exemplu, un ReplicationSet ar putea achiziționa toate podurile cu stratul de etichetă în (frontend) și mediul în (prod). Un ReplicationSet poate urmări, de asemenea, modificările aduse stării dorite, uitându-se la oplog-ul sau la jurnalul de îngrijorare de scriere primară.
Atunci când un element primar eșuează într-un set de replică, secundarul care alege să devină noul primar se actualizează prin aplicarea operațiunilor înregistrate la seturile sale de date. În plus, un ReplicaSet poate preîncălzi cache-urile replicilor secundare eligibile prin oglindirea interogărilor citite.
Acest lucru reduce impactul alegerilor primare după o întrerupere primară sau în timpul întreținerii planificate. ReplicaSets pot fi, de asemenea, implementate în mai multe noduri și zone de disponibilitate pentru a îmbunătăți redundanța.
Backup-uri
Există multe soluții pentru rularea bazelor de date cu stare în Kubernetes, dar majoritatea au nevoie de funcții de a doua zi, cum ar fi backup-uri și upgrade-uri.
Operatorii Kubernetes reduc acest decalaj prin automatizarea și simplificarea operațiunilor complexe, specifice domeniului, inclusiv implementarea, scalarea și actualizarea bazelor de date.
Cei mai buni operatori MySQL sunt proiectați pentru a fi strâns integrați cu instrumentele existente de infrastructură ca cod și conducte CI/CD pentru a permite implementări de baze de date scalabile, sigure și pregătite pentru producție.
Operatorul MySQL de la Oracle este o soluție de auto-vindecare care acceptă clustere MySQL InnoDB pe Kubernetes. Folosește un Kubernetes StatefulSet pentru a gestiona instanțe de server MySQL și le atribuie un PersistentVolumeChain pentru stocare.
Operatorul implementează, de asemenea, un pod de router MySQL pentru a direcționa interogările prin cluster. Operatorul este în prezent disponibil în general și distribuit sub o licență universală permisivă apropiată de licența MIT.
Bitpoke MySQL Operator este un operator MySQL, open-source, ușor de utilizat pentru Kubernetes, care instalează doar Helm și Kubectl. Este conceput pentru a fi o soluție simplă, stabilă și pregătită pentru producție pentru Kubernetes, care oferă monitorizare, replicare, backup, actualizare și alte funcții. Operatorul folosește un fișier YAML declarativ pentru a implementa și scala clustere MySQL pe Kubernetes.
Spre deosebire de o procedură stocată tradițională, abstracția Nova-conductor împiedică accesul direct la baza de date. Acest lucru reduce riscul atacurilor de date. Cu toate acestea, este încă posibil să atacați baza de date prin depășiri de buffer-uri, scurgeri de memorie și programe software rău intenționate.