web-dev-qa-db-ja.com

ジュジュのサービス関係をきめ細かい単位レベルで管理するにはどうすればよいですか?

私のサービスレシピ:DBサーバー<->アプリサーバー<-> Webリバースプロキシ。

私の関係要件は次のとおりです。

  • DBサーバー関連の1ユニットアプリケーションサーバーの1(特定の)ユニット
  • すべてのアプリケーションサーバーに関連する1ユニットのWebリバースプロキシ

以下にJujuコマンドのシーケンスを示します。これは私の場合に発生します

期待される手順は次のとおりです(間違っている場合は修正してください):

フェーズ-インストール

  1. Dbをデプロイする
  2. AppServerをデプロイする
  3. Webリバースプロキシを展開する
  4. リレーションAppServerをDbに追加します
  5. リレーションWebリバースプロキシをアプリケーションサーバーに追加します

フェーズ-スケーリング

  1. ユニットDbを追加
  2. ユニットアプリケーションサーバーの追加(問題のステップ):ああ、いや!チャームメタデータのProvides/Required設定に基づく自動動作は必要ありません。ここでは、ユニットレベルでアプリサーバーとDbの関係を指定したいと思います。

理想的には、relation-xxxフックがDbの新しいユニットでのみ起動するようにします。 deploy ?に対して提案されたものと同様のユニット追加パラメータ受け渡しメカニズムである可能性があります。

現在の機能を考慮した回避策についての私の考えは次のとおりです。

  • 1つの方法は、コールバックで条件付き実行することです。すでにリモートユニットに関連しているかどうかを確認し、着信関係が追加/変更されたコールバックを無視します。散らかってしまいます。サービスの再起動がバグである可能性がある場合、各dbアプリユニットペアの起動シーケンスの原因を慎重に管理する必要があります。そうしないと、間違ったアプリサービスが間違ったdbサービスと通信します。私はすでにJujuをバックエンドサービスとして使用しており、pythonスクリプトでjujucliを管理しています。
  • もう1つの方法は、アプリサーバーとデータベースのペアに共通する特定のコードがあることです。デプロイ後フェーズのsetコマンドと同様に、これを使用して、ユニットの追加後に特定のサービスインスタンスに値を設定できますか?

  • もう1つのオプションは、コンテナースコープを持つ従属サービスですが、Dbをアプリサーバーのマシンインスタンスではなく、別のマシンインスタンスとして使用したいと考えています。

Webプロキシに関しては、フックが起動されることを期待しているので、プロキシは新しいアプリサーバーをバックエンドとして追加できます。現在のJujuの動作は理想的です。

これを実現するための最適な方法を楽しみにしています。前もって感謝します..

3
Antojk

2つのアプリサーバーを一意のデータベースサーバーに一意にバインドする必要があるように思えます。これは、それらが実際には2つの別個のサービスであることを意味します。これは理にかなっているかもしれません:

juju deploy mysql app1-db
juju deploy app app1
juju deploy mysql app2-db
juju deploy app app2
juju add-relation app1-db app1
juju add-relation app2-db app2

これにより、app1とapp2の両方が独立しているようになります(同じ魅力がありますが)。これはあなたが望むものだと思います。両方を同じhaproxyから負荷分散する場合:

juju deploy haproxy app-reverse-proxy
juju add-relation app1 app-reverse-proxy
juju add-relation app2 app-reverse-proxy

古いバージョンのhaproxyはこれを処理できなかったことに注意してください(チャームリビジョン23より前)。

修正を追跡したバグは次のとおりです。

https://bugs.launchpad.net/charms/+source/haproxy/+bug/1029078

3
SpamapS