Testen is een tijdrovende taak, maar het is een must voor elk upgradeproces van welke technologie dan ook. Afhankelijk van het type upgrade kan het moeilijker of gemakkelijker zijn, maar het is altijd nodig als u zeker wilt weten dat uw gegevens veilig zijn. Er zijn verschillende benaderingen voor upgraden, afhankelijk van het bedrijf en de tolerantie voor downtime. Het proces kan bijvoorbeeld uw applicatie testen in een aparte omgeving met de nieuwe versie, dus u moet hiervoor een nieuw cluster maken. Een andere optie is om uw huidige productieomgeving te klonen en te upgraden, wat handig kan zijn omdat u het hele upgradeproces kunt emuleren en verrassingen in de toekomst kunt voorkomen.
Door al dit testproces handmatig uit te voeren, is er een grote kans op menselijke fouten en zal het proces traag verlopen, wat van invloed kan zijn op de Recovery Time Objective (RTO). In deze blog zullen we zien hoe u het testen voor het upgraden van uw PostgreSQL-databases kunt automatiseren met ClusterControl.
Type database-upgrades
Er zijn twee soorten upgrades:kleine upgrades en grote upgrades.
Kleine upgrades
Het is de meest gebruikelijke en veilige upgrade, en in de meeste gevallen wordt dit ter plekke uitgevoerd. Omdat niets 100% veilig is, moet u altijd back-ups en stand-by-knooppunten hebben, dus als er iets misgaat met de upgrade, kunt u een stand-byknooppunt in de vorige versie promoten, en uw systemen kunnen nog steeds zonder onderbreking werken.
U kunt dit soort upgrade uitvoeren met ClusterControl. Ga hiervoor naar ClusterControl -> Selecteer uw PostgreSQL-cluster -> Beheren -> Upgrades.
Op elk geselecteerd knooppunt zal de upgradeprocedure:
-
Stop Node
-
Knooppunt upgraden
-
Start Node
Het hoofdknooppunt in een PostgreSQL-topologie wordt niet geüpgraded. Om de Master te upgraden, moet eerst een ander knooppunt worden gepromoveerd om de nieuwe Master te worden.
Belangrijke upgrades
Voor grote upgrades wordt de interne upgrade niet aanbevolen, omdat het risico dat er iets misgaat te groot is voor een productieomgeving. In plaats daarvan zijn er verschillende benaderingen om upgrades uit te voeren.
Je kunt je huidige databasecluster klonen, upgraden en je applicatie daar testen, en als je klaar bent, als alles goed is gegaan, kun je het opnieuw maken om het proces te herhalen om de echte upgrade uit te voeren , of je kunt ook een nieuw cluster maken in de nieuwe versie, je applicatie testen en het verkeer omschakelen wanneer het klaar is, en er zijn meer opties... Het gebruik van Load Balancers is hier handig om High Availability te verbeteren. De beste aanpak hangt af van de downtime-tolerantie en de Recovery Time Objective (RTO).
U kunt Major Upgrades niet rechtstreeks met ClusterControl uitvoeren, omdat, zoals we al zeiden, u eerst alles moet testen om er zeker van te zijn dat de upgrade veilig is, maar u kunt verschillende ClusterControl-functies gebruiken om deze taak gemakkelijker. Laten we eens kijken naar enkele van deze functies.
Een testomgeving implementeren
Hiervoor hoef je niet alles helemaal opnieuw te maken. In plaats daarvan kunt u ClusterControl gebruiken om dit handmatig of geautomatiseerd te doen.
Back-up terugzetten op zelfstandige host
Kies in het gedeelte Back-up een back-up en je zult de optie "Herstellen en verifiëren op zelfstandige host" zien om een back-up in een apart knooppunt te herstellen.
Hier kunt u aangeven of u wilt dat ClusterControl de software in de nieuwe node, en schakel de firewall of AppArmor/SELinux uit (afhankelijk van het besturingssysteem). Hiervoor heb je een dedicated host (of VM) nodig die geen deel uitmaakt van het cluster.
U kunt het knooppunt actief houden, of ClusterControl kan de database afsluiten service tot de volgende hersteltaak. Als het klaar is, ziet u de herstelde/geverifieerde back-up in de back-uplijst gemarkeerd met een vinkje.
Als u deze taak niet handmatig wilt uitvoeren, kunt u plannen dit proces met behulp van de functie Back-up verifiëren, om deze taak periodiek in een back-uptaak te herhalen. In het volgende gedeelte gaan we kijken hoe we dit kunnen doen.
Automatische ClusterControl-back-upverificatie
Om deze taak te automatiseren, gaat u naar ClusterControl -> Selecteer uw PostgreSQL-cluster -> Back-up -> Back-up maken, en kies de optie Geplande back-up. De automatische functie Back-up verifiëren is alleen beschikbaar voor geplande back-ups.
Zorg er in de tweede stap voor dat u de optie Back-up verifiëren hebt ingeschakeld, en vul de vereiste informatie in.
Als de taak is voltooid, ziet u het verificatiepictogram in de ClusterControl Back-upsectie, dezelfde die u zult hebben door de verificatie op de handmatige manier uit te voeren, met het verschil dat u zich geen zorgen hoeft te maken over de hersteltaak. ClusterControl herstelt de back-up elke keer automatisch en u kunt uw applicatie testen met de meest recente gegevens.
Cluster maken van back-up
Een andere manier om een testomgeving te maken is door een nieuw cluster te maken vanaf een back-up van uw primaire cluster. Ga hiervoor naar ClusterControl -> Selecteer je PostgreSQL-cluster -> Back-up. Kies daar de back-up die moet worden hersteld uit de lijst en selecteer Herstellen -> Cluster maken van back-up.
Met deze optie wordt een nieuw PostgreSQL-cluster gemaakt van de geselecteerde back-up.
U moet het besturingssysteem en de databasegegevens en de informatie toevoegen om de nieuwe cluster. Wanneer deze taak is voltooid, ziet u het nieuwe cluster in de gebruikersinterface van ClusterControl.
Cluster-naar-cluster replicatie
Sinds ClusterControl 1.7.4 is er een functie genaamd Cluster-naar-Cluster-replicatie. Hiermee kunt u een replicatie uitvoeren tussen twee autonome clusters.
Een cluster-naar-cluster-replicatie maken
Ga naar ClusterControl -> Selecteer uw PostgreSQL-cluster -> Clusteracties -> Slave-cluster maken.
Het slavecluster wordt gemaakt door gegevens uit het huidige primaire cluster te streamen.
U moet SSH-inloggegevens en poort opgeven, een naam voor uw Slave-cluster, en als u wilt dat ClusterControl de bijbehorende software en configuraties voor u installeert.
Na het instellen van de SSH-toegangsinformatie, moet u de databaseversie definiëren, datadir, poort en beheerdersreferenties. Aangezien het streaming-replicatie gebruikt, moet u ervoor zorgen dat u dezelfde databaseversie gebruikt en dat de inloggegevens dezelfde zijn die worden gebruikt door het primaire cluster.
In deze stap moet u de server toevoegen aan het nieuwe Slave-cluster . Voor deze taak kunt u zowel het IP-adres als de hostnaam van het databaseknooppunt invoeren.
U kunt de taakstatus controleren in de ClusterControl-activiteitenmonitor. Zodra de taak is voltooid, kunt u het cluster zien in het hoofdscherm van ClusterControl.
Autoherstel en failover
Als de Autorecovery-functie is ingeschakeld, zal ClusterControl in geval van een storing het meest geavanceerde stand-by-knooppunt naar het primaire knooppunt promoveren en u op de hoogte stellen van het probleem. Het faalt ook om de rest van de standby-knooppunten te repliceren vanaf de nieuwe primaire server.
Als er Load Balancers in de topologie zijn, zal ClusterControl deze opnieuw configureren om de wijzigingen in de topologie toe te passen.
U kunt indien nodig ook handmatig een failover uitvoeren. Ga naar ClusterControl -> Selecteer uw PostgreSQL-cluster -> Knooppunten -> Selecteer het te promoten knooppunt -> Knooppuntacties -> Slave promoten.
Op deze manier kun je ClusterControl gebruiken om het zo snel mogelijk op te lossen als er iets misgaat tijdens de upgrade.
Dingen automatiseren met ClusterControl CLI
ClusterControl CLI, ook bekend als s9s, is een opdrachtregelprogramma dat is geïntroduceerd in ClusterControl versie 1.4.1 voor interactie, controle en beheer van databaseclusters met behulp van het ClusterControl-systeem. ClusterControl CLI opent een deur voor clusterautomatisering waar u het eenvoudig kunt integreren met bestaande automatiseringstools voor implementatie, zoals Ansible, Puppet, Chef, enz. Laten we nu enkele voorbeelden van deze tool bekijken.
Upgrade
$ s9s cluster --cluster-id=9 \
--check-pkg-upgrades \
--log
$ s9s cluster --cluster-id=9 \
--available-upgrades \
--nodes=10.10.10.122 \
--log \
--print-json
$ s9s cluster --cluster-id=9 \
--upgrade-cluster \
--nodes=10.10.10.122 \
--log
Back-ups verifiëren
$ s9s backup --verify \
--backup-id=2 \
--test-server=10.10.10.124 \
--cluster-id=9 \
--log
Cluster-naar-cluster replicatie
$ s9s cluster --create \
--cluster-name=PostgreSQL-c2c \
--cluster-type=postgresql \
--provider-version=13 \
--nodes=10.10.10.125 \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--db-admin=admin \
--db-admin-passwd=********* \
--vendor=postgres \
--remote-cluster-id=9 \
--log
Slaafknooppunt promoten
$ s9s cluster --promote-slave \
--cluster-id=9 \
--nodes='10.10.10.122' \
--log
Conclusie
Upgrades zijn noodzakelijke maar tijdrovende taken, aangezien je je applicatie moet testen om problemen tijdens het proces te voorkomen. Elke keer dat u deze moet upgraden en up-to-date houden, kan het moeilijk zijn om een testomgeving te implementeren zonder enige automatiseringstool.
Met ClusterControl kunt u kleine upgrades uitvoeren vanuit de ClusterControl UI of CLI, of zelfs de testomgeving implementeren om de upgradetaak eenvoudiger en veiliger te maken. Je kunt het ook integreren met verschillende automatiseringstools zoals Ansible, Puppet en meer.