SlideShare une entreprise Scribd logo
1/15
11 décembre 2019
Comment exécuter Postgres sur Docker partie 3
optimadata.nl/blogs/1/nlm8ci-how-to-run-postgres-on-docker-part-3
Craig Healey 11-12-2019 14:23
Catégorie: Blog, Open Source, PostgreSQL, Technologie
Dans un article précédent, j’ai déployé une base de données PostgreSQL dans un
conteneur à partir d’une image standard. Je vais maintenant examiner le déploiement
d’un cluster PostgreSQL. Eh bien, en quelque sorte. PostgreSQL utilise le terme cluster
pour désigner « une collection de bases de données gérées par une seule instance de
serveur PostgreSQL ». Je l’utilise dans un sens plus général, pour faire référence à la
haute disponibilité.
Réplication de base à l’aide d’un projet prédéfini
PostgreSQL a une réplication en continu depuis la version 9.0, où les journaux WAL sont
transférés entre la base de données Master et l’esclave en lecture seule (voir Blog de
SeveralNines pour plus de détails). C’est assez facile à configurer, alors que peut ajouter
Docker? Eh bien, vous pouvez utiliser la commande docker-compose et le fichier docker-
compose.yml pour contrôler un certain nombre de conteneurs Docker. Ainsi, la base de
données Master and Slave sera traitée comme une seule unité.
Je vais baser cela sur Article de Hamed Momeni sur Medium, mais avec quelques
modifications.
2/15
Tout d’abord, nous devons créer un réseau docker afin que nos conteneurs puissent
communiquer entre eux :
docker network create bridge-docker
Ensuite, retirez les fichiers et répertoires de BitBucket :
git clone https://bitbucket.org/CraigOptimaData/docker-pg-
cluster.git
cd dans le répertoire nouvellement créé nommé docker-pg-cluster.
cd docker-pg-cluster
Ensuite, il vous suffit d’exécuter la commande docker-compose up:
docker-compose up
Vous devrez attendre un peu car il a quelques choses à faire lors de la construction des
images du maître et de l’esclave. Vous verrez quelques lignes rouges avertissant qu’il doit
retarder la configuration du paquet, mais c’est normal. Finalement, il finira de construire
les images et les exécutera réellement. À ce stade, il doit afficher les journaux de
pg_master_1 et de pg_slave_1 au fur et à mesure de leur initialisation. Si tout s’est bien
passé, les journaux cesseront de défiler vers le haut de l’écran.
3/15
Si tout s’est bien passé, le maître et l’esclave sont opérationnels. Mais comme nous avons
démarré la commande docker-compose sans l’indicateur détaché, afin que nous puissions
voir les erreurs, nous devons l’arrêter et la redémarrer en arrière-plan. Ctl-C sortira du
conteneur et, par conséquent, l’arrêtera. Exécutez ensuite la commande docker-compose
up avec l’indicateur -d :
docker-compose up -d
Les fichiers docker-compose
Si vous regardez dans le répertoire docker-pg-cluster, vous verrez la structure suivante
:Docker-pg-cluster:
4/15
docker-compose.yml
maître:
Dockerfile
setup-master.sh
esclave:
Dockerfile
setup-slave.sh
Le composant principal est le fichier YAML docker-compose. Comme il s’agit d’un fichier
YAML, vous devez faire attention au formatage. Il est divisé en trois sections, les
déclarations pour le maître, l’esclave et enfin les paramètres généraux. Les données en
vert sont les informations utilisées par docker-compose pour créer les conteneurs. Les
noms des conteneurs se répartissent ainsi :
Docker-compose.yml
Version : « 3 »
Services :
La ligne de génération désigne le sous-répertoire.
Les variables environnementales sont affichées en violet telles que les numéros de port,
les utilisateurs PostgreSQL et les mots de passe.
Puis le nom du réseau (que nous avons créé au départ).
La ligne de redémarrage indique à docker de redémarrer le conteneur s’il s’arrête.
5/15
J’ai donné aux deux conteneurs leurs
propres volumes, avec des noms, il est donc
facile de les retrouver plus tard.
Dockerfile maître
FROM postgres:11
COPY ./setup-master.sh /docker-entrypoint-initdb.d/setup-master.sh
RUN chmod 0666 /docker-entrypoint-initdb.d/setup-master.sh
RUN apt-get update && apt-get --assume-yes install iputils-ping && apt-
get install --assume-yes ssh && apt-get install --assume-yes net-tools
6/15
Le masterDockerfile est simple. Il utilise PostgreSQL 11 car il y a quelques changements
à la réplication dans PostgreSQL 12. Il copie setup-master.sh dans le conteneur et définit
les autorisations appropriées. Ensuite, il installe divers paquets que nous voudrons
utiliser tels que iputils, net-tools et ssh. Vous pourriez faire le cluster avec une image
alpine, qui aurait une empreinte beaucoup plus petite. Mais la dernière étape que je veux
faire est de l’importer dans ControlControl et pour cela j’ai besoin de ssh qui n’est pas
facilement disponible dans Alpine. Si vous faisiez cela dans un environnement réel, vous
voudrez peut-être configurer un serveur ssh, pour cette démonstration, j’ajoute
simplement ssh directement aux conteneurs.
Setup-master.sh
#!/bin/bash
echo « réplication hôte tous 0.0.0.0/0 md5 » >> « $PGDATA/pg_hba.conf"
set -e
psql -v ON_ERROR_STOP=1 --username « $POSTGRES_USER » --dbname
« $POSTGRES_DB » <<-EOSQL CREATE USER $PG_REP_USER REPLICATION LOGIN
CONNECTION LIMIT 100 MOT DE PASSE CHIFFRÉ '$PG_REP_PASSWORD';
CRÉER DES POSTGRES D’UTILISATEUR;
EOSQL
cat >> ${PGDATA}/postgresql.conf <
wal_level = hot_standby
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 8
wal_keep_segments = 8
hot_standby = sur
EOF
Le fichier setup-master.sh ajoute une ligne au fichier PostgreSQL pg_hba.conf pour
permettre la réplication. Encore une fois, pour une installation réelle, vous voudrez peut-
être considérer les implications de sécurité de ceci. Il ajoute ensuite quelques utilisateurs
postgres, l’un tiré des variables environnementales du fichier docker-compose.yml, et
l’autre un utilisateur postgres par défaut. Ensuite, il ajoute quelques lignes au fichier
postgresql.conf en le définissant comme maître.
Dockerfile esclave
FROM postgres:11
RUN apt-get update && apt-get --assume-yes install iputils-ping && apt-
get install --assume-yes ssh && apt-get install --assume-yes net-tools &&
apt-get install --assume-yes gosu
COPY ./setup-slave.sh /setup-slave.sh
RUN chmod +x /setup-slave.sh
ENTRYPOINT ["/setup-slave.sh"]
CMD ["gosu","postgres","postgres"]
Le slaveDockerfile est similaire au fichier maître.
7/15
Setup-slave-sh
#!/bin/bash
if [ ! -s "$PGDATA/PG_VERSION" ]; then
echo "*:*:*:$PG_REP_USER:$PG_REP_PASSWORD" > ~/.pgpass
chmod 0600 ~/.pgpass
until ping -c 1 -W 1 pg_master_1
do
echo "Waiting for master to ping..."
sleep 1s
done
until pg_basebackup -h pg_master_1 -D ${PGDATA} -U ${PG_REP_USER} -
vP -W
do
echo "Waiting for master to connect..."
sleep 1s
done
echo « Host replication all 0.0.0.0/0 md5 » >>
« $PGDATA/pg_hba.conf"
set -e
cat > ${PGDATA}/recovery.conf <
standby_mode = on
primary_conninfo = 'host=pg_master_1 port=5432 user=$PG_REP_USER
password=$PG_REP_PASSWORD’trigger_file =
'/tmp/touch_me_to_promote_to_me_master'
EOF
chown postgres. ${PGDATA} -R
chmod 700 ${PGDATA} -R
fi
sed -i 's/wal_level = hot_standby/wal_level = replica/g'
${PGDATA}/postgresql.conf
exec "$@"
Le fichier setup-slave.sh contient deux ou trois choses à noter. Il configure une boucle
pour vérifier qu’il peut envoyer une commande ping au maître, puis une autre pour
répliquer les données à l’aide de la PG_REP_USER de docker-compose.yml. Assurez-
vous que le nom du maître correspond à celui utilisé pour le service dans le fichier docker-
compose.yml.
Donc, après avoir fait fonctionner votre cluster PostgreSQL et avoir regardé les fichiers
qui l’ont créé, voyons en action. Vous pouvez, bien sûr, vous connecter à PostgreSQL et
exécuter des commandes SQL pour le voir fonctionner. Mais ce blog concerne Docker, pas
PostgreSQL, alors créons un conteneur pgAdmin4 pour afficher notre cluster.
8/15
docker run -p 80:80 --name pgadmin --restart always -e
'PGADMIN_DEFAULT_EMAIL=user@domain.com' -e
'PGADMIN_DEFAULT_PASSWORD=SuperSecret' -d dpage/pgadmin4
Les conteneurs Docker n’ont généralement pas d’interface graphique, donc pour afficher
pgAdmin4, ouvrez-le dans une fenêtre de navigateur. L’adresse IP est celle de votre
docker-machine et le port est 80. Connectez-vous avec l’email et le mot de passe que vous
avez utilisés pour créer le conteneur (user@domain.com et SuperSecret dans mon cas).
Ajoutez les deux serveurs à pgAdmin. La seule différence entre eux sera les noms que vous
leur donnez et les numéros de port. L’adresse IP sera à nouveau celle de votre docker-
machine.
9/15
Connection:
Host name/address: docker-machine IP
Port: 5445 or 5446
Maintenance database: postgres
Username: optima
Password: 123456
Dans les bases de données master, accédez à pg_stat_replication (Bases de données ->
postgres -> Catalogues -> Catalogue PostgreSQL (pg_catalog) -> Vues) et affichez toutes
les lignes. Vous verrez une seule ligne de données si elle se réplique correctement. Vous
pouvez également ajouter des tables et des données dans le gabarit et vérifier qu’elles sont
copiées dans l’esclave.
10/15
Contrôle de cluster
Bien que nous ayons certainement un cluster de bases de données fonctionnel, ce n’est
pas le plus impressionnant visuellement. Alors, que diriez-vous d’ajouter un autre
conteneur avec ClusterControl de SeveralNines, qui est livré avec une licence d’entreprise
d’essai de 30 jours avant de revenir à l’édition communautaire:
docker run -d --name clustercontrol --restart always --network
bridge-docker -p 5000:80 severalnines/clustercontrol
Encore une fois, j’ai ajouté un drapeau pour redémarrer le conteneur s’il s’arrête, et le
mettre sur le même réseau que les autres conteneurs. Ouvrez un autre onglet de
navigateur sur la même adresse IP que votre docker-machine, et le port 5000 (par
exemple 192.168.99.105:5000/clustercontrol). Il vous demandera de fournir un e-mail et
un mot de passe pour vous connecter et pour les détails d’inscription, mais ceux-ci n’ont
pas besoin d’être valides. Avant de pouvoir ajouter les serveurs à ClusterControl, nous
devons configurer ssh sur les serveurs.
Connectez-vous au conteneur ClusterControl pour trouver son adresse IP et définir le mot
de passe racine.
docker exec -it clustercontrol bash
passwd
ip addr show
11/15
Maintenant, connectez-vous aux deux serveurs
docker exec -it docker-pg-cluster_pg_master_1_1 bash
docker exec -it docker-pg-cluster_pg_slave_1_1 bash
Pour vous permettre de vous connecter en tant que root, exécutez ce qui suit :
sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g'
/etc/ssh/sshd_config
puis démarrez SSH
service ssh start
Définir le mot de passe root
passwd
et trouver les adresses IP des serveurs
ifconfig
12/15
Créer une clé ssh sur chacun des serveurs
mkdir -p $HOME/.ssh
chmod 0700 $HOME/.ssh
ssh-keygen -t rsa
13/15
ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@[ClusterControl IP
address]
ssh root@[ClusterControl IP address]
Sur le conteneur ClusterControl
ssh-copy-id [master IP address]
password
ssh [master IP address]
ssh-copy-id [slave IP address]
password
ssh [slave IP address]
Dans ClusterControl, ajoutez le cluster :
Import
PostgreSQL
SSH User:root
Cluster Name:blog3a
Server port: 5432 NOTE, NOT THE CONTAINER’S PORT
User: optima
Password: 123456
Version:11
Basedir: /var/lib/postgresql/data
Add Nodes:IP address of the master and slave, pressing after each
one
Import
Patientez une minute pendant l’exécution de la tâche d’importation
14/15
Dans l’onglet Vue d’ensemble, vous pouvez désormais facilement voir l’état de la
réplication.
15/15
Vous avez maintenant un cluster de bases de données PostgreSQL 2 à 11 nœuds avec
pgAdmin4 et ClusterControl exécutés dans 4 conteneurs. Jouez avec le démarrage et
l’arrêt et voyez à quel point il est facile de créer de nouveaux clusters.
Envie d’en savoir plus ?
Ce n’est certainement pas tout ce que Docker peut offrir, mais j’espère que c’est suffisant
pour vous aider à démarrer. Vous souhaitez en savoir plus ou avez besoin d’aide ou de
conseils en utilisant ou implémentant PostgreSQL, Docker, Kubernetes et/ou
ClusterControl, n’hésitez pas à nous contacter ! Nous sommes heureux de vous aider.
Blog Comment exécuter Postgres sur Docker partie 1
Blog Comment exécuter Postgres sur Docker partie 2
Retour à l’aperçu du blog
Répondre
Publicité

