Le problème ne se situait pas au niveau des RP et du serveur backend.
Les loadbalancers étaient mal configurés…
Tout fonctionne. Il m'a fallu démanteler briques après briques pour comprendre.
Ouf
Si quelqu'un a le courage de regarder les logs… :-)
==> /var/log/httpd/extranet.error.log <==
[Tue Dec 01 11:36:24 2015] [debug] mod_proxy_http.c(1732): proxy: start body send
[Tue Dec 01 11:36:29 2015] [debug] mod_auth_cas.c(1745): [client 172.16.10.3] Entering cas_authenticate()
[Tue Dec 01 11:36:29 2015] [debug] mod_auth_cas.c(1473): [client 172.16.10.3] entering isValidCASCookie()
[Tue Dec 01 11:36:29 2015] [debug] mod_auth_cas.c(791): [client 172.16.10.3] entering readCASCacheFile()
[Tue Dec 01 11:36:29 2015] [debug] mod_auth_cas.c(1044): [client 172.16.10.3] entering writeCASCacheEntry()
[Tue Dec 01 11:36:29 2015] [debug] mod_proxy_http.c(56): proxy: HTTP: canonicalising URL //apps/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(1521): [client 172.16.10.3] proxy: http: found worker http://apps/ for http://apps/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:29 2015] [debug] mod_proxy.c(1020): Running scheme http handler (attempt 0)
[Tue Dec 01 11:36:29 2015] [debug] mod_proxy_http.c(1967): proxy: HTTP: serving URL http://apps/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(2026): proxy: HTTP: has acquired connection for (apps)
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(2082): proxy: connecting http://apps/apps/listes/etudiant-basc.php to apps:80
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(2209): proxy: connected /apps/listes/etudiant-basc.php to apps:80
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(2396): proxy: HTTP: backend socket is disconnected.
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(2460): proxy: HTTP: fam 2 socket created to connect to apps
[Tue Dec 01 11:36:29 2015] [debug] proxy_util.c(2592): proxy: HTTP: connection complete to vip:80 (apps)
[Tue Dec 01 11:36:34 2015] [error] [client 172.16.10.3] (70007)The timeout specified has expired: proxy: error reading status line from remote server apps, referer: http://extranet/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:34 2015] [debug] mod_proxy_http.c(1405): [client 172.16.10.3] proxy: read timeout, referer: http://extranet/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:34 2015] [debug] mod_proxy_http.c(1456): [client 172.16.10.3] proxy: NOT Closing connection to client although reading from backend server apps failed., referer: http://extranet/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:34 2015] [error] [client 172.16.10.3] proxy: Error reading from remote server returned by /apps/listes/etudiant-basc.php, referer: http://extranet/apps/listes/etudiant-basc.php
[Tue Dec 01 11:36:34 2015] [debug] proxy_util.c(2044): proxy: HTTP: has released connection for (apps)
==> /var/log/httpd/extranet.access.log <==
172.16.10.3 - user1 [01/Dec/2015:11:35:34 +0100] "POST /apps/listes/etudiant-basc.php HTTP/1.1" 502 438 "http://extranet/apps/listes/etudiant-basc.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36"
==> /var/log/httpd/extranet.error.log <==
[Tue Dec 01 11:37:27 2015] [debug] mod_proxy_http.c(1732): proxy: start body send
[Tue Dec 01 11:37:27 2015] [debug] mod_proxy_http.c(1732): proxy: start body send
[Tue Dec 01 11:38:27 2015] [info] [client 172.16.10.3] (70007)The timeout specified has expired: core_output_filter: writing data to the network
[Tue Dec 01 11:38:27 2015] [debug] mod_proxy_http.c(1836): proxy: end body send
[Tue Dec 01 11:38:27 2015] [debug] proxy_util.c(2044): proxy: HTTP: has released connection for (apps)
==> /var/log/httpd/extranet.access.log <==
172.16.10.3 - user1 [01/Dec/2015:11:36:29 +0100] "GET /apps/listes/etudiant-basc.php HTTP/1.1" 200 16503 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36"
==> /var/log/httpd/extranet.error.log <==
[Tue Dec 01 11:38:27 2015] [info] [client 172.16.10.3] (70007)The timeout specified has expired: core_output_filter: writing data to the network
[Tue Dec 01 11:38:27 2015] [debug] mod_proxy_http.c(1836): proxy: end body send
[Tue Dec 01 11:38:27 2015] [debug] proxy_util.c(2044): proxy: HTTP: has released connection for (apps)
J'ai fait quelques modifs dans les vhosts côté RP et côté APPS. J'ai mis ces paramètres des 2 côtés :
Timeout 60
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 60
HostnameLookups Off
VOici quelques échantillons faits depuis la VIP, ca provient du débugeur de chrome.
POST https://extranet/apps/app1/Index.php 200 OK 4,34s >> résultat 0byte, réponse HTTP coupé net
POST https://extranet/apps/app1/Index.php 200 OK 97ms
POST https://extranet/apps/app1/Index.php 200 OK 618ms
POST https://extranet/apps/app1/Index.php 200 OK 658ms
POST https://extranet/apps/app1/Index.php 200 OK 790ms
POST https://extranet/apps/app1/Index.php 200 OK 715ms
POST https://extranet/apps/app1/Index.php 200 OK 2,6s
POST https://extranet/apps/app1/Index.php 200 OK 2,97s
POST https://extranet/apps/app1/Index.php 200 OK 685ms
POST https://extranet/apps/app1/Index.php 200 OK 704ms
POST https://extranet/apps/app1/Index.php 200 OK 60ms
POST https://extranet/apps/app1/Index.php 200 OK 2,79s
POST https://extranet/apps/app1/Index.php 200 OK 2,6s
POST https://extranet/apps/app1/Index.php 200 OK 2,56s
POST https://extranet/apps/app1/Index.php 200 OK 3,14s >> résultat 0byte, réponse HTTP coupé net
POST https://extranet/apps/app1/Index.php 200 OK 2,31s >> résultat 0byte, réponse HTTP coupé net
POST https://extranet/apps/app1/Index.php 200 OK 2,1s
POST https://extranet/apps/app1/Index.php 200 OK 3,03s
La dernière requête à dépasser les 3 secondes et pourtant elle a abouti, contrairement aux 2 derniers plantage.
Avoir un nom d'hôte différent ça me semble idéal mais un autre problème persiste.
Les machines sont en DHCP (serveur dhcp microsoft) avec une mise à jour automatique des enregistrements DNS (serveur DNS microsoft, ça se configure ça).
Comment faire pour avoir 2 enregistrements DNS avec une seule adresse MAC ?
D'autant plus que j'installe les partitions linux depuis spacewalk via des kickstarts :
- boot PXE (donc recherche du DHCP - à ce stade comment faire pour différencier la machine P25L de P25W ??)
- recherche d'un serveur TFTP
- chargement d'une image d'amorçage
En admettant que via des script pré-install ou post install j'arrive à modifier le nom d'hôte de ma machine, ce serait vachement plus simple de le faire en amont … :-)
Je n'ai pour le moment pas utilisé les GPIO du cubie, mais d'autres gars de mon forum se sont lancés dans du DIY arduino et Raspberrypi
Je parle de 3 cubieboard mais j'ai aussi 3 raspberrypi qui pourraient faire parti du cluster
voici mon projet : http://wiseflat.com
La démo n'est plus à jour du tout l'IHM de la doc non plus…
Mais va voir la doc (entre autre la partie architecture)
Composé de 2 briques :
Le manager : nginx/mariadb/php5
Le Core : xPL-Perl + une multitude de plugin xPL pour mon besoin perso
Tout es modulaire dans mon architecture. Et c'est (entre autre) grâce à xPL.
Mon objectif c'est d'installer le Core+Manager sur chaque cubieboard et de créer un nouveau plugin xPL-cluster par exemple qui se charge de gérer le contexte de haute dispo que j'ai décrit dans mon 1er message
L'intérêt évident (si tu connais xPL) c'est que chaque plugin connecté au hub xPL envoie de requêtes heartbeat toutes les 30s (ou 60s je sais plus) ainsi qu'un message de type end quand le plugin se déconnecte du hub. Chaque plugin est identifié (hostname, vendor_id, message_type, etc). Utiliser ces info simplifie grandement la gestion de tout ce qui doit tourner.
Aujourd'hui l'élément le plus critique de mon projet c'est la base de données. D'ou l'intérêt d'avoir une solution de haute dispo à bas cout… C'est ce que je veux sécuriser.
De plus, mon service xPL-cluster serait en mesure de décider de répartir l'exécution des services xPL sur cubie2 ou cubie3 pour des questions de performances
Si tu as d'autres questions/remarques n'hésites pas c'est le but de ce brainstorming ;-)
Mon idéal serait un code en perl car tous mes développements sont en perl.
xPL apporte tellement de potentiel à un service de ce type que mon idéal serait de tout développer dans un module Perl qui s'appuie sur les messages de découverte issu de mon réseau xPL.
Je pense de toute façon redévelopper la roue. Car je veux quelque chose d'assez customisé.
Keepalived et ses scripts, c'est un bon début. Merci Neox, je vais regarder aussi de ce côté ci
Notre firewall possède un agent SSO qui interroge les sessions utilisateurs connectés au domaine. de cette manière, un utilisateur qui a ouvert sa session sort automatiquement sur internet.
Pour les clients linux et mac (qui utilisent des comptes locaux), ils sont redirigés sur le portail captif du parfeu qui se charge de récupérer leur login/pass du domaine Microsoft et il peuvent alors sortir sur internet.
L'intérêt de la solution et de faire du tout en un. Proposer un ADS samba4 + cups qui en plus saura dire à l'active directory que le client linux XXX aura ouvert une session sur le domaine…
J'ai déjà vérifié. Le fichier de configuration de dnsmasq te permet de spécifier quelles interfaces il doit utiliser.
Et il faut bien qu'il y ait une résolution dns locale bien sur…
Ca ne marche pas.
Le service dnsmasq se met en écoute sur l'interface 127.0.0.1.
La deuxième instance refuse de se lancer
dnsmasq -C /etc/dnsmasq.dmz.conf
dnsmasq: failed to create listening socket for 127.0.0.1: Address already in use
Et toujours ce problème de suffixe…
dnsmasq: query[A] google.fr.home from 192.168.2.2
dnsmasq: config google.fr.home is NXDOMAIN-IPv4
dnsmasq: query[AAAA] google.fr.home from 192.168.2.2
dnsmasq: config google.fr.home is NXDOMAIN-IPv6
J'ai un firewall linux avec 3 interfaces réseaux :
- eth1, INET_IFACE
- eth0, LAN_IFACE
- eth2, DMZ_IFACE
Le firewall héberge les services suivants :
- dnsmasq
- le routage via de règles iptables et ip rules
Depuis mon LAN, tout fonctionne
Depuis ma DMZ vers mon LAN tout fonctionne et inversement
Depuis ma DMZ vers INET (donc internet) aucune des résolutions ne fonctionnent car il suffixe toutes les résolutions DNS par le nom de mon domaine local soit .home
Mais pourquoi DNSmasq rajoute mon domaine à la fin de l'adresse depuis mon VLAN DMZ ???
dnsmasq: query[A] mirrordirector.raspbian.org.home from 192.168.2.2
dnsmasq: config mirrordirector.raspbian.org.home is NXDOMAIN-IPv4
dnsmasq: query[AAAA] mirrordirector.raspbian.org.home from 192.168.2.2
dnsmasq: query[A] mirrordirector.raspbian.org.home from 192.168.2.1
dnsmasq: config mirrordirector.raspbian.org.home is NXDOMAIN-IPv4
dnsmasq: query[AAAA] mirrordirector.raspbian.org.home from 192.168.2.1
dnsmasq: config mirrordirector.raspbian.org.home is NXDOMAIN-IPv6
J'ai viré toutes les références à dmz. Après tout, les machines de mes vlan font parties du même domaine…
Par contre j'ai déplacé le serveur dans mon vlan et là ça marche…
C'est clair y a un problème au niveau de mes ip rule ou au niveau du mon parfeu ou au niveau de dnsmasq… je penche plus pour dnsmasq
Bon je cherche !! raaa qu'est-ce que le temps passe vite quand on galère
Voici le log de lancement du service dnsmasq (pour info)
# dnsmasq -d
dnsmasq: started, version 2.66 cachesize 1000
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth
dnsmasq-dhcp: DHCP, IP range 192.168.2.1 -- 192.168.2.5, lease time 3d
dnsmasq-dhcp: DHCP, IP range 192.168.0.1 -- 192.168.0.100, lease time 3d
dnsmasq: using local addresses only for domain 2.168.192.in-addr.arpa
dnsmasq: using local addresses only for domain 0.168.192.in-addr.arpa
dnsmasq: using local addresses only for domain dmz
dnsmasq: using local addresses only for domain home
dnsmasq: ignoring nameserver 127.0.0.1 - local interface
dnsmasq: reading /etc/resolv.opendns
dnsmasq: using nameserver 208.67.220.220#53
dnsmasq: using nameserver 208.67.222.222#53
dnsmasq: using local addresses only for domain 2.168.192.in-addr.arpa
dnsmasq: using local addresses only for domain 0.168.192.in-addr.arpa
dnsmasq: using local addresses only for domain dmz
dnsmasq: using local addresses only for domain home
dnsmasq: read /etc/hosts - 11 addresses
dnsmasq-dhcp: read /etc/ethers - 6 addresses
lol j'ai acheté les cubieboard, on verra bien si ça marche et surtout si ça s'avère être une solution stable et pérenne…
En fait l'idée de supprimer la base de données sur mon nas synology ds412j c'est surtout de récupérer de la mémoire. Il suffit que je télécharge des fichiers depuis le "download manager" et là les requêtes http/mysql deviennent hyper lente… C'est la vrai raison.
j'ai l'impression (je dis bien c'est du feeling hein), "temps de travail/criticité/disponiblité/reprise sur erreur", avoir un filesystem partagé me semble plus simple à mettre en place qu'un cluster mysql…
Pour drbd, rien ne m'empêche de rajouter un 3ème noeud pour avoir un quorum de disque ? faut juste rajouter 80€pour une 3ème cubieboard + sd + clé usb :-)
Pour la perte éventuelle d'une carte SD, une fois mon noeud Y préconfiguré, j'en fais une image de secours. Du coup il me suffira de connecter la SD à mon ordi et recopier l'image de secours. Les données sensibles étant sur la clé usb…
Ouais dis comme ça ça a l'air cool mais à maintenir… on verra dans le temps lol
Techniquement ça a l'air de tenir la route, après faut voir à l'usage …
De toute façon, je vais essayer sur 2 raspberry et sur 2 cubieboard.
Le plus gros problème (de par l'expérience que j'ai du raspberry), ce n'est pas la mise en cluster des services (surtout si c'est pour faire la répartition de charge), c'est l'utilisation de mysql qui prend 60% de la RAM.
Merci pour ta réponse.
OK je comprends bien, c'est très clair. Et oui, c'est avant tout pour m'amuser. C'est de la geekerie à l'état pure :-)
Admettons que le Raid1 me suffise et que je base mon cluster sur 2 noeud uniquement, (donc 2 RPI, et 2 SDcard uniquement), drbd pourrait être suffisant ?
En fait, tout bien réfléchi, je ne pense pas utiliser la SDcard pour faire le Raid ce sera uniquement le système de fichier. Trop dangereux, ca m'est arrivé une bonne dizaine de fois d'avoir, suite à un reboot sauvage, flingué mon système de fichier et du réinstaller le système.
Je pense plutôt mettre une petite clé usb de 8Go, sur chacun des raspberry, faire du LVM et faire la réplication du système de fichier dessus.
Est-ce que dans ce cas drbd serait la meilleure solution ?
- Après la mise à jour de sa BD consécutive à la MÀJ de 1 à 2 de ton soft, l'utilisateur remarque que sa fonction préférée qui marchait très bien dans 1 ne marche pas dans 2. Il ne peut se permettre d'attendre une MÀJ et souhaite retourner à la version 1. Comment fait-il?
Effectivement, il ne peut pas faire de retour arrière. Pour le moment il est censé attendre une mise à jour corrective. Mais je pourrais le prévoir, d'ailleurs j'ai prévu plusieurs paramètres à mon script d'upgrade
--install (pour l'installation initiale)
--updade (pour la montée de version)
--force-update (pour forcer la réinstallation de la même version, voire d'une version antérieure. Il suffira de fournir en paramètre le chemin de la sauvegarde de la version n-1)
- Les système en prod peuvent-ils avoir un downtime?
Arf.. j'avais pas pensé aux scénarios utilisateurs… si le système se met en mode maintenance pendant un scénario ça risque de merder. Donc ça c'est chiant.
Je pourrais prévoir que l'update se fasse entre 2 scénarios. Une petite boucle dans mon script toutes les 10 secondes devrait faire l'affaire. Faut tester…
Les contraintes:
Quels sont les systèmes de BD supportés?
Pour le moment c'est du mysql.
L'upgrade de BD se fait côté soft ou bien avec un script SQL/sh?
L'upgrade se fait via script sh/sql. Il est géré par un cron quotidien.
Qui fait l'upgrade (admin, utilisateur inexpérimenté?)
C'est un cron. L'upgrade est géré par le système tel qu'expliqué précédemment.
Ton nouveau schéma est-il un sur ensemble strict de l'ancien (cas facile)?
Je ne suis pas sur de comprendre cette remarque.
Le fichier sql d'update se charge de créer des tables (ou d'en supprimer), de modifier des structures. et je n'ai pas utilisé de clé étrangères (pour le cas des violation de clé, etc)
Que doit-il se passer si la version 1 de ton soft tourne sur une BD avec le schéma de la version 2?
Je n'ai pas géré ce cas là car je pars du principe que toute nouvelle livraison contient forcément un Core, un Manager, Un Voice. Et elles doivent s'installer simultanément.
C'est super, tes remarques sont très pertinentes. Je me rends compte de tous les cas que j'ai pu oublié dans ce contexte de système décentralisé.
Ce que je peux te dire c'est donc que :
Je développe mon projet sur mon ordi. Je le teste dans une VM (c'est ma qualif). Et je le teste chez moi ( c'est ma prod).
Une fois que les corrections/évolutions me semblent intéressantes et stabilisées, je met en ligne les livrables.
Aucun des scénarios utilisateurs ne pourront tourner au moment de la montée de version. Sauf si je gère une mise en pause de ces scénarios durant l'installation. raaa j'avais pas pensé à ça !!! Donc mon installation automatique ne pourra pas marcher. Sauf si j'impose à l'utilisateur une période de 10 minutes de mise en maintenance quotidienne du système.
Et il faut forcément que le système (Core, Manager, Voice) se mette en mode maintenance en même temps pour se mettre à jour afin qu'il n'y ait pas de requête sur la base mysql.
J'aimerai bien utiliser un système en cluster avec un système de fichier distribué, pour que le service mysql puisse démarrer sur n'importe quel noeud. Tous les noeuds se mettraient à jour les uns après les autres et redémarreraient. C'est chaud, faisable mais dangereux. Quoique terriblement GEEK.
Voilà merci pour ton aide. Ca a été très instructif !
C'est effectivement cette voix que j'ai choisi de suivre. Je ne gère pas d'outils automatique, ce ne sont que des scripts développés par mes soins donc je suis censé maitriser les phases de montées de versions….
Il y aura surement des fois où l'upgrade ne sera passera pas bien pour X raisons… il faudra alors faire un retour arrière et repasser l'export réalisé précédemment. Donc oui il faut que je fasse des exports/imports.
Et pour ta dernière remarque, je ne peux que t'approuver. Je n'aurais pas du dire ça. Je suis dur avec mes développeurs… Et effectivement je me dois de les sensibiliser à ce contexte de production/d'exploitation.
Ils le comprennent assez bien dans l'ensemble mais il faut du temps. Et ce n'est pas chose facile. Fut un temps où pour les pb de production, ils se connectaient directement en prod pour passer leur script de mise à jour… Ou voir même faire des installations "from scratch" qui consiste à faire un DROP du schéma et recommencer par des CREATE/INSERT… Mais maintenant ce n'est plus le cas et les choses avancent dans le bon sens.
Souvent les projets sont développés en externe et les cahiers des charges de départs ne contiennent pas certaines des exigences liées à l'exploitation des environnements. Là nos chefs de projets n'y sont pour rien non plus. Mais c'est chiant de faire remonter au chef de projet que le CC n'a pas été analysé et relu par des exploitants.
Enfin, c'est un long débat passionnant mais ce n'était pas le but de ce post. Merci tout de même pour tes remarques
Génial…
MySQL Workbench c'est juste un peu trop lourd pour moi, mysqldiff me semble l'idéal.
Existe t'il la même chose sans interface graphique :-) ????? héhé
J'aime bien la méthode des scripts d'upgrade
Les imports/exports ça me fait un peu peur, surtout lors de l'import à cause des clefs étrangères et primaires.
C'est aussi parce que par expérience, en prod on a tjrs des emmerdes à cause des violation de contraintes lors des mises à jour des livrables
c'est peut être aussi parce que nos développeurs sont des burnes qui savent pas ce que c'est que la production et l'exploitation… mais chut, le répétez pas
Mouais…donc mon idée de départ semble être la bonne
# Problème résolu
Posté par popof . En réponse au message reverse proxy Apache + serveur backend = connexion reset by peer. Évalué à 1.
Le problème ne se situait pas au niveau des RP et du serveur backend.
Les loadbalancers étaient mal configurés…
Tout fonctionne. Il m'a fallu démanteler briques après briques pour comprendre.
Ouf
Merci pour votre aide
[^] # Re: Ca timeout quand ?
Posté par popof . En réponse au message reverse proxy Apache + serveur backend = connexion reset by peer. Évalué à 1.
Bon, je suis toujours un peu perdu :-)
VOici les différents logs que j'obtiens :
Si quelqu'un a le courage de regarder les logs… :-)
J'ai fait quelques modifs dans les vhosts côté RP et côté APPS. J'ai mis ces paramètres des 2 côtés :
[^] # Re: Ca timeout quand ?
Posté par popof . En réponse au message reverse proxy Apache + serveur backend = connexion reset by peer. Évalué à 1.
Ca timeout assez rapidemment en fait.
VOici quelques échantillons faits depuis la VIP, ca provient du débugeur de chrome.
La dernière requête à dépasser les 3 secondes et pourtant elle a abouti, contrairement aux 2 derniers plantage.
Je ne sais vraiment pas quoi en penser
[^] # Re: Keepalive des apaches
Posté par popof . En réponse au message reverse proxy Apache + serveur backend = connexion reset by peer. Évalué à 1.
Salut Merci pour ta réponse.
J'avais déjà essayé les paramètres que tu suggères
J'ai pu refaire des tests, même erreur.
POur info voici ce que j'avais mis dans la partie globale du vhost:
Comme tu vois j'ai essayé de mettre le paquet. (peut être que j'ai écris des erreurs ??)
# Résolu mais partiellement
Posté par popof . En réponse au message dual boot (windows/linux) dans domaine microsoft. Évalué à 1.
Avoir un nom d'hôte différent ça me semble idéal mais un autre problème persiste.
Les machines sont en DHCP (serveur dhcp microsoft) avec une mise à jour automatique des enregistrements DNS (serveur DNS microsoft, ça se configure ça).
Comment faire pour avoir 2 enregistrements DNS avec une seule adresse MAC ?
D'autant plus que j'installe les partitions linux depuis spacewalk via des kickstarts :
- boot PXE (donc recherche du DHCP - à ce stade comment faire pour différencier la machine P25L de P25W ??)
- recherche d'un serveur TFTP
- chargement d'une image d'amorçage
En admettant que via des script pré-install ou post install j'arrive à modifier le nom d'hôte de ma machine, ce serait vachement plus simple de le faire en amont … :-)
Des idées ?
Et Super, merci pour vos réponses !
[^] # Re: Question à 2 balles (par curiosité)
Posté par popof . En réponse au message Cluster actif/actif qui s'occupe de tout. Évalué à 2. Dernière modification le 13 octobre 2014 à 23:29.
Ce que je veux rendre haute dispo c'est le linux avec ses services !
J'ai évidemment des SPOF :
Mon émetteur/récepteur rfxcom Lan
Mes modules domotiques à piles
Mon alimentation électrique non redondée
Idem pour mon switch 48 ports… Je n'ai pas de switch stacké
Il y a forcément des SPOF. le matériel on met pas trop ces mains dedans contrairement au linux et ses bidouilles à gogo ;-)
[^] # Re: Question à 2 balles (par curiosité)
Posté par popof . En réponse au message Cluster actif/actif qui s'occupe de tout. Évalué à 2.
Je n'ai pour le moment pas utilisé les GPIO du cubie, mais d'autres gars de mon forum se sont lancés dans du DIY arduino et Raspberrypi
Je parle de 3 cubieboard mais j'ai aussi 3 raspberrypi qui pourraient faire parti du cluster
voici mon projet : http://wiseflat.com
La démo n'est plus à jour du tout l'IHM de la doc non plus…
Mais va voir la doc (entre autre la partie architecture)
Composé de 2 briques :
Tout es modulaire dans mon architecture. Et c'est (entre autre) grâce à xPL.
Mon objectif c'est d'installer le Core+Manager sur chaque cubieboard et de créer un nouveau plugin xPL-cluster par exemple qui se charge de gérer le contexte de haute dispo que j'ai décrit dans mon 1er message
L'intérêt évident (si tu connais xPL) c'est que chaque plugin connecté au hub xPL envoie de requêtes heartbeat toutes les 30s (ou 60s je sais plus) ainsi qu'un message de type end quand le plugin se déconnecte du hub. Chaque plugin est identifié (hostname, vendor_id, message_type, etc). Utiliser ces info simplifie grandement la gestion de tout ce qui doit tourner.
Aujourd'hui l'élément le plus critique de mon projet c'est la base de données. D'ou l'intérêt d'avoir une solution de haute dispo à bas cout… C'est ce que je veux sécuriser.
De plus, mon service xPL-cluster serait en mesure de décider de répartir l'exécution des services xPL sur cubie2 ou cubie3 pour des questions de performances
Si tu as d'autres questions/remarques n'hésites pas c'est le but de ce brainstorming ;-)
[^] # Re: keepalived et ses scripts
Posté par popof . En réponse au message Cluster actif/actif qui s'occupe de tout. Évalué à 1.
Mon idéal serait un code en perl car tous mes développements sont en perl.
xPL apporte tellement de potentiel à un service de ce type que mon idéal serait de tout développer dans un module Perl qui s'appuie sur les messages de découverte issu de mon réseau xPL.
Je pense de toute façon redévelopper la roue. Car je veux quelque chose d'assez customisé.
Keepalived et ses scripts, c'est un bon début. Merci Neox, je vais regarder aussi de ce côté ci
# Suite de la demande
Posté par popof . En réponse au message Samba 4 et Active directory. Évalué à 1.
Une autre chose que je n'ai pas dit.
Notre firewall possède un agent SSO qui interroge les sessions utilisateurs connectés au domaine. de cette manière, un utilisateur qui a ouvert sa session sort automatiquement sur internet.
Pour les clients linux et mac (qui utilisent des comptes locaux), ils sont redirigés sur le portail captif du parfeu qui se charge de récupérer leur login/pass du domaine Microsoft et il peuvent alors sortir sur internet.
L'intérêt de la solution et de faire du tout en un. Proposer un ADS samba4 + cups qui en plus saura dire à l'active directory que le client linux XXX aura ouvert une session sur le domaine…
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1.
Ca marche quand même
cat /etc/resolv.conf
domain home
search home
nameserver 127.0.0.1
Tu spécifies un fichier global dans /etc/dnsmasq.conf
resolv-file=/etc/resolv.opendns
Et tu spécifies les interfaces dans le fichier de conf
listen-address=127.0.0.1
listen-address=192.168.0.254
listen-address=192.168.2.254
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1.
J'ai corrigé mon fichier il n'écoute plus sur l'interface locale pour tester
listen-address=192.168.0.254
listen-address=192.168.2.254
netstat -natup |grep dnsmasq
tcp 0 0 192.168.0.254:53 0.0.0.0:* LISTEN 5357/dnsmasq
tcp 0 0 192.168.2.254:53 0.0.0.0:* LISTEN 5357/dnsmasq
udp 0 0 192.168.0.254:53 0.0.0.0:* 5357/dnsmasq
udp 0 0 192.168.2.254:53 0.0.0.0:* 5357/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 5357/dnsmasq
Mais le pb c'est que le routeur lui même ne fait plus les résolutions :-(
listen-address=127.0.0.1
listen-address=192.168.0.254
listen-address=192.168.2.254
Je suis obligé de rajouter l'adresse locale lol
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1. Dernière modification le 25 mai 2014 à 22:33.
J'ai déjà vérifié. Le fichier de configuration de dnsmasq te permet de spécifier quelles interfaces il doit utiliser.
Et il faut bien qu'il y ait une résolution dns locale bien sur…
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1. Dernière modification le 25 mai 2014 à 21:51.
Ca ne marche pas.
Le service dnsmasq se met en écoute sur l'interface 127.0.0.1.
La deuxième instance refuse de se lancer
dnsmasq -C /etc/dnsmasq.dmz.conf
dnsmasq: failed to create listening socket for 127.0.0.1: Address already in use
Et toujours ce problème de suffixe…
dnsmasq: query[A] google.fr.home from 192.168.2.2
dnsmasq: config google.fr.home is NXDOMAIN-IPv4
dnsmasq: query[AAAA] google.fr.home from 192.168.2.2
dnsmasq: config google.fr.home is NXDOMAIN-IPv6
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1.
Peut-être faut il que je découpe mon fichier de configuration et que je lance 2 instances de dnsmasq …. Une pour chaque sous réseau ?
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1. Dernière modification le 25 mai 2014 à 19:37.
C'est exactement ce problème là : link
Non c'est pas tout à fait comme ça…
J'ai un firewall linux avec 3 interfaces réseaux :
- eth1, INET_IFACE
- eth0, LAN_IFACE
- eth2, DMZ_IFACE
Le firewall héberge les services suivants :
- dnsmasq
- le routage via de règles iptables et ip rules
Depuis mon LAN, tout fonctionne
Depuis ma DMZ vers mon LAN tout fonctionne et inversement
Depuis ma DMZ vers INET (donc internet) aucune des résolutions ne fonctionnent car il suffixe toutes les résolutions DNS par le nom de mon domaine local soit .home
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1.
Mais pourquoi DNSmasq rajoute mon domaine à la fin de l'adresse depuis mon VLAN DMZ ???
dnsmasq: query[A] mirrordirector.raspbian.org.home from 192.168.2.2
dnsmasq: config mirrordirector.raspbian.org.home is NXDOMAIN-IPv4
dnsmasq: query[AAAA] mirrordirector.raspbian.org.home from 192.168.2.2
dnsmasq: query[A] mirrordirector.raspbian.org.home from 192.168.2.1
dnsmasq: config mirrordirector.raspbian.org.home is NXDOMAIN-IPv4
dnsmasq: query[AAAA] mirrordirector.raspbian.org.home from 192.168.2.1
dnsmasq: config mirrordirector.raspbian.org.home is NXDOMAIN-IPv6
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1. Dernière modification le 25 mai 2014 à 18:29.
J'ai viré toutes les références à dmz. Après tout, les machines de mes vlan font parties du même domaine…
Par contre j'ai déplacé le serveur dans mon vlan et là ça marche…
C'est clair y a un problème au niveau de mes ip rule ou au niveau du mon parfeu ou au niveau de dnsmasq… je penche plus pour dnsmasq
Bon je cherche !! raaa qu'est-ce que le temps passe vite quand on galère
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1. Dernière modification le 25 mai 2014 à 16:52.
Voici le log de lancement du service dnsmasq (pour info)
[^] # Re: etrange, et pas vraiment de piste mais...
Posté par popof . En réponse au message dnsmasq + multiples vlan = pb de résolution DNS externe. Évalué à 1.
Mais pourquoi ça marche alors depuis mon vlan home ?
Cette directive n'est elle pas suffisante ?
resolv-file=/etc/resolv.opendns
cat /etc/resolv.opendns
nameserver 208.67.222.222
nameserver 208.67.220.220
[^] # Re: HDFS n'est pas adapté dans ton cas
Posté par popof . En réponse au message HDFS où comment faire un espace de stockage décentralisé en cluster (genre un raid5). Évalué à 0.
lol j'ai acheté les cubieboard, on verra bien si ça marche et surtout si ça s'avère être une solution stable et pérenne…
En fait l'idée de supprimer la base de données sur mon nas synology ds412j c'est surtout de récupérer de la mémoire. Il suffit que je télécharge des fichiers depuis le "download manager" et là les requêtes http/mysql deviennent hyper lente… C'est la vrai raison.
j'ai l'impression (je dis bien c'est du feeling hein), "temps de travail/criticité/disponiblité/reprise sur erreur", avoir un filesystem partagé me semble plus simple à mettre en place qu'un cluster mysql…
Pour drbd, rien ne m'empêche de rajouter un 3ème noeud pour avoir un quorum de disque ? faut juste rajouter 80€pour une 3ème cubieboard + sd + clé usb :-)
Pour la perte éventuelle d'une carte SD, une fois mon noeud Y préconfiguré, j'en fais une image de secours. Du coup il me suffira de connecter la SD à mon ordi et recopier l'image de secours. Les données sensibles étant sur la clé usb…
Ouais dis comme ça ça a l'air cool mais à maintenir… on verra dans le temps lol
[^] # Re: HDFS n'est pas adapté dans ton cas
Posté par popof . En réponse au message HDFS où comment faire un espace de stockage décentralisé en cluster (genre un raid5). Évalué à 1.
En fait j'avais pensé à ça :
http://maniaque.org/2013/01/cluster-mysql-drbd-heartbeat
http://docs.chezwam.org/docs/2010/05/21_replication-mysql-avec-drbd.html
Techniquement ça a l'air de tenir la route, après faut voir à l'usage …
De toute façon, je vais essayer sur 2 raspberry et sur 2 cubieboard.
Le plus gros problème (de par l'expérience que j'ai du raspberry), ce n'est pas la mise en cluster des services (surtout si c'est pour faire la répartition de charge), c'est l'utilisation de mysql qui prend 60% de la RAM.
A voir…
[^] # Re: HDFS n'est pas adapté dans ton cas
Posté par popof . En réponse au message HDFS où comment faire un espace de stockage décentralisé en cluster (genre un raid5). Évalué à 1.
Merci pour ta réponse.
OK je comprends bien, c'est très clair. Et oui, c'est avant tout pour m'amuser. C'est de la geekerie à l'état pure :-)
Admettons que le Raid1 me suffise et que je base mon cluster sur 2 noeud uniquement, (donc 2 RPI, et 2 SDcard uniquement), drbd pourrait être suffisant ?
En fait, tout bien réfléchi, je ne pense pas utiliser la SDcard pour faire le Raid ce sera uniquement le système de fichier. Trop dangereux, ca m'est arrivé une bonne dizaine de fois d'avoir, suite à un reboot sauvage, flingué mon système de fichier et du réinstaller le système.
Je pense plutôt mettre une petite clé usb de 8Go, sur chacun des raspberry, faire du LVM et faire la réplication du système de fichier dessus.
Est-ce que dans ce cas drbd serait la meilleure solution ?
[^] # Re: Il n'y pas de remède miracle
Posté par popof . En réponse au message Méthode pour gérer les montées de version de structure de base de données. Évalué à 0.
Whaou! ça c'est du conseil !
Les objectifs
- Après la mise à jour de sa BD consécutive à la MÀJ de 1 à 2 de ton soft, l'utilisateur remarque que sa fonction préférée qui marchait très bien dans 1 ne marche pas dans 2. Il ne peut se permettre d'attendre une MÀJ et souhaite retourner à la version 1. Comment fait-il?
Effectivement, il ne peut pas faire de retour arrière. Pour le moment il est censé attendre une mise à jour corrective. Mais je pourrais le prévoir, d'ailleurs j'ai prévu plusieurs paramètres à mon script d'upgrade
--install (pour l'installation initiale)
--updade (pour la montée de version)
--force-update (pour forcer la réinstallation de la même version, voire d'une version antérieure. Il suffira de fournir en paramètre le chemin de la sauvegarde de la version n-1)
- Les système en prod peuvent-ils avoir un downtime?
Arf.. j'avais pas pensé aux scénarios utilisateurs… si le système se met en mode maintenance pendant un scénario ça risque de merder. Donc ça c'est chiant.
Je pourrais prévoir que l'update se fasse entre 2 scénarios. Une petite boucle dans mon script toutes les 10 secondes devrait faire l'affaire. Faut tester…
Les contraintes:
Quels sont les systèmes de BD supportés?
Pour le moment c'est du mysql.
L'upgrade de BD se fait côté soft ou bien avec un script SQL/sh?
L'upgrade se fait via script sh/sql. Il est géré par un cron quotidien.
Qui fait l'upgrade (admin, utilisateur inexpérimenté?)
C'est un cron. L'upgrade est géré par le système tel qu'expliqué précédemment.
Ton nouveau schéma est-il un sur ensemble strict de l'ancien (cas facile)?
Je ne suis pas sur de comprendre cette remarque.
Le fichier sql d'update se charge de créer des tables (ou d'en supprimer), de modifier des structures. et je n'ai pas utilisé de clé étrangères (pour le cas des violation de clé, etc)
Que doit-il se passer si la version 1 de ton soft tourne sur une BD avec le schéma de la version 2?
Je n'ai pas géré ce cas là car je pars du principe que toute nouvelle livraison contient forcément un Core, un Manager, Un Voice. Et elles doivent s'installer simultanément.
C'est super, tes remarques sont très pertinentes. Je me rends compte de tous les cas que j'ai pu oublié dans ce contexte de système décentralisé.
Ce que je peux te dire c'est donc que :
Je développe mon projet sur mon ordi. Je le teste dans une VM (c'est ma qualif). Et je le teste chez moi ( c'est ma prod).
Une fois que les corrections/évolutions me semblent intéressantes et stabilisées, je met en ligne les livrables.
Aucun des scénarios utilisateurs ne pourront tourner au moment de la montée de version. Sauf si je gère une mise en pause de ces scénarios durant l'installation. raaa j'avais pas pensé à ça !!! Donc mon installation automatique ne pourra pas marcher. Sauf si j'impose à l'utilisateur une période de 10 minutes de mise en maintenance quotidienne du système.
Et il faut forcément que le système (Core, Manager, Voice) se mette en mode maintenance en même temps pour se mettre à jour afin qu'il n'y ait pas de requête sur la base mysql.
J'aimerai bien utiliser un système en cluster avec un système de fichier distribué, pour que le service mysql puisse démarrer sur n'importe quel noeud. Tous les noeuds se mettraient à jour les uns après les autres et redémarreraient. C'est chaud, faisable mais dangereux. Quoique terriblement GEEK.
Voilà merci pour ton aide. Ca a été très instructif !
[^] # Re: Pourquoi n'allez vous pas voir ce que j'ai fait pour vous en faire une idée ?
Posté par popof . En réponse au message Méthode pour gérer les montées de version de structure de base de données. Évalué à 0.
Super merci pour ton conseil.
C'est effectivement cette voix que j'ai choisi de suivre. Je ne gère pas d'outils automatique, ce ne sont que des scripts développés par mes soins donc je suis censé maitriser les phases de montées de versions….
Il y aura surement des fois où l'upgrade ne sera passera pas bien pour X raisons… il faudra alors faire un retour arrière et repasser l'export réalisé précédemment. Donc oui il faut que je fasse des exports/imports.
Et pour ta dernière remarque, je ne peux que t'approuver. Je n'aurais pas du dire ça. Je suis dur avec mes développeurs… Et effectivement je me dois de les sensibiliser à ce contexte de production/d'exploitation.
Ils le comprennent assez bien dans l'ensemble mais il faut du temps. Et ce n'est pas chose facile. Fut un temps où pour les pb de production, ils se connectaient directement en prod pour passer leur script de mise à jour… Ou voir même faire des installations "from scratch" qui consiste à faire un DROP du schéma et recommencer par des CREATE/INSERT… Mais maintenant ce n'est plus le cas et les choses avancent dans le bon sens.
Souvent les projets sont développés en externe et les cahiers des charges de départs ne contiennent pas certaines des exigences liées à l'exploitation des environnements. Là nos chefs de projets n'y sont pour rien non plus. Mais c'est chiant de faire remonter au chef de projet que le CC n'a pas été analysé et relu par des exploitants.
Enfin, c'est un long débat passionnant mais ce n'était pas le but de ce post. Merci tout de même pour tes remarques
[^] # Re: Pourquoi n'allez vous pas voir ce que j'ai fait pour vous en faire une idée ?
Posté par popof . En réponse au message Méthode pour gérer les montées de version de structure de base de données. Évalué à 1.
Génial…
MySQL Workbench c'est juste un peu trop lourd pour moi, mysqldiff me semble l'idéal.
Existe t'il la même chose sans interface graphique :-) ????? héhé
J'aime bien la méthode des scripts d'upgrade
Les imports/exports ça me fait un peu peur, surtout lors de l'import à cause des clefs étrangères et primaires.
C'est aussi parce que par expérience, en prod on a tjrs des emmerdes à cause des violation de contraintes lors des mises à jour des livrables
c'est peut être aussi parce que nos développeurs sont des burnes qui savent pas ce que c'est que la production et l'exploitation… mais chut, le répétez pas
Mouais…donc mon idée de départ semble être la bonne