Skip to content

Commit fe2f1c7

Browse files
committed
Changement de port pour le cluster
1 parent 47d303d commit fe2f1c7

File tree

1 file changed

+55
-49
lines changed

1 file changed

+55
-49
lines changed

content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Prérequis :
3131

3232
- QGIS > 3.20
3333
- des droits d'installation
34-
- de préférence un PC sous Linux (ou via [WSL](/articles/2020/2020-10-28_gdal_windows_subsystem_linux_wsl/)) mais l'ensemble des outils sont aussi disponibles sur Windows et MacOS
34+
- de préférence un PC sous Linux (ou via [WSL](/articles/2020/2020-10-28_gdal_windows_subsystem_linux_wsl/)) mais les outils utilisés sont tous disponibles sur Windows et MacOS
3535

3636
## Introduction
3737

@@ -105,19 +105,19 @@ C'est parti pour la création d'un cluster aux ~~petits oignons~~ petites olives
105105
```bash
106106
> grep -H '^port' /etc/postgresql/*/main/postgresql.conf
107107
/etc/postgresql/12/main/postgresql.conf:port = 5432 # (change requires restart)
108-
/etc/postgresql/14/main/postgresql.conf:port = 5434 # (change requires restart)
108+
/etc/postgresql/14/main/postgresql.conf:port = 54342 # (change requires restart)
109109
```
110110

111-
Ou :
111+
Puis les clusters existants :
112112

113113
```bash
114114
> pg_lsclusters
115115
Ver Cluster Port Status Owner Data directory Log file
116116
12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
117-
14 main 5434 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
117+
14 main 54342 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
118118
```
119119

120-
L'idée c'est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)).
120+
L'objectif est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)).
121121

122122
Pour cela, on va s'appuyer sur deux éléments :
123123

@@ -128,9 +128,9 @@ Pour cela, on va s'appuyer sur deux éléments :
128128

129129
C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent. Notez que je réduis certains paramètres pour garder la main sur mon interface graphique et qu'en cas de valeurs différentes entre PGTune et osm2pgsql, j'ai choisi de donner la priorité à ce dernier :
130130

131-
```bash
131+
```bash title="Commande multi-ligne pour créer un cluster PostgreSQL"
132132
sudo pg_createcluster 14 ferrargis \
133-
--port=5434 \
133+
--port=54342 \
134134
--pgoption autovacuum_work_mem='2GB' \
135135
--pgoption checkpoint_completion_target='0.9' \
136136
--pgoption checkpoint_timeout='60min' \
@@ -145,15 +145,17 @@ sudo pg_createcluster 14 ferrargis \
145145
--pgoption max_parallel_workers_per_gather='6' \
146146
--pgoption max_parallel_workers='10' \
147147
--pgoption max_parallel_maintenance_workers='4' \
148+
--pgoption max_wal_senders='0' \
148149
--pgoption random_page_cost='1.1' \
149150
--pgoption shared_buffers='1GB' \
150151
--pgoption wal_buffers='16MB' \
151152
--pgoption wal_level='minimal' \
152-
--pgoption wal_senders='0' \
153153
--pgoption work_mem='50MB' \
154154
-- --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer
155155
```
156156

157+
<!-- 1. Le port doit être différent de ceux déjà utilisés par les autres clusters. -->
158+
157159
<!-- markdownlint-disable MD046 -->
158160
??? example "Le détail de l'exécution sur ma machine"
159161

@@ -187,50 +189,53 @@ sudo pg_createcluster 14 ferrargis \
187189
exécution de l'initialisation après bootstrap... ok
188190
synchronisation des données sur disque... ok
189191
Ver Cluster Port Status Owner Data directory Log file
190-
14 ferrargis 5434 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log
192+
14 ferrargis 54342 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log
191193
```
192194
<!-- markdownlint-enable MD046 -->
193195

194-
Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction sql `ALTER SYSTEM` soit en éditant le `postgresql.conf` :
196+
Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction SQL `ALTER SYSTEM`, soit en éditant le `postgresql.conf` :
195197

