web-dev-qa-db-ja.com

ネットワーク上の複数のホストにファイルをコピーする方法は?

ファイルをコピーしたい200以上のUbuntuシステムがあります。

ネットワーク上の複数のホストにファイルをコピーするにはどうすればよいですか?どのような可能性がありますか?

注:この質問は buntuマシンのバージョンをリモートで見つける方法?に関連しています

3
karthick87

あなたはおそらくシンプルなものだけが欲しいと思うのですが、これを行う方法はたくさんあります。しかし、最初にすべてのコンピューターを一度に制御できるようにしたいと考えています。

これは奇妙な方向に思えるかもしれませんが、シャットダウン、再起動、すべてのコンピューターへのアップグレードを送信する時間を節約できます。

clusterssh

clustersshをインストールして、すべてのサーバーに一度に接続するコマンドを実行してみましょう(これは一度に200台では実行できない場合があります。テストするコンピューターが200台ありません!)

Sudo apt-get install clusterssh
cssh user@first_computer:port user@second_computer:port ...

これにより、接続ごとに小さな出力ウィンドウが生成され(200がストレッチであると言う理由)、1つのグローバル入力ダイアログが表示されます。そこから、同じコマンドをすべてのサーバーに送信できます。

コマンドラインから実行したい場合、これが200接続をサポートする可能性がある場合、cssh-aフラグを確認できます。各サーバーにコマンド(またはコマンドの文字列)をスローできます。接続し、実行し、接続を閉じます。

cssh -a 'cd directory; ls'  user@first_computer:port user@second_computer:port 

clustersshの強力な構成を使用して、接続を簡素化できます。 man csshを開き、FILESセクションに進みます。 /etc/clustersファイルを作成して、次のようなグループ(タグと呼ばれる)をすばやく作成する方法を説明します。

clusters = <tag1> <tag2> <tag3>
<tag1> = Host1 Host2 Host3
<tag2> = user@Host4 user@Host5 Host6
<tag3> = <tag1> <tag2>

その後、次のことができます。

cssh -T 'tag2' -a 'cd directory; ls'

中央リポジトリを使用する

私はdebレポを意味するわけではありません(しかし、それも可能だと思います)、むしろgitまたはbrzのようなものです。 Webサーバーやネットワーク共有のような単純なものでもかまいません。ネットワーク帯域幅に場所のボトルネックがある場合、トレントサーバーのようなものが最良のコースである場合もあります(Facebookがすべてのノードを更新する方法です)

ネットワークにファイルをダウンロードするように指示します

ここからは、ドットをつなぐだけです。 csshを使用すると、すべてのコンピューターにファイルを取得し、必要な処理を実行するように指示するだけです。

小さく始めることをお勧めします。ファイルを共有してから、2、3台のコンピューターの単純なクラスターを試して、それがどうなるかを確認します。それを展開します。

メイングループに物事をプッシュする前に、テストが完了した後でも、テストのために数台のコンピューターのクラスターを保持することをお勧めします。

3
Oli

または、プッシュベースのままにしておくこともできます。その最も簡単な方法は、次のようなスクリプトを書くことです。

  1. サーバーのリストを反復処理します
  2. サーバーに接続し、ファイルをコピーします(ここでは2つのオプション)。

    1. sshfsを使用してリモートファイルシステムをローカルにマウントし、cp/rsyncを使用して、fusermount -uマウントしたディレクトリ(リモートシステムをアンマウントするため)。継続する。
    2. rsyncのネットワーク機能を使用して、ファイルをコピーします。

      rsync /localdir/ user@remote:/remotedir
      
3
Oli

[入力中にオリの答えが出ました]

Clustersの代替手段はparallel-scpです。 psshパッケージ の一部です

ホストのリストをテキストファイル(hosts.txtなど)で提供する必要があります。次に、次を発行します。

parallel-scp -h hosts.txt file2copy.dat /target/directory

Manページを参照して、特定のニーズに対応してください。これは、csshが連続して試行するため、すべての接続をライブで開く必要がないため、接続が多すぎる場合に制限に達することはありません。

PS:鍵ベースの認証を設定すると、もちろんこれがはるかに簡単になりますが、最初に200台のシステムに鍵を配布することが、この質問をしている理由かもしれません...

1
DrSAR