NLEN
Direct technisch advies?
Home > Blog

How to run Postgres on Docker deel 3

Craig Healey 11-12-2019 10:17 AM
Categories: BLOG, DBMS, Open Source, PostgreSQL, Technisch

In een vorige blogpost heb ik uitgelegd hoe je een PostgreSQL-database in een container kunt implementeren vanuit een standaard-image. In deze post bekijk ik de implementatie van een PostgreSQL-cluster. Nou ja, soort van…. PostgreSQL gebruikt de term cluster om te verwijzen naar ‘een verzameling databases beheerd door een enkele PostgreSQL-serverinstantie’. Ik gebruik het in meer algemene zin om te verwijzen naar High Availability.

Basis replicatie met behulp van een pre-built project

PostgreSQL beschikt sinds versie 9.0 over streamingreplicatie, waarbij de WAL-logs worden overgedragen tussen de masterdatabase en de read-only slave (meer informatie vind je hier). Het is vrij eenvoudig in te stellen, dus wat Docker toevoegt? Je kunt de docker-compose-opdracht en het bestand docker-compose.yml gebruiken om een aantal docker-containers te besturen. De master- en slave-database wordt dus als één eenheid behandeld.

Ik ga hiervoor Hamed Momeni’s Medium post, gebruiken maar met een aantal veranderingen.

Ten eerste moet er een dockernetwerk worden gecreëerd zodat onze containers met elkaar kunnen communiceren:

docker network create bridge-docker

Vervolgens halen wij de bestanden en directories uit BitBucket:

git clone https://bitbucket.org/CraigOptimaData/docker-pg-cluster.git

Verander directory naar de nieuw gecreëerde directory die docker-pg-cluster heet.

cd docker-pg-cluster

Daarna kun je gewoon de docker-compose up command gebruiken:

docker-compose up

Je moet nu even geduld hebben, want er moeten een aantal zaken gebeuren tijden het bouwen van de master- en slave-images. Je ziet een paar rode signalen die waarschuwen dat de pakketconfiguratie moet worden vertraagd. Dat is normaal. Uiteindelijk zijn de images klaar en worden ze daadwerkelijk uitgevoerd. Op dit punt moeten de logs van pg_master_1 en pg_slave_1 worden weergegeven terwijl ze worden geïnitialiseerd. Als alles goed is gegaan, zullen de logs niet meer omhoog scrollen.

Als dat het geval is zijn zowel master als slave operationeel. Maar omdat we de opdracht docker-compose zijn gestart zonder de flag, om fouten te kunnen zien, moeten we deze afsluiten en opnieuw opstarten op de achtergrond. Met Ctrl-C verlaten we de container waardoor deze ook stopt. Vervolgens voeren we de opdracht ‘docker compose up’ uit met de flag -d:

docker-compose up -d

The docker-compose files

Als je kijkt naar de docker-pg-cluster directory, dan zie je de volgende structuur:

Docker-pg-cluster:
docker-compose.yml

master:

Dockerfile
setup-master.sh

slave:

Dockerfile
setup-slave.sh

Het hoofdbestanddeel is het YAML-bestand dat is samengesteld uit de docker. Omdat het een YAML-bestand is, moet je voorzichtig zijn met de opmaak. Het is opgesplitst in drie secties, de declarations voor de master, de slave, en tot slot general settings. De data in het groen zijn de data die docker-compose gebruikt om de containers te maken. De containernamen zijn als volgt:

Docker-compose.yml

version: "3"
services: