Er zijn verschillende redenen om uw databases te upgraden. Het kan zijn om beveiligingsoplossingen toe te passen, nieuwe functies te gebruiken, compatibiliteitsproblemen op te lossen of gewoon om uw systeem up-to-date te houden. Deze upgrade kan een grote of een kleine upgrade zijn, en afhankelijk van de technologie zijn er verschillende benaderingen om dit werk te doen, maar als u uw systemen constant wilt laten draaien zonder downtime, kan het uitvoeren van een doorlopende upgrade de beste optie zijn .
In deze blog zullen we enkele overwegingen zien waarmee we rekening moeten houden voordat we een upgrade uitvoeren en hoe we een doorlopende upgrade op MySQL kunnen uitvoeren.
Kleine versus grote upgrades
Over het algemeen zijn kleine upgrades veilig in de zin dat je ze gemakkelijk kunt downgraden of terugdraaien en moeten ze compatibel zijn met de vorige pakketten en functies.
Een grote versie-upgrade brengt enkele risico's met zich mee, zoals het verwijderen van databasepakketten, compatibiliteit van configuratie en connectoren, verouderde functies en meer.
Dus zelfs wanneer testen belangrijk is voor beide scenario's, is het in het geval van grote upgrades een must als u ernstige problemen voor uw bedrijf wilt voorkomen.
Vóór het upgraden
Laten we nu enkele overwegingen bekijken voordat u een upgrade uitvoert, om toekomstige problemen te voorkomen.
Back-ups
Back-ups zijn altijd belangrijk, en nog belangrijker als je je database wilt upgraden. Als er iets misgaat en andere herstelopties bij calamiteiten mislukken, hebt u een back-up nodig om uw database te herstellen. Maak dus, voordat u met de taak begint, een volledige back-up (fysiek en/of logisch) van uw huidige database en bewaar deze totdat u zeker weet dat alles een paar dagen/weken goed werkt.
Beoordeel verouderde functies
Als u een functie gebruikt die in de nieuwe versie is verouderd, kan uw toepassing mislukken en moet u een rollback uitvoeren om uw systemen te herstellen, wat downtime veroorzaakt (afhankelijk van de aanpak) en een tijdverlies. Door de verouderde functie te controleren en deze te vergelijken met degene die u gebruikt, wordt deze mislukte upgradepoging voorkomen.
Testen
Dit is niet alleen belangrijk voor upgrades, maar ook voor elke wijziging in uw database of applicatie. Het hebben van een testomgeving die de productieomgeving repliceert, kan u tijd besparen en onverwachte problemen tijdens een upgrade of databasewijziging voorkomen.
Terugdraaien
Bij elke upgrade is het belangrijk om een rollback klaar te hebben die indien nodig kan worden gebruikt om uw database zo snel mogelijk te laten werken. Anders kan dit van invloed zijn op uw RTO (Recovery Time Objective) voor het geval u het cluster opnieuw moet maken vanuit een back-up of een andere herstelplanoptie.
Houd er rekening mee dat downgrades soms niet mogelijk zijn, dus u zou een secundair plan moeten hebben voor het geval u uw wijzigingen ongedaan moet maken.
Leverancierscheques
Afhankelijk van de leverancier en versie, kunt u de opdracht mysqlcheck gebruiken om de voorlopige controle van uw huidige installatie uit te voeren en te bevestigen dat u klaar bent om te gaan.
$ mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
Dit is een eerste controle die moet worden uitgevoerd voordat de upgrade wordt uitgevoerd, en het zal controleren of er geen:
- Tabellen met verouderde gegevenstypen of functies
- Verweesde frm-bestanden
- Triggers met ontbrekende of lege definitie of een ongeldige aanmaakcontext
Er zijn nog een paar dingen die je moet controleren, maar om een uitgebreide blogpost te vermijden, kun je hiervoor de officiële MySQL-documentatie raadplegen.
Handmatige doorlopende upgrades voor MySQL
Er zijn verschillende manieren om een doorlopende upgrade uit te voeren. Het kan op zijn plaats zijn, met behulp van replicatie, of zelfs een combinatie daarvan. Als u downtime wilt voorkomen, moet u in ieder geval geen wijzigingen aanbrengen in uw applicatie tijdens de upgrade. Hiervoor kun je een Load Balancer voor je databases toevoegen. Uw toepassing maakt verbinding met uw Load Balancer en leidt het verkeer om naar de beschikbare knooppunten.
Stel dat u een MySQL-replicatie hebt met 1 master- en 2 slave-knooppunten en 1 HAProxy-knooppunt ervoor:
Een vereenvoudigde manier om een handmatige rolling upgrade uit te voeren op deze omgeving kan zijn:
- Schakel één slave-knooppunt uit van uw HAProxy
- Zorg ervoor dat u geen verkeer heeft op dit slave-knooppunt
- Upgrade de slave-node handmatig
- Controleer de replicatiestatus om er zeker van te zijn dat deze up-to-date is
- Schakel het hoofdknooppunt in uw HAProxy uit
- Zorg ervoor dat u geen verkeer op uw hoofdknooppunt heeft
- De geüpgradede slave-node promoten
- Schakel het in in uw HAProxy
- Bevestig dat de nieuwe master verkeer ontvangt
- Configureer uw tweede slave opnieuw om te repliceren vanaf de nieuwe master
- Schakel de tweede slaaf van je HAProxy uit
- Zorg ervoor dat u geen verkeer heeft op dit slave-knooppunt
- Upgrade de slave-node handmatig
- Controleer de replicatiestatus om er zeker van te zijn dat deze up-to-date is
- Schakel het in in uw HAProxy
- Bevestig dat het slave-knooppunt verkeer ontvangt (indien nodig)
- Configureer je oude master opnieuw om te repliceren vanaf de nieuwe master
- Upgrade het oude hoofdknooppunt handmatig
- Controleer de replicatiestatus om er zeker van te zijn dat deze up-to-date is
- Schakel het in in uw HAProxy
- Bevestig dat de oude master (nu slave) verkeer ontvangt (indien nodig)
Zoals je kunt zien, vereist deze taak, zelfs op een vereenvoudigde manier, veel stappen, en het betekent meer mogelijkheden dat er iets misgaat.
ClusterControl Rolling Upgrades voor MySQL
De beste manier om de kans op fouten te verkleinen, is door al deze (of bijna alle) stappen te automatiseren. Met ClusterControl kunt u met slechts een paar klikken een kleine voortschrijdende upgrade van uw MySQL-cluster uitvoeren.
Ga hiervoor naar ClusterControl -> Selecteer Cluster -> Beheren -> Upgrades, waar u de optie Upgrade ziet.
Upgrades zijn online en worden op één knooppunt tegelijk uitgevoerd. Het knooppunt wordt gestopt, de software wordt bijgewerkt en het knooppunt wordt opnieuw gestart. Als een node niet kan upgraden, wordt het proces afgebroken.
Als u de optie Upgrade kiest, ziet u een bevestiging over de versie die wordt geüpgraded:
En je hoeft alleen maar op Upgraden te drukken om deze taak te bevestigen. Hierna kunt u het upgradeproces volgen in de sectie ClusterControl Activity:
Tegelijkertijd zal ClusterControl uw Load Balancers opnieuw configureren om het verkeer te verzenden naar de beschikbare knooppunten.
ClusterControl ondersteunt alleen kleine upgrades, omdat, zoals we eerder vermeldden, een grote upgrade een riskante taak is die moet worden getest en onderzocht om er zeker van te zijn dat uw toepassing goed werkt op de nieuwe hoofdversie.
ClusterControl ondersteunt alleen kleine upgrades. P>Conclusie
Upgraden is een belangrijke taak in alle bedrijven en het kan riskant zijn als je bepaalde voorzorgsmaatregelen niet neemt en alle upgradestappen correct volgt.
In deze blog hebben we enkele overwegingen genoemd waarmee u rekening moet houden voordat u uw database opwaardeert, en we hebben het verschil laten zien tussen deze taak handmatig uitvoeren en het gebruik van ClusterControl, waarmee u de kans op fouten minimaliseert.