196198
```bash
197-
sudo nano /etc/postgresql/14/main/postgresql.conf
199+
sudo nano /etc/postgresql/14/ferrargis/postgresql.conf
198200
# puis redémarrer le serveur
199-
sudo systemctl restart postgresql@14-main
201+
sudo systemctl restart postgresql@14-ferrargis
200202
```
201203

202204
Démarrer l'instance :
203205

204206
```bash
205-
sudo systemctl start postgresql@14-main
207+
sudo systemctl start postgresql@14-ferrargis
206208
# ou
207-
sudo pg_ctlcluster 14 main start
209+
sudo pg_ctlcluster 14 ferrargis start
208210
```
209211

210212
!!! tip "Astuce pour avoir une Calzone réussie à chaque installation"
211213
Il est possible de changer le comportement des scripts de post-installation du packaging PostgreSQL en modifiant le fichier `/etc/postgresql-common/createcluster.conf`, soit pour désactiver la création automatisée du cluster `main`, soit pour en modifier les paramètres par défaut (par exemple avec `initdb_options = '--data-checksums --lc-messages=C'`).
212214

213215
#### Créer le rôle et gérer l'accès
214216

215-
Création du rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) :
217+
Comme on travaille à la maison, on va se faciliter la vie et créer un rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) :
216218

217219
```bash
218-
sudo -u postgres createuser -p 5434 --createdb --pwprompt --superuser "$(whoami)"
220+
sudo -u postgres createuser -p 54342 --createdb --pwprompt --superuser "$(whoami)"
219221
```
220222

221-
Ajout au `.pgpass` pour faciliter le travail :
223+
De façon à ne pas stocker de mot de passe en clair dans les applications clientes comme QGIS et pour se faciliter la vie, on se crée un fichier `.pgpass` dans le répertoire personnel de l'utilisateur :
222224

223225
```bash
224-
echo "localhost:5434:*:$(whoami):motdepasse_assigned_a_mon_utilisateur" >> ~/.pgpass
226+
echo "localhost:54342:*:$(whoami):motdepasse_assigned_a_mon_utilisateur" >> ~/.pgpass
225227
```
226228