Contenu connexe

Similaire à optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf (20)

Synthese
SyntheseSynthese
Synthese
Alexis Pelhâte
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busybox
Ayoub R.
 
05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf
bibouechristian
 
05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf
bibouechristian
 
Rapport Kernel Linux - Configuration – Compilation & installation
Rapport Kernel Linux - Configuration –  Compilation & installationRapport Kernel Linux - Configuration –  Compilation & installation
Rapport Kernel Linux - Configuration – Compilation & installation
Ayoub R.
 
Gestion et surveillance du reseau syslogng
Gestion et surveillance du reseau  syslogngGestion et surveillance du reseau  syslogng
Gestion et surveillance du reseau syslogng
Kiemde Franck
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
Web à Québec
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printemps
Julien Maitrehenry
 
SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008
Sonny Brabez
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck
 
[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco
[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco
[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco
PASCAL Jean Marie
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
Thierry Gayet
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
Ayoub R.
 
Install arch ultrabook full luks ssd
Install arch ultrabook full luks ssdInstall arch ultrabook full luks ssd
Install arch ultrabook full luks ssd
Anthony Le Goff
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
Khalid ALLILI
 
rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...
rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...
rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...
PLAYAFIFI
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busybox
Ayoub R.
 
05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf
bibouechristian
 
05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf05 - creation-playbook-ansible-stack-lamp.pdf
05 - creation-playbook-ansible-stack-lamp.pdf
bibouechristian
 
Rapport Kernel Linux - Configuration – Compilation & installation
Rapport Kernel Linux - Configuration –  Compilation & installationRapport Kernel Linux - Configuration –  Compilation & installation
Rapport Kernel Linux - Configuration – Compilation & installation
Ayoub R.
 
Gestion et surveillance du reseau syslogng
Gestion et surveillance du reseau  syslogngGestion et surveillance du reseau  syslogng
Gestion et surveillance du reseau syslogng
Kiemde Franck
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
Web à Québec
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printemps
Julien Maitrehenry
 
SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008
Sonny Brabez
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck
 
[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco
[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco
[DRAFT] Utiliser VmWare pour l'installation d'un Alfresco
PASCAL Jean Marie
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
Thierry Gayet
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
Ayoub R.
 
Install arch ultrabook full luks ssd
Install arch ultrabook full luks ssdInstall arch ultrabook full luks ssd
Install arch ultrabook full luks ssd
Anthony Le Goff
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
Khalid ALLILI
 
rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...
rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...
rapportSAArapportrapport_tp3rapport_tp3rapport_tp3rapport_tp3rapport_tp3_tp3r...
PLAYAFIFI
 

Plus de Pascal Ponzoni (6)

tenthplanet.in-Odoo Accounting.pdf
tenthplanet.in-Odoo Accounting.pdftenthplanet.in-Odoo Accounting.pdf
tenthplanet.in-Odoo Accounting.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Manufacturing Management.pdf
tenthplanet.in-Odoo Manufacturing Management.pdftenthplanet.in-Odoo Manufacturing Management.pdf
tenthplanet.in-Odoo Manufacturing Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Timesheet Management.pdf
tenthplanet.in-Odoo Timesheet Management.pdftenthplanet.in-Odoo Timesheet Management.pdf
tenthplanet.in-Odoo Timesheet Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Employee Management.pdf
tenthplanet.in-Odoo Employee Management.pdftenthplanet.in-Odoo Employee Management.pdf
tenthplanet.in-Odoo Employee Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Expense Management.pdf
tenthplanet.in-Odoo Expense Management.pdftenthplanet.in-Odoo Expense Management.pdf
tenthplanet.in-Odoo Expense Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Project Management.pdf
tenthplanet.in-Odoo Project Management.pdftenthplanet.in-Odoo Project Management.pdf
tenthplanet.in-Odoo Project Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Accounting.pdf
tenthplanet.in-Odoo Accounting.pdftenthplanet.in-Odoo Accounting.pdf
tenthplanet.in-Odoo Accounting.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Manufacturing Management.pdf
tenthplanet.in-Odoo Manufacturing Management.pdftenthplanet.in-Odoo Manufacturing Management.pdf
tenthplanet.in-Odoo Manufacturing Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Timesheet Management.pdf
tenthplanet.in-Odoo Timesheet Management.pdftenthplanet.in-Odoo Timesheet Management.pdf
tenthplanet.in-Odoo Timesheet Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Employee Management.pdf
tenthplanet.in-Odoo Employee Management.pdftenthplanet.in-Odoo Employee Management.pdf
tenthplanet.in-Odoo Employee Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Expense Management.pdf
tenthplanet.in-Odoo Expense Management.pdftenthplanet.in-Odoo Expense Management.pdf
tenthplanet.in-Odoo Expense Management.pdf
Pascal Ponzoni
 
tenthplanet.in-Odoo Project Management.pdf
tenthplanet.in-Odoo Project Management.pdftenthplanet.in-Odoo Project Management.pdf
tenthplanet.in-Odoo Project Management.pdf
Pascal Ponzoni
 
Publicité

Dernier (9)

Enquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'Azur
Enquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'AzurEnquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'Azur
Enquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'Azur
France Travail
 
Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024
Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024
Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024
France Travail
 
2025.04.18.Presentation Reseau EQUINS.pptx
2025.04.18.Presentation Reseau EQUINS.pptx2025.04.18.Presentation Reseau EQUINS.pptx
2025.04.18.Presentation Reseau EQUINS.pptx
idelewebmestre
 
Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...
Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...
Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...
France Travail
 
SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...
SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...
SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...
IsmailMOUASS
 
ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...
ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...
ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...
contact Elabe
 
Baromètre "Observatoire politique" Elabe / Les Echos
Baromètre "Observatoire politique" Elabe / Les EchosBaromètre "Observatoire politique" Elabe / Les Echos
Baromètre "Observatoire politique" Elabe / Les Echos
contact Elabe
 
Atelier de cloture 3 CERAD ecovadis presentation
Atelier de cloture 3 CERAD ecovadis presentationAtelier de cloture 3 CERAD ecovadis presentation
Atelier de cloture 3 CERAD ecovadis presentation
Patil Amit
 
inbound999999999999⁹99999999999999999.pdf
inbound999999999999⁹99999999999999999.pdfinbound999999999999⁹99999999999999999.pdf
inbound999999999999⁹99999999999999999.pdf
saharmissaoui014
 
Enquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'Azur
Enquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'AzurEnquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'Azur
Enquête besoins en main d’oeuvre 2025 Région Provence-Alpes-Côte d'Azur
France Travail
 
Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024
Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024
Part des demandeurs d'emploi indemnisables : situation au 30 septembre 2024
France Travail
 
2025.04.18.Presentation Reseau EQUINS.pptx
2025.04.18.Presentation Reseau EQUINS.pptx2025.04.18.Presentation Reseau EQUINS.pptx
2025.04.18.Presentation Reseau EQUINS.pptx
idelewebmestre
 
Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...
Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...
Montant moyen du droit d'allocation chômage versé aux demandeurs indemnisés a...
France Travail
 
SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...
SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...
SQL_mcd_mld_mod_tout en un merci pour votre soutien et partagez vous aussi l'...
IsmailMOUASS
 
ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...
ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...
ELABE / Questions d'actualité "Les Français et le système de santé" Elabe / L...
contact Elabe
 
Baromètre "Observatoire politique" Elabe / Les Echos
Baromètre "Observatoire politique" Elabe / Les EchosBaromètre "Observatoire politique" Elabe / Les Echos
Baromètre "Observatoire politique" Elabe / Les Echos
contact Elabe
 
Atelier de cloture 3 CERAD ecovadis presentation
Atelier de cloture 3 CERAD ecovadis presentationAtelier de cloture 3 CERAD ecovadis presentation
Atelier de cloture 3 CERAD ecovadis presentation
Patil Amit
 
inbound999999999999⁹99999999999999999.pdf
inbound999999999999⁹99999999999999999.pdfinbound999999999999⁹99999999999999999.pdf
inbound999999999999⁹99999999999999999.pdf
saharmissaoui014
 
Publicité

optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf

  • 1. 1/15 11 décembre 2019 Comment exécuter Postgres sur Docker partie 3 optimadata.nl/blogs/1/nlm8ci-how-to-run-postgres-on-docker-part-3 Craig Healey 11-12-2019 14:23 Catégorie: Blog, Open Source, PostgreSQL, Technologie Dans un article précédent, j’ai déployé une base de données PostgreSQL dans un conteneur à partir d’une image standard. Je vais maintenant examiner le déploiement d’un cluster PostgreSQL. Eh bien, en quelque sorte. PostgreSQL utilise le terme cluster pour désigner « une collection de bases de données gérées par une seule instance de serveur PostgreSQL ». Je l’utilise dans un sens plus général, pour faire référence à la haute disponibilité. Réplication de base à l’aide d’un projet prédéfini PostgreSQL a une réplication en continu depuis la version 9.0, où les journaux WAL sont transférés entre la base de données Master et l’esclave en lecture seule (voir Blog de SeveralNines pour plus de détails). C’est assez facile à configurer, alors que peut ajouter Docker? Eh bien, vous pouvez utiliser la commande docker-compose et le fichier docker- compose.yml pour contrôler un certain nombre de conteneurs Docker. Ainsi, la base de données Master and Slave sera traitée comme une seule unité. Je vais baser cela sur Article de Hamed Momeni sur Medium, mais avec quelques modifications.
  • 2. 2/15 Tout d’abord, nous devons créer un réseau docker afin que nos conteneurs puissent communiquer entre eux : docker network create bridge-docker Ensuite, retirez les fichiers et répertoires de BitBucket : git clone https://bitbucket.org/CraigOptimaData/docker-pg- cluster.git cd dans le répertoire nouvellement créé nommé docker-pg-cluster. cd docker-pg-cluster Ensuite, il vous suffit d’exécuter la commande docker-compose up: docker-compose up Vous devrez attendre un peu car il a quelques choses à faire lors de la construction des images du maître et de l’esclave. Vous verrez quelques lignes rouges avertissant qu’il doit retarder la configuration du paquet, mais c’est normal. Finalement, il finira de construire les images et les exécutera réellement. À ce stade, il doit afficher les journaux de pg_master_1 et de pg_slave_1 au fur et à mesure de leur initialisation. Si tout s’est bien passé, les journaux cesseront de défiler vers le haut de l’écran.
  • 3. 3/15 Si tout s’est bien passé, le maître et l’esclave sont opérationnels. Mais comme nous avons démarré la commande docker-compose sans l’indicateur détaché, afin que nous puissions voir les erreurs, nous devons l’arrêter et la redémarrer en arrière-plan. Ctl-C sortira du conteneur et, par conséquent, l’arrêtera. Exécutez ensuite la commande docker-compose up avec l’indicateur -d : docker-compose up -d Les fichiers docker-compose Si vous regardez dans le répertoire docker-pg-cluster, vous verrez la structure suivante :Docker-pg-cluster:
  • 4. 4/15 docker-compose.yml maître: Dockerfile setup-master.sh esclave: Dockerfile setup-slave.sh Le composant principal est le fichier YAML docker-compose. Comme il s’agit d’un fichier YAML, vous devez faire attention au formatage. Il est divisé en trois sections, les déclarations pour le maître, l’esclave et enfin les paramètres généraux. Les données en vert sont les informations utilisées par docker-compose pour créer les conteneurs. Les noms des conteneurs se répartissent ainsi : Docker-compose.yml Version : « 3 » Services : La ligne de génération désigne le sous-répertoire. Les variables environnementales sont affichées en violet telles que les numéros de port, les utilisateurs PostgreSQL et les mots de passe. Puis le nom du réseau (que nous avons créé au départ). La ligne de redémarrage indique à docker de redémarrer le conteneur s’il s’arrête.
  • 5. 5/15 J’ai donné aux deux conteneurs leurs propres volumes, avec des noms, il est donc facile de les retrouver plus tard. Dockerfile maître FROM postgres:11 COPY ./setup-master.sh /docker-entrypoint-initdb.d/setup-master.sh RUN chmod 0666 /docker-entrypoint-initdb.d/setup-master.sh RUN apt-get update && apt-get --assume-yes install iputils-ping && apt- get install --assume-yes ssh && apt-get install --assume-yes net-tools
  • 6. 6/15 Le masterDockerfile est simple. Il utilise PostgreSQL 11 car il y a quelques changements à la réplication dans PostgreSQL 12. Il copie setup-master.sh dans le conteneur et définit les autorisations appropriées. Ensuite, il installe divers paquets que nous voudrons utiliser tels que iputils, net-tools et ssh. Vous pourriez faire le cluster avec une image alpine, qui aurait une empreinte beaucoup plus petite. Mais la dernière étape que je veux faire est de l’importer dans ControlControl et pour cela j’ai besoin de ssh qui n’est pas facilement disponible dans Alpine. Si vous faisiez cela dans un environnement réel, vous voudrez peut-être configurer un serveur ssh, pour cette démonstration, j’ajoute simplement ssh directement aux conteneurs. Setup-master.sh #!/bin/bash echo « réplication hôte tous 0.0.0.0/0 md5 » >> « $PGDATA/pg_hba.conf" set -e psql -v ON_ERROR_STOP=1 --username « $POSTGRES_USER » --dbname « $POSTGRES_DB » <<-EOSQL CREATE USER $PG_REP_USER REPLICATION LOGIN CONNECTION LIMIT 100 MOT DE PASSE CHIFFRÉ '$PG_REP_PASSWORD'; CRÉER DES POSTGRES D’UTILISATEUR; EOSQL cat >> ${PGDATA}/postgresql.conf < wal_level = hot_standby archive_mode = on archive_command = 'cd .' max_wal_senders = 8 wal_keep_segments = 8 hot_standby = sur EOF Le fichier setup-master.sh ajoute une ligne au fichier PostgreSQL pg_hba.conf pour permettre la réplication. Encore une fois, pour une installation réelle, vous voudrez peut- être considérer les implications de sécurité de ceci. Il ajoute ensuite quelques utilisateurs postgres, l’un tiré des variables environnementales du fichier docker-compose.yml, et l’autre un utilisateur postgres par défaut. Ensuite, il ajoute quelques lignes au fichier postgresql.conf en le définissant comme maître. Dockerfile esclave FROM postgres:11 RUN apt-get update && apt-get --assume-yes install iputils-ping && apt- get install --assume-yes ssh && apt-get install --assume-yes net-tools && apt-get install --assume-yes gosu COPY ./setup-slave.sh /setup-slave.sh RUN chmod +x /setup-slave.sh ENTRYPOINT ["/setup-slave.sh"] CMD ["gosu","postgres","postgres"] Le slaveDockerfile est similaire au fichier maître.
  • 7. 7/15 Setup-slave-sh #!/bin/bash if [ ! -s "$PGDATA/PG_VERSION" ]; then echo "*:*:*:$PG_REP_USER:$PG_REP_PASSWORD" > ~/.pgpass chmod 0600 ~/.pgpass until ping -c 1 -W 1 pg_master_1 do echo "Waiting for master to ping..." sleep 1s done until pg_basebackup -h pg_master_1 -D ${PGDATA} -U ${PG_REP_USER} - vP -W do echo "Waiting for master to connect..." sleep 1s done echo « Host replication all 0.0.0.0/0 md5 » >> « $PGDATA/pg_hba.conf" set -e cat > ${PGDATA}/recovery.conf < standby_mode = on primary_conninfo = 'host=pg_master_1 port=5432 user=$PG_REP_USER password=$PG_REP_PASSWORD’trigger_file = '/tmp/touch_me_to_promote_to_me_master' EOF chown postgres. ${PGDATA} -R chmod 700 ${PGDATA} -R fi sed -i 's/wal_level = hot_standby/wal_level = replica/g' ${PGDATA}/postgresql.conf exec "$@" Le fichier setup-slave.sh contient deux ou trois choses à noter. Il configure une boucle pour vérifier qu’il peut envoyer une commande ping au maître, puis une autre pour répliquer les données à l’aide de la PG_REP_USER de docker-compose.yml. Assurez- vous que le nom du maître correspond à celui utilisé pour le service dans le fichier docker- compose.yml. Donc, après avoir fait fonctionner votre cluster PostgreSQL et avoir regardé les fichiers qui l’ont créé, voyons en action. Vous pouvez, bien sûr, vous connecter à PostgreSQL et exécuter des commandes SQL pour le voir fonctionner. Mais ce blog concerne Docker, pas PostgreSQL, alors créons un conteneur pgAdmin4 pour afficher notre cluster.
  • 8. 8/15 docker run -p 80:80 --name pgadmin --restart always -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' -d dpage/pgadmin4 Les conteneurs Docker n’ont généralement pas d’interface graphique, donc pour afficher pgAdmin4, ouvrez-le dans une fenêtre de navigateur. L’adresse IP est celle de votre docker-machine et le port est 80. Connectez-vous avec l’email et le mot de passe que vous avez utilisés pour créer le conteneur ([email protected] et SuperSecret dans mon cas). Ajoutez les deux serveurs à pgAdmin. La seule différence entre eux sera les noms que vous leur donnez et les numéros de port. L’adresse IP sera à nouveau celle de votre docker- machine.
  • 9. 9/15 Connection: Host name/address: docker-machine IP Port: 5445 or 5446 Maintenance database: postgres Username: optima Password: 123456 Dans les bases de données master, accédez à pg_stat_replication (Bases de données -> postgres -> Catalogues -> Catalogue PostgreSQL (pg_catalog) -> Vues) et affichez toutes les lignes. Vous verrez une seule ligne de données si elle se réplique correctement. Vous pouvez également ajouter des tables et des données dans le gabarit et vérifier qu’elles sont copiées dans l’esclave.
  • 10. 10/15 Contrôle de cluster Bien que nous ayons certainement un cluster de bases de données fonctionnel, ce n’est pas le plus impressionnant visuellement. Alors, que diriez-vous d’ajouter un autre conteneur avec ClusterControl de SeveralNines, qui est livré avec une licence d’entreprise d’essai de 30 jours avant de revenir à l’édition communautaire: docker run -d --name clustercontrol --restart always --network bridge-docker -p 5000:80 severalnines/clustercontrol Encore une fois, j’ai ajouté un drapeau pour redémarrer le conteneur s’il s’arrête, et le mettre sur le même réseau que les autres conteneurs. Ouvrez un autre onglet de navigateur sur la même adresse IP que votre docker-machine, et le port 5000 (par exemple 192.168.99.105:5000/clustercontrol). Il vous demandera de fournir un e-mail et un mot de passe pour vous connecter et pour les détails d’inscription, mais ceux-ci n’ont pas besoin d’être valides. Avant de pouvoir ajouter les serveurs à ClusterControl, nous devons configurer ssh sur les serveurs. Connectez-vous au conteneur ClusterControl pour trouver son adresse IP et définir le mot de passe racine. docker exec -it clustercontrol bash passwd ip addr show
  • 11. 11/15 Maintenant, connectez-vous aux deux serveurs docker exec -it docker-pg-cluster_pg_master_1_1 bash docker exec -it docker-pg-cluster_pg_slave_1_1 bash Pour vous permettre de vous connecter en tant que root, exécutez ce qui suit : sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config puis démarrez SSH service ssh start Définir le mot de passe root passwd et trouver les adresses IP des serveurs ifconfig
  • 12. 12/15 Créer une clé ssh sur chacun des serveurs mkdir -p $HOME/.ssh chmod 0700 $HOME/.ssh ssh-keygen -t rsa
  • 13. 13/15 ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@[ClusterControl IP address] ssh root@[ClusterControl IP address] Sur le conteneur ClusterControl ssh-copy-id [master IP address] password ssh [master IP address] ssh-copy-id [slave IP address] password ssh [slave IP address] Dans ClusterControl, ajoutez le cluster : Import PostgreSQL SSH User:root Cluster Name:blog3a Server port: 5432 NOTE, NOT THE CONTAINER’S PORT User: optima Password: 123456 Version:11 Basedir: /var/lib/postgresql/data Add Nodes:IP address of the master and slave, pressing after each one Import Patientez une minute pendant l’exécution de la tâche d’importation
  • 14. 14/15 Dans l’onglet Vue d’ensemble, vous pouvez désormais facilement voir l’état de la réplication.
  • 15. 15/15 Vous avez maintenant un cluster de bases de données PostgreSQL 2 à 11 nœuds avec pgAdmin4 et ClusterControl exécutés dans 4 conteneurs. Jouez avec le démarrage et l’arrêt et voyez à quel point il est facile de créer de nouveaux clusters. Envie d’en savoir plus ? Ce n’est certainement pas tout ce que Docker peut offrir, mais j’espère que c’est suffisant pour vous aider à démarrer. Vous souhaitez en savoir plus ou avez besoin d’aide ou de conseils en utilisant ou implémentant PostgreSQL, Docker, Kubernetes et/ou ClusterControl, n’hésitez pas à nous contacter ! Nous sommes heureux de vous aider. Blog Comment exécuter Postgres sur Docker partie 1 Blog Comment exécuter Postgres sur Docker partie 2 Retour à l’aperçu du blog Répondre