私は現在、CouchDB 2ノードのクラスタをデプロイするために使用できるドッカー作成設定に取り組んでいます。私は最終的にノードを動作させ、データをノード間で同期させましたが、間違っていなければ、CouchDBはユーザーセッションを同期しないように見えます。CouchDB 2はユーザーセッションをノード間で同期しますか?
私のセットアップは、3つのノードがあり、haproxy.cfgとほぼ同じhaproxyセットアップを使用しています。私の設定通りに、haproxyは、ポート5984上の着信トラフィックを、すべての3つのノード上のポート5984にルーティングします。
はpassword
の管理
root
のユーザー名とパスワードを想定します。
私が最初にログインします。
curl -vX POST http://localhost:5984/_session -H 'Content-Type: application/x-www-form-urlencoded' -d 'name=root&password=password'
注意返さAuthSessionがAUTHSESSIONとして以下で使用されます。
はその後、私は次のように発行します。
curl -X PUT http://localhost:5984/mydb --cookie AuthSession=AUTHSESSION -H "X-CouchDB-WWW-Authenticate: Cookie" -H "Content-Type: application/x-www-form-urlencoded"
これは通常で失敗し、私は同じPUTを発行し続けることができると私は最終的にそのhaproxyを想定して、それが最終的に成功します「あなたは、サーバーの管理者ではありません。」私が認証されている単一のノードに要求をルーティングします。ハプロキシはラウンドロビンを使用しているので、ターゲットノードにヒットする確率は1/3です。
私はCouchDBの2ノード間でユーザーセッションの同期扱うことができると思うだろう。私はここでばかげた仮定をしていますか?
、あなたは[couch_httpd_auth]セクションにある秘密を設定する必要があり、私のドッキングウィンドウ・コンセットアップ@lossleaderあたりとして
のための具体的な解決策と
更新(私の設定を複製するrun cluster via docker-composeを参照してください)ノード間で同じになるようにします。さらに、[管理者]セクションで同じ管理者のユーザー名とパスワードを設定する必要があります。私がここで欠けていた細部は、すべてのノードが.iniファイル内の全く同じパスワードハッシュを持っていなければならないということです。同じクリアテキストパスワードを使用するだけでは十分ではありません。そうでなければ、各ノードは独自のソルトを生成し、異なるハッシュを生成します。
は私の完全なセットアップのためrun cluster via docker-composeを参照してください。
各ノードで同じ秘密を設定しましたか? http://docs.couchdb.org/en/2.0.0/config/auth.html#couch_httpd_auth/secret – lossleader
@lossleaderはlocal.iniに設定しようとしましたが、残念なことに違いはありません。 – redgeoff
シークレットが同じならば、ノードがおそらく管理者ユーザーを個別にsalt/encryptすることが許可されているという違いがあると思います。ノードの管理行を実行後に設定にコピーします。 – lossleader