web-dev-qa-db-ja.com

サーバー間でソースを同期するためのベストプラクティス(Amazon EC2)

単一のアプリサーバーから負荷分散された構成に移行しています。

単一サーバー構成では、数分ごとにS3 cmd sync s3でソースを同期し、ホストアップ(Scalrイベント)ではS3からソースを同期し直しました。これにより、サーバーは更新されたソースを実行します。

アプリサーバーの数が動的である場合のベストプラクティスは何ですか?

2台のサーバーがあり、サーバーAが更新されたソースを取得するとします。同期スクリプトが最初にBで実行される場合、サーバーAは、その逆ではなく、Bから古いファイルを取得します。

この場合のベストプラクティスは何ですか?

1
Niro

ストレージを一元化するために使用される主なプロトコルは次のとおりです。

  • [〜#〜] sshfs [〜#〜] --SSH経由ですべてを転送するため、安全であり、インターネット経由で問題なく使用できます。 SSHは、必要に応じて透過圧縮をサポートします。ただし、SSHFSを機能させるのは難しい場合があります。

  • [〜#〜] nfs [〜#〜]-本質的に安全ではなく、IPアドレスを使用して権利を区別しますが、通常は非常に簡単に機能します。

個人的には、SSHFSを試し、それが機能しない場合はNFSにフォールバックします。

2
Soviero

ソースが何を意味するのかはわかりませんが、サーバーが提供しているWebアプリケーションコードを意味していると思います。

これに対する最善の解決策は、共有ネットワークファイルシステムを使用して、ソースを動的に更新し続けることです。最も人気のある2つは [〜#〜] nfs [〜#〜]GlusterFS です。

0
Kyle

inotifyinotifywait)および/またはrsyncを使用できます。ファイルの数、更新の頻度、およびファイルの大きさによって異なります。

0

マスターソースをS3に配置します。起動時にすべてのサーバーを同期(S3からプル)するだけにします。

サーバーを更新する場合:

  1. S3を更新する
  2. 新しいインスタンスを開始します(開始時にS3からプルします)
  3. 古いバージョンを実行している古いインスタンスを停止および/または終了します
0
Matt Houser