web-dev-qa-db-ja.com

複数のサーバーへのファイルの展開

/srv/wwwにあるserver-1にファイルの中央リポジトリがあります。次に、サーバーの数もNです。 server-1が/srv/www内のファイルをすべてのサーバーにできるだけ迅速かつ効率的に展開できるようにしたいと考えています。

Rsyncのようなものはありますが、単一のターゲットを指定する代わりに、ターゲットのクラスター(Nサーバー)を指定しますか?

gitが機能するかもしれないと思っていましたが、プッシュする複数のリモコンを指定することもできますか?

N台のサーバーが最終的に数百台に達する可能性があると仮定すると、最善の解決策は何ですか。

11
Justin

さて、 TwitterFacebook の両方が、新しいコードリビジョンを配布するためにクラスターでbittorrentを使用し始めました。これにより、従来の集中型の展開方法と比較して、非常に短い時間で数万台のサーバーにコードをプッシュできます。

まだその規模ではないように思えますが、すぐにボトルネックになることがないようにデプロイメントシステムを設計しても害はありません。

14
EEAA

私はあなたが話しているスケールにgitをお勧めしません。うまくいくかもしれませんが、個人的には、このモデルをフェッチに使用することでいくつかの欠点が見られます。

これについて最善の方法を決定するいくつかのことがあります。

  1. 共有する必要のあるレポの大きさ。
  2. 収束するのに必要な速度。

完全なコンバージェンスと最高速度を得るには、NFSv4などのネットワークファイルシステムを使用する必要があります。私が知っているクラスター化されたファイルシステムは、「数百」のノードに拡張できないため、ネットワークファイルシステムである必要があります。これには独自の課題がありますが、NFSヘッドでファイルが更新された瞬間に収束に到達することを意味します。

迅速な収束のために、いくつかのrsyncトリックを使用できます。 rsyncデーモンがCPUにバインドされてしまう場合は、haproxyのようなロードバランサーの背後に2〜3台のrsyncサーバーを配置できます。これをcronジョブと組み合わせてデータ(またはコードの更新をトリガーする他の方法)をプルすると、収束が非常に速くなります。

上記の両方について、最大のスループットを得るために、中央リポジトリを10GbEリンクに配置することをお勧めします。

別の方法はPush-rsyncで、中央リポジトリからサーバーに更新をプッシュするために実行されます。上記のいずれよりも速く収束することはありませんが、内部帯域幅により適しています。速度を上げるために、分割された範囲にプッシュする複数のホストを使用します。

7
sysadmin1138

rdist あなたのために働くかもしれません。

1
Scott