Open Jean-Baptiste-Lasselle opened 6 years ago
Ouep, dans le fameux ./renderer/map_data/config.json
du conteneur gopnik, il y a mention :
8080
, 9090
, 8088
, 8090
:$NUMERO_DE_PORT
, probablement un équivalent d'une forme 0.0.0.0:$NUMERO_DE_PORT
soit l'interface par défaut.8090
, il y a mention de localhost
essayer avec la même forme que les autres, sans rien modifier d'autre.Effectivement, cela a bien changé les logs du renderer :+1:
Désormais, le seul problème qui reste est un erreur d'authentification du serveur GOPNIK, au serveur PostGreSQL.
Et c'est logique, puisque je suis en train de résoudre ce dernier problème, en reconstruisantt de zéro mon stack postgresql / postgis dockerisé (les images et Dockerfiles trouvées dans les repos et doc parcourues présntent souvent le problème de référencer la 'latest', et bien evidemment, 12 mois plus tard, on obtient un plantage.
Exemple : dans le [fichier dockerfile suggéré par la documentation Docker](), et que otu ce petit monde semble utiliser sans se poser de question, on un FROM ubuntu
. Sauf que python-software-properties
n'existe plus sur les repository Ubuntu des releases >= 12.04, et pas de chance, aujourd'hui on est bien plus loin que la rrelease 12.04, dans les latest publiée par Ubuntu.
[jibl@pc-100 proto]$ docker logs -f rendereurpoulet
-------------------------------------------------------------------------------------------
VERIFICATION RENDERER ENNTRYPOINT : [MAPNIK_POSTGRES_USER=renderer_user]
VERIFICATION RENDERER ENNTRYPOINT : [MAPNIK_POSTGRES_DB=bddgeoloc]
VERIFICATION RENDERER ENNTRYPOINT : [MAPNIK_POSTGRES_DB_HOST=postgis]
VERIFICATION RENDERER ENNTRYPOINT : [MAPNIK_POSTGRES_PASSWORD=whereischarlie]
VERIFICATION RENDERER ENNTRYPOINT : [PGUSER=renderer_user]
VERIFICATION RENDERER ENNTRYPOINT : [PGPASSWORD=whereischarlie]
-------------------------------------------------------------------------------------------
-----
VERIF JBL dans complie_style.sh de monsieur catactrophe aka 'domman84' [MAPNIK_POSTGRES_DB_HOST=postgis]
VERIF JBL dans complie_style.sh de monsieur catactrophe aka 'domman84' [MAPNIK_POSTGRES_DB_PORT_NO=5432]
VERIF JBL dans complie_style.sh de monsieur catactrophe aka 'domman84' [MAPNIK_POSTGRES_DB=bddgeoloc]
VERIF JBL dans complie_style.sh de monsieur catactrophe aka 'domman84' [MAPNIK_POSTGRES_USER=renderer_user]
VERIF JBL dans complie_style.sh de monsieur catactrophe aka 'domman84' [MAPNIK_POSTGRES_PASSWORD=whereischarlie]
-----
DB successfully created, waiting for restart
Starting renderer
2018/10/28 02:48:23 renderselector.go:209: [DEBUG] ping error %v dial tcp :8090: getsockopt: connection refused
2018/10/28 02:48:23 renderselector.go:117: [DEBUG] '%v' is %v :8090 Offline
2018/10/28 02:48:23 app.go:266: [INFO] Serving debug data (/debug/vars) on %s... :9080
2018/10/28 02:48:23 app.go:267: [INFO] Serving monitoring xml data on %s... :9080
2018/10/28 02:48:23 main.go:118: [INFO] Starting on %s... :8080
2018/10/28 02:48:23 app.go:266: [INFO] Serving debug data (/debug/vars) on %s... :9090
2018/10/28 02:48:23 app.go:267: [INFO] Serving monitoring xml data on %s... :9090
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v Exception: Postgis Plugin: FATAL: password authentication failed for user "renderer_user"
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v Connection string: 'host=postgis port=5432 dbname=bddgeoloc user=renderer_user connect_timeout=4'
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v encountered during parsing of layer 'landcover-low-zoom' in Layer at line 334 of '/openstreetmap-carto/stylesheet.xml'
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v Exception: Postgis Plugin: FATAL: password authentication failed for user "renderer_user"
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v Connection string: 'host=postgis port=5432 dbname=bddgeoloc user=renderer_user connect_timeout=4'
2018/10/28 02:48:23 render.go:35: [ERROR] Render child error: %v encountered during parsing of layer 'landcover-low-zoom' in Layer at line 334 of '/openstreetmap-carto/stylesheet.xml'
2018/10/28 02:48:23 main.go:91: [CRITICAL] Failed to create tile server: Failed to create some renders: [Invalid read uint64: EOF Invalid read uint64: EOF]
^C
[jibl@pc-100 proto]$
Oh purée, le fameux fichier ./renderer/map_data/config.json
:+1:
Nom dé diou, c'est un template gopnik pour graver la topologie du cluster .. Dans la confgiuration Docker /etc/docker/daemon.json
!!! :-o
cf. https://github.com/sputnik-maps/gopnik/blob/master/example/dockerconfig.json
Tu crois qu'ils aureint ne serait-e que mentionné cela, dansle tutoriel originel shinemachin... :-o :-o !!?? :skull:
Liste des numéros de port mentionnés dans la configuration gopnik ./renderer/map_data/config.json
:+1:
Dispatcher
:8080
( Main Address ) :8090
( ClusterPlugin / Nodes )Render
:8080
( Main Address ):9090
( Debug Address )Prerender
:8088
( UI Address ):8090
( Slaves / ClusterPlugin )Prerender Slaves
:8080
Voilà pour la topologie, je pense.
REMARQUES IMMEDIATES
! Il y a un probable conflit d'entrée, entre le Dispatcher
et le(s) Prerender
: ils fot tout deux usage du numéro de port 8090
, exectement :8090
signifie plus qu'un numéro de port : ils appellent cela adresse, mais :
0.0.0.0:8090
, et alors 0.0.0.0
fait référence à l'interface réseau par défaut de l'instance d'OS. En effet, Linux a la notion d'interface réseau par défaut, aprce que les serveurs ont souvent plusieurs port Ethernet / RJ45 / SFP, et le traffic réseau peut rarement (je ne connais aucun protocole réseau capable de cela) utiliser Plusieurs ports Ethernet à la fois. Voyez la notion de 'Predictable interface names, et si
enp0s3 enp0s9 enp0s10` vous dit quelque chose...Bref, 0.0.0.0:8090
fait bien référence à l'interface réseau par défaut, ... et ce qui est important, c'est que ce n'est JAMAIS localhost. ET c'est certainement pour cette raison que j'ai trouvé des localhost
dans ce fichier de configuration : Eh oui, lorsque 2 éléments du cluster (des machins, et des bidules, peu importe ce que c'est) font usage du même numéro de port, au sein de la même machine, le concepteur a atribué le localhost à l'un, et l'interface par défaut, à l'autre. Mieux, je pense qu'il a en général collé sur le localhost les bidules qui n'ont pas besoin d'être accédés de l'extérieur, comme les Slaves, qui n'ont besoin d'être accessible quepar leur Maître (et donc on voit bien que le concepteur a pensé ses Slaves, et leur(s) Maître(s), sur le même hôte réseau
"Slaves": {
"Plugin": "ClusterConfigPlugin",
"PluginConfig": {
"Nodes": ["localhost:8090"]
}
(ahhhh et voilà, on retrouve la configuration legacy....)
Mon Hypothèse à la seule lecture du fichier de configuration
Clairement, j'ai un lien entre le Dispatcher
, et Prerender
:
Prerender
Prerender
, gère manifestement un pool de PrerenderSlaves
(Chaque PreRender
serait le maître de son pool de PrerenderSlaves
? PrerenderSlaves
est configuré par le bloc JSON ["RenderPools"]
["CachePlugin"]
est là pour configurer l'installation d'une dépendance Remarque : mauvais design pattern, de configurer dans c fichier-là, l'installation d'une dépendance. On obtient en effet là une adhérence entre les configurations de deux choses très différentes:
Cache
=> :8080
Hop là, hop là ! => Selon :
http://sputnik-maps.github.io/gopnik/overview.html
Les 'PReRender, il ne servent pas dans le processus de run avec le client, mais pour les opérations standards d'exploitation.
Donc on abien un cluster de PreRendering , pour exécuter une tâche de type BULK BATCH, sur des données : faire le pre-rendering, c'est "remplir" le cache, ne serait-ce qu'au départ, et surement périodiquement, avec les données géographiques. Ensuite, les Renderes prennent le relai :+1:
TIME TO LIVE
, comme pour les réseaux avec le paramètre de configuration RenderTTL
, dans le fichier renderer/map_data/config.json
, au niveau de la configuration du service Renderer
, je crois bien ... :Périodiquement: à des horaires décidés par une intelligence articficielle, qui analyse les données de monotoring en séries temporelles, etc... La mêem intelligence artificielle utilisera l'apprentissage autmatique de type machine learning, pour appprendre des engeulafdes qu'il prend de la part des humains)
je vais faire mon inmport de données osm2pgsql
Bon ok,j'ai trovué un nouvreau truc :+1:
localhost :8090
,localhost :8088
, etc... concenent le "rendererselector.go", ce qui a tendance à faire penser à un cluster managment à la con./renderer/map_data/config.json
est de toute évidence une configuration de cluster (ça parle de slave ...), et de plus que le port8090
y est bien mentionné, là où il n'est mentionné nul part dansx mon./docker-compose.yml
, ou mon./.env
.Je pense, pour terminer, qu'il sera logique de créer des conteneurs renderer, autant que d'hôtes réseau mentionnés dans le
./renderer/map_data/config.json
(manifestemenet un fichier de confgopnik
)p.s.: et au fait :
gopnik
==mapnik
, but written in go?