/srv/www
にあるserver-1にファイルの中央リポジトリがあります。次に、サーバーの数もNです。 server-1が/srv/www
内のファイルをすべてのサーバーにできるだけ迅速かつ効率的に展開できるようにしたいと考えています。
Rsyncのようなものはありますが、単一のターゲットを指定する代わりに、ターゲットのクラスター(Nサーバー)を指定しますか?
git
が機能するかもしれないと思っていましたが、プッシュする複数のリモコンを指定することもできますか?
N台のサーバーが最終的に数百台に達する可能性があると仮定すると、最善の解決策は何ですか。
私はあなたが話しているスケールにgitをお勧めしません。うまくいくかもしれませんが、個人的には、このモデルをフェッチに使用することでいくつかの欠点が見られます。
これについて最善の方法を決定するいくつかのことがあります。
完全なコンバージェンスと最高速度を得るには、NFSv4などのネットワークファイルシステムを使用する必要があります。私が知っているクラスター化されたファイルシステムは、「数百」のノードに拡張できないため、ネットワークファイルシステムである必要があります。これには独自の課題がありますが、NFSヘッドでファイルが更新された瞬間に収束に到達することを意味します。
迅速な収束のために、いくつかのrsyncトリックを使用できます。 rsyncデーモンがCPUにバインドされてしまう場合は、haproxyのようなロードバランサーの背後に2〜3台のrsyncサーバーを配置できます。これをcronジョブと組み合わせてデータ(またはコードの更新をトリガーする他の方法)をプルすると、収束が非常に速くなります。
上記の両方について、最大のスループットを得るために、中央リポジトリを10GbEリンクに配置することをお勧めします。
別の方法はPush-rsyncで、中央リポジトリからサーバーに更新をプッシュするために実行されます。上記のいずれよりも速く収束することはありませんが、内部帯域幅により適しています。速度を上げるために、分割された範囲にプッシュする複数のホストを使用します。
rdist あなたのために働くかもしれません。