問題タブ [etcd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - Docker コンテナを検出できません
サービスディスカバリについては、このチュートリアルに従っていますhttp://jasonwilder.com/blog/2014/07/15/docker-service-discovery
簡単に言うと:
xyzd:4001 で実行する etcd ホストを作成しました
backend_serverip:8000 および docker-register でコンテナーを実行するバックエンド サーバーを作成しました。
backend2_serverip:8000 でコンテナーを実行し、docker-register を実行する別のバックエンド サーバーを作成しました。
docker-discover を実行するクライアントと ubuntu イメージを作成しました
ログを見てコンテナが登録されているかどうかを確認すると、次のエラーが表示されます
このディレクトリを手動で作成しようとしましたが、特権オプションを使用してコンテナを実行しようとしましたが、うまくいきませんでした
spring-cloud - spring-cloud-etcd 検出用に複数のクライアントを構成する
spring-cloud-etcd を使用して自動検出/構成用に複数のクライアントを構成するのが困難です。
これを実行するために有効にする必要がある一般的な構成はありますか?
目標は、Netflix OSS Eureka の代わりに etcd をどのように使用できるかを評価することです。
node.js - node.js etcd クライアントが html を取得するのはなぜですか
私の etcd インスタンスはローカルで実行されており、cli を使用して get と set を実行できます
しかし、 node-etc モジュールを使用すると
cli と同じ結果ではなく、値が HTML (以下を参照) になります。これは数週間前に機能していたので、機能しているかどうかはわかりません
new Etcd()
また、ホストを含めずに単に使用すると、プロキシの問題に関する参照を含む内部 HTML ページが表示されることもわかりました。
apache-zookeeper - Zookeeper、Consul、または etcd などのレジストリでマスター選択を行うときに、2 つのマスターが同時にアクティブになるのを防ぐにはどうすればよいですか?
tl;dr
Zookeeper、Consul、または etcd などのレジストリのいずれかを使用してマスター選出を実装した場合でも、古いマスターがそれがもはやマスターではないことを認識せず、書き込みを試みる競合状態が常に存在するようです。書き込みのブロックが解除され、サービスの 2 つのインスタンスが同時に書き込みを行うことになりますが、これは避けたいと考えています。この競合状態なしでマスター選出を実装するにはどうすればよいでしょうか?
詳細な問題の説明
Zookeeper、Consul、etcd などのレジストリのいずれかを使用して、フェイルオーバー用のマスター選出を実装するとします。
サービス S1、S2、S3 の 3 つのインスタンスがあり、それぞれが同じマシン上に対応するレジストリ ノードを持ち、現在 S1 がマスターで、S2 と S3 がスレーブであるとします。
さらに、S1、S2、S3 はすべて共有状態をレジストリに保存しますが、同時アクセスによって状態が矛盾する可能性があるため、複数のインスタンスが同時にその状態を書き込むことは望ましくありません。
S1 が、レジストリに格納されている共有状態への書き込み操作の最中であるとします。つまり、リーダーであるかどうかを再度確認する前に、さらに書き込み操作を実行します。
この時点でネットワーク パーティションがあるとします。1 つのパーティションは S1 です。もう一方のパーティションは S2 と S3 であるため、クォーラムがあります。
レジストリは、S2 を新しいリーダーとして正しく識別し、S1 をリーダーとして無効にします。
S2 は新しいリーダーであるためアクティブになり、レジストリに格納されている共有状態への一連の書き込み操作を開始します。
パーティションが修復されます。
この時点で、S1 と S2 の両方が同時にレジストリへの書き込み操作を実行し、パーティションが修復されるため両方の書き込み操作が成功し、一貫性のない状態になる可能性があります。
サンプル トレースは次のとおりです。
- S1 はマスターであることを通知され、レジストリの共有状態への書き込み操作を開始します
- パーティションが発生し、S1 が一方のパーティションに、S2 と S3 が他方のパーティションに
- S2 は新しいマスターとして識別されます
- S2 は新しいマスターであることが通知され、レジストリの共有状態への書き込み操作を開始します
- パーティションが修復されました
- S1 はレジストリの共有状態に書き込み、パーティションがないため成功します
- S2 はレジストリの共有状態に書き込み、これも成功するため、S1 との書き込みが任意にインターリーブされます。
- S1 はマスターではなくなったことを通知され、書き込みを停止します
考え
- Consul のセッションの観点から考えると、セッション ID も取り、そのセッション ID がまだマスターのものである場合にのみ成功する API 書き込み呼び出しは、この問題を解決しますか?
- Consul または他のレジストリにそのような呼び出しはありますか?
redis - etcd - etcd を使用して pubsub をセットアップすることは可能ですか?
すべての docker コンテナーに適用可能な構成パラメーターを格納するように etcd / redis をセットアップしたいと思います (現在、単一のホスト内のみ)。
pub/sub メカニズムも非常に必要です。これにより、特定のコマンドを簡単に発行できるようになります (すべてのコンテナーに対する「do git pull」、「特定の共通機能の無効化/有効化」など)。
私は etcd (OOB curl ベースの set/get、17MB の Docker イメージ) が本当に好きですが、今のところ etcd のさまざまな可用性、サービス検出機能は必要ありません。私が理解しているように、etcd を使用した pub/sub api はありません (キーを監視するのが最も近い)。
etcd を使用して pub/sub メカニズムを効果的に実装できるかどうかをアドバイスしてください。それ以外の場合は、今のところ redis を使用できます。
etcd - etcdctl ではデータを取得できませんが、curl では取得できます
次のように、curl を使用して etcd からデータを取得できます。
しかし、 etcdctl を使用して etcd2 からデータを取得できません:
誰が私を助けることができます?
kubernetes - Pod レプリカ間で etcd クラスターを実行する方法は?
etcd を同期システムおよびデータストアとして使用するアプリケーションを実行しているポッド/サービスがあります。すべてのレプリカが一貫したクラスターを形成するように、ポッド内で etcd を実行したいと考えています。つまり、レプリカ #1 のアプリケーションが "foo" を書き込むことができ、その結果localhost:4001/v2/keys/my_key
、レプリカ #2 が "foo" を読み取っlocalhost:4001/v2/keys/my_key
て取得できます。
ポッドのレプリカは個別にアドレス指定できないため、これを行う方法は明確ではありません。理論的には、クラスター ポートを公開する「etcd」サービスを作成できますが、すべてのリクエストがすべてのレプリカにラウンドロビンされるため、個々の etcd ノードがお互いを見つけることができません。
この問題に正しい方法で取り組んでいますか?