Je travaille actuellement sur une configuration docker-composer qui peut être utilisée pour déployer un cluster de nœuds CouchDB 2. J'ai finalement réussi à faire fonctionner les nœuds et à synchroniser les données entre les nœuds, mais à moins que je ne me trompe, il semble que CouchDB ne synchronise pas les sessions utilisateur.Est-ce que CouchDB 2 synchronise les sessions utilisateur entre les nœuds?
Ma configuration a 3 nœuds et utilise une configuration haproxy presque identique à haproxy.cfg. Selon ma configuration, haproxy achemine le trafic entrant sur le port 5984 vers le port 5984 sur les 3 nœuds.
Supposons un nom d'utilisateur admin de root
et un mot de passe de password
.
je suis Connectez-vous avec:
curl -vX POST http://localhost:5984/_session -H 'Content-Type: application/x-www-form-urlencoded' -d 'name=root&password=password'
Notez le AuthSession retourné est utilisé ci-dessous comme AUTHSESSION.
Ensuite, j'exécutez la commande suivante: «Vous n'êtes pas un administrateur de serveur »
curl -X PUT http://localhost:5984/mydb --cookie AuthSession=AUTHSESSION -H "X-CouchDB-WWW-Authenticate: Cookie" -H "Content-Type: application/x-www-form-urlencoded"
Cela échoue généralement avec je peux continuer à émettre le même PUT et il finira par réussir comme je suppose que haproxy éventuellement achemine la demande vers le nœud unique avec lequel je suis authentifié. Comme haproxy utilise round robin, il y a 1 chance sur 3 que j'atteigne le nœud cible.
Je pense que CouchDB 2 pourrait gérer la synchronisation des sessions utilisateur entre les nœuds. Est-ce que je fais une supposition stupide ici?
(S'il vous plaît voir run cluster via docker-compose pour reproduire ma configuration)
Mise à jour avec une solution spécifique pour ma configuration docker-Compose
Comme par @lossleader, vous devez définir le secret dans la section [couch_httpd_auth] de sorte qu'il est identique à travers les nœuds. De plus, vous devez définir le même nom d'utilisateur et mot de passe administrateur dans la section [admins]. Le détail que j'ai manqué ici est que tous les nœuds doivent avoir exactement le même mot de passe dans le fichier .ini. Avoir le même mot de passe en clair n'est pas suffisant, sinon chaque noeud va générer son propre sel et générer un hash différent.
Voir run cluster via docker-compose pour mon installation complète.
avez-vous défini le même secret sur chaque nœud? http://docs.couchdb.org/fr/2.0.0/config/auth.html#couch_httpd_auth/secret – lossleader
@lossleader, juste essayé de le définir dans local.ini et malheureusement, il ne semble pas faire une différence. – redgeoff
Si le secret est maintenant le même, je pense que la différence est que les nœuds étaient probablement autorisés à sel/crypter les utilisateurs admin séparément, je copie les lignes d'administration d'un nœud dans ma config après son exécution. – lossleader