227-
Référencer la connexion au `.pg_service.conf` :
229+
De même, de façon à garder la connexion la plus générique possible dans le but de rendre la suite le plus facilement reproductible possible, on stocke les paramètres de connexion dans le fichier `PGSERVICE` (voir [la doc officielle de PostgreSQL](https://www.postgresql.org/docs/current/libpq-pgservice.html) et [celle de QGIS](https://docs.qgis.org/3.22/fr/docs/user_manual/managing_data_source/opening_data.html#pg-service-file)) :
230+
231+
- emplacement par défaut : `~/.pg_service.conf` (Linux) ou `%APPDATA%/postgresql/.pg_service.conf` (Windows)
232+
- ou personnalisable via une variable d'environnement `PGSERVICEFILE` pointant sur le fichier directement (nommage libre) ou `PGSYSCONFDIR` pointant sur le répertoire où trouver le fichier (qui doit forcément être nommé `pg_service.conf`)
228233

229234
```ini
230235
[local_ferrargis]
231236
dbname=osm
232237
host=localhost
233-
port=5434
238+
port=54342
234239
```
235240

236241
#### Créer la base de données
@@ -240,13 +245,13 @@ port=5434
240245
Créer la base de données :
241246

242247
```bash
243-
createdb --owner $(whoami) --port 5434 --encoding=UTF8 osm
248+
createdb --owner $(whoami) --port 54342 --encoding=UTF8 osm
244249
```
245250

246251
S'y connecter pour tester puis ressortir :
247252

248253
```bash
249-
> psql -p 5434 -U $(whoami) osm
254+
> psql -p 54342 -U $(whoami) osm
250255
psql (14.3 (Ubuntu 14.3-1.pgdg20.04+1))
251256
Saisissez « help » pour l'aide.
252257
@@ -257,13 +262,13 @@ osm=# \q
257262
Activer PostGIS :
258263
259264
```bash
260-
psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION postgis;"
265+
psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION postgis;"
261266
```
262267
263268
Activer HSTore :
264269
265270
```bash
266-
psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION hstore;"
271+
psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION hstore;"
267272
```
268273
269274
----
@@ -274,9 +279,9 @@ psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION hstore;"
274279
275280
![logo OpenStreetMap](https://cdn.geotribu.fr/img/logos-icones/OpenStreetMap/Openstreetmap.png "logo OpenStreetMap"){: .img-rdp-news-thumb }
276281
277-
Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de bornes](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai ) (de frontières, pas de ministre) de nos jours.
282+
Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de bornes](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai) (de frontières, pas de ministre) de nos jours ! :smile:
278283
279-
<https://download.geofabrik.de/europe/belgium.html>
284+
Un petit tour par GeoFabrik pour télécharger les données de la Belgique : <https://download.geofabrik.de/europe/belgium.html>.
280285
281286
On peut également utiliser un outil en ligne de commande, par exemple `wget` avec l'option `-N` qui permet de télécharger uniquement si le fichier distant (ici le serveur GeoFabrik) est plus récent par rapport à la version locale (sur votre machine) :
282287

@@ -288,17 +293,17 @@ wget -N https://download.geofabrik.de/europe/belgium-latest.osm.pbf -P /tmp/osmd
288293

289294
![logo Osmium Tool](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osmium.svg "logo Osmium Tool"){: .img-rdp-news-thumb }
290295

291-
Si on craint de manquer d'espace disque, de puissance ou que vous ciblez une zone en particulier et qu'on ne souhaite pas charger une région ou un département entier pour rien, on peut découper les données avec une emprise avant de les importer avec un outil comme Osmium par exemple.
296+
Si on craint de manquer d'espace disque, de puissance ou qu'on cible une zone restreinte en particulier, on peut découper les données avec une emprise avant de les importer avec un outil comme Osmium par exemple.
292297

293298
On installe [Osmium](https://osmcode.org/osmium-tool/) :
294299

295300
```sh
296301
sudo apt install osmium-tool
297302
```
298303

299-
Et on découpe sur la zone qui nous intéresse :
304+
Et on découpe sur la zone qui nous intéresse, par exemple Bruxelles :
300305

301-
```bash
306+
```sh
302307
osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm.pbf -o /tmp/osmdata/belgium/brussels.osm.pbf
303308
```
304309

@@ -308,7 +313,9 @@ osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm
308313
### Import des données
309314
310315
```bash
311-
osm2pgsql --create --database osm --port 5434 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf
316+
osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf
317+
# si vous avez utilisez la commande osmium pour découper les données sur Bruxelles
318+
# osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/brussels.osm.pbf
312319
```
313320
314321
Détail des options :
@@ -317,23 +324,22 @@ Détail des options :
317324
- `--database` : nom de la base de données
318325
- `--port` : port de connexion à la base de données
319326
- `--cache` : gère la taille du cache (en MB) à allouer pour l'import des noeuds OSM. Je pensais au début que la valeur par défaut (800) suffirait mais j'ai eu l'erreur : *Node cache size is too small to fit all nodes. Please increase cache size*. Dépend de la RAM de votre machine.
320-
- `--hstore-match-only` :
321327
- `--number-processes` : nom de processus à utiliser pour paralléliser les tâches qui peuvent l'être
322328
323-
Sur mon ordinateur portable (Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)) sur batterie, Pour celles et ceux que ça intéresse, dépliez pour voir ce que ça donne en termes de performances :
329+
Pour celles et ceux que ça intéresse, voici le détail de l'exécution sur mon ordinateur qui a pris 187 secondes :
324330

325331
<!-- markdownlint-disable MD046 -->
326332
??? example "Le détail de l'exécution sur ma machine"
327333

328334
```bash
329-
osm2pgsql --create --database osm --port 5434 -C 2000 -k /tmp/osmdata/belgium/belgium-latest.osm.pbf
335+
> osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf
330336
osm2pgsql version 1.2.1 (64 bit id space)
331337
332338
Allocating memory for dense node cache
333339
Allocating dense node cache in one big chunk
334340
Allocating memory for sparse node cache
335341
Sharing dense sparse
336-
Node-cache: cache=2000MB, maxblocks=32000*65536, allocation method=3
342+
Node-cache: cache=1000MB, maxblocks=16000*65536, allocation method=3
337343
Using built-in tag processing pipeline
338344
Using projection SRS 3857 (Spherical Mercator)
339345
Setting up table: planet_osm_point
@@ -343,37 +349,37 @@ Sur mon ordinateur portable (Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e
343349
344350
Reading in file: /tmp/osmdata/belgium/belgium-latest.osm.pbf
345351
Using PBF parser.
346-
Processing: Node(53934k 7705.0k/s) Way(8262k 140.05k/s) Relation(79780 11397.14/s) parse time: 73s
347-
Node stats: total(53934689), max(9770554582) in 7s
348-
Way stats: total(8262733), max(1063729340) in 59s
349-
Relation stats: total(87128), max(14183120) in 7s
350-
node cache: stored: 53934689(100.00%), storage efficiency: 50.16% (dense blocks: 170, sparse nodes: 53066475), hit rate: 100.00%
352+
Processing: Node(53962k 8993.7k/s) Way(8267k 145.05k/s) Relation(81920 11702.86/s) parse time: 70s
353+
Node stats: total(53962322), max(9777797946) in 6s
354+
Way stats: total(8267595), max(1064657400) in 57s
355+
Relation stats: total(87197), max(14192617) in 7s
356+
node cache: stored: 53962322(100.00%), storage efficiency: 50.16% (dense blocks: 170, sparse nodes: 53094157), hit rate: 100.00%
351357
Sorting data and creating indexes for planet_osm_point
352-
Sorting data and creating indexes for planet_osm_polygon
353358
Sorting data and creating indexes for planet_osm_line
354359
Sorting data and creating indexes for planet_osm_roads
360+
Sorting data and creating indexes for planet_osm_polygon
355361
Copying planet_osm_roads to cluster by geometry finished
356362
Creating geometry index on planet_osm_roads
357-
Creating indexes on planet_osm_roads finished
358-
All indexes on planet_osm_roads created in 6s
359-
Completed planet_osm_roads
360363
Copying planet_osm_point to cluster by geometry finished
361364
Creating geometry index on planet_osm_point
365+
Creating indexes on planet_osm_roads finished
366+
All indexes on planet_osm_roads created in 5s
367+
Completed planet_osm_roads
362368
Creating indexes on planet_osm_point finished
363-
All indexes on planet_osm_point created in 16s
369+
All indexes on planet_osm_point created in 15s
364370
Completed planet_osm_point
365371
Copying planet_osm_line to cluster by geometry finished
366372
Creating geometry index on planet_osm_line
367373
Creating indexes on planet_osm_line finished
368-
All indexes on planet_osm_line created in 69s
369-
Completed planet_osm_line
370374
Copying planet_osm_polygon to cluster by geometry finished
371375
Creating geometry index on planet_osm_polygon
376+
All indexes on planet_osm_line created in 44s
377+
Completed planet_osm_line
372378
Creating indexes on planet_osm_polygon finished
373-
All indexes on planet_osm_polygon created in 145s
379+
All indexes on planet_osm_polygon created in 117s
374380
Completed planet_osm_polygon
375381
376-
Osm2pgsql took 218s overall
382+
Osm2pgsql took 187s overall
377383
```
378384
<!-- markdownlint-enable MD046 -->
379385

@@ -404,7 +410,7 @@ wget http://download.geofabrik.de/europe/france/provence-alpes-cote-d-azur-lates
404410
osmium extract -b 5.347,43.484,5.536,43.565 /tmp/osmdata/osm_data.pbf -o /tmp/osmdata/osm_data_filtered.pbf
405411
5.347,43.484,5.536,43.565
406412
# import
407-
osm2pgsql --slim --database osm --port 5434 --cache 2000 --number-processes 4 /tmp/osmdata/osm_data_filtered.pbf
413+
osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/osm_data_filtered.pbf
408414
```
409415
410416
----

0 commit comments

Comments
 (0)