web-dev-qa-db-ja.com

多くのサーバーのシステム更新

多くのサーバーがありますが、それでもすべてを更新したいと考えています。実際の方法は、システム管理者のいずれかがサーバーからサーバーに移動してaptitude update && aptitude upgradeを作成することです-それはまだクールではありません。

私は今、さらに優れた非常にスマートなソリューションを探しています。人形はこの仕事をすることができますか?どうやってやるの?

11
Dennis Wisnia

次のようなexecタイプを使用できます。

exec { "upgrade_packages":
    command => "apt-get upgrade -q=2",
    path    => "/usr/local/bin/:/bin/:/usr/bin/",
    # path  => [ "/usr/local/bin/", "/bin/" ],  # alternative syntax
}

正直なところ、私は自分で試したわけではありませんが、そのようなexec定義を含む新しいモジュールを作成する必要があると思います。

apt-get upgradeコマンドはインタラクティブです。静かに実行するには、上記のようにオプション-q=2を追加できます。

10
Khaled

すべてのホストがdebianの場合、無人アップグレードパッケージを試すことができます。

http://packages.debian.org/sid/unattended-upgrades

ここでは、Puppetを使用してDebian仮想マシンを管理してきました。Puppetを使用すると、すべてのサーバーで不要なアップグレード構成を有効にして管理できます。

最近、私たちのチームはすべてのサーバーでコマンドを実行するためにmcollectiveツールをテストしていますが、mcollectiveを使用するにはRubyスキルが必要です。

[s]ぐと

7
gutocarvalho

Puppet、facter、mCollectiveに行くことをお勧めします。

mCollectiveは、facterをフィルターとして使用して、一連のホスト上で(並列に)コマンドを実行できる非常に優れたフレームワークです。

これにローカルプロキシ/キャッシュを追加すると、サーバー管理の準備が整います。

5
CloudWeavers

複数のサーバーで単一のコマンドを実行するように作成されたツールを使用します。そしてそれは、ターミネーターやClusterSSHで数千万の端末を開くことを意味するのではなく、その代わりに、ジョブに適したツールを実行する管理サーバーへの単一の端末を持つことを意味します。

このコンテキストでは、func、Salt、またはmCollectiveをお勧めします。既にPuppetがある場合は、mCollectiveを使用してください(Puppetにうまく統合されます)。そうでない場合で、古いPythonがマシンにある場合は、funcを楽しむことができます。新しいPythonの場合は、Saltを試してください。これらすべてツールは、コマンドラインで指定されたコマンドを非同期で実行します。これは、シーケンシャルsshループや、umpteenターミネーターウィンドウでumpteenサーバーに対して同じaptitudeコマンドを実行するよりもはるかに楽しいです。

あなたは間違いなくlove でしょう。

3
wzzrd

ですから、良い解決策に貢献するものはたくさんあると思います。

  • 帯域幅
  • 管理のしやすさ
  • 何かが失敗した場合の詳細なログ。

Bandwidth:基本的に、帯域幅を節約するための2つの選択肢が思い浮かびます:

  • Debianミラーを設定し、このミラーを使用するようにすべてのクライアントを設定します。詳細については、 http://www.debian.org/mirror/ を参照してください。 (私はこれをお勧めします)
  • プロキシ(apt-cacher、apt-proxy、またはSquid)を設定し、キャッシュを増やして、すべてのクライアントがこのキャッシュから利益を得ることができるようにします

Administration[〜#〜] pdsh [〜#〜]のような並列シェルを構成します[〜#〜] pssh [〜#〜]GNU Parallel 以前にサンプルマシンでコマンドをテストした場合は、すべてのクライアントでコマンドを発行します。そうすれば、他のすべてで失敗する可能性はほとんどありません。または、すべてのクライアントでcronジョブを検討することもできますが、自動的に失敗する可能性があるため、最初の解決策をお勧めします。

アップグレードの同時性が心配な場合は、atを使用してコマンドをスケジュールできます。

Logging:並列シェルと同様に、出力をリダイレクトする可能性があります。stderrとstdoutを組み合わせて、ログファイルに書き込みます。

2
math

Execを使用した答えはかなり役に立ちます。

ただし、apt-getマニュアルによると、この方法で-q = 2を使用することはお勧めできません(私は何年も問題なく使用してきましたが)

-q, --quiet
       Quiet; produces output suitable for logging, omitting progress indicators. More q's will produce more quiet up to a maximum of 2. You can also use -q=# to set the
       quiet level, overriding the configuration file. Note that quiet level 2 implies -y, you should never use -qq without a no-action modifier such as -d, --print-uris or
       -s as APT may decided to do something you did not expect. Configuration Item: quiet.

私は何年もの間自分でスクリプトを使用し、apt-getを次のように実行しています。

ssh example.org "apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get clean"

人形やその他の人々が確かに言及した他のツールのようなものは確かに機能するかもしれませんが、基本的に人間が入力したいくつかのコマンドを模倣しているだけではやり過ぎのようです。特定のジョブに最も単純なツールを使用することを信じています。この場合、bashスクリプトは、機能を失うことなく、ほぼ同じくらい単純です。

1
aseq

Fabric を使用できます。ファブリックは、Python(2.5-2.7)ライブラリおよびコマンドラインツールであり、アプリケーションのデプロイメントまたはシステム管理タスクでのSSHの使用を効率化します。

1
freeman

何年もの間、私は apt-dater を使用してパッケージをアップグレードしてインストールしてきました。これは、リモートパッケージ管理のための軽量で効果的なツールです。 screenSudo、およびsshを使用します。
パッケージ管理の場合 apt-dater 構成管理ツールよりも簡単なソリューションかもしれません。
apt-dater は、DebianやCentOSなどのさまざまなGNU/Linuxフレーバーでの集中パッケージ管理に便利です。

1
Onlyjob

私自身の並列sshラッパー: classh は、さまざまな並列およびクラスターsshツールに代わるものです。

あなたはそれをより良く好むかもしれないし、嫌いかもしれない。ここで言及する理由は3つだけです。

  • インストールと使用は非常に簡単です。Python 2.5標準ライブラリ以外の外部依存関係がない単一の.pyファイル。
  • それはその限界内で非常に信頼できます。私はそれを毎日、多くの場合1日あたりほぼ100回、通常はコマンドあたり数百から数千のターゲットのコレクションで使用します。 (私は一度に25,000台を超えるサーバーのターゲットリストでテストしました)。実行に失敗したり、完了に失敗したり、不確定な動作が発生したりすることはありません。 (Python subprocess.communicate()メソッドの制限に関連する唯一の制限---したがって、64dまでのstdoutと、最大64Kまでのstderrのみをキャプチャできます。例;また、stdinから読み取ろうとするリモートプロセスは、ローカルのsshサブプロセスが強制終了されるまで、classhのタイムアウト処理によって自動的に停止します。
  • classh.pyをモジュールとして使用するカスタムスクリプトをPythonで作成するのは非常に簡単です。したがって、次のようなものを書くのは非常に簡単です。

    
        !#/bin/env python
        import classh
        job = classh.SSHJobMan(cmd, targets)
        job.start()
        while not job.done():
            completed = job.poll()
            for i in completed:
                # do something with the classh.JobRecord object referenced by i
        # done

    # You can optionally do post-processing on the dictionary of JobRecords here # keyed off the target strings (hostnames) </code></pre>

これですべてです。たとえば、入れ子の完了したループでは、特定の終了ステータスを返したすべてのリストまたは特定のエラーメッセージをスキャンするリストを収集し、それらを処理するフォローアップジョブを設定できます。 (ジョブは同時に実行されます。デフォルトでは、それぞれが完了するまでいつでも100ジョブです。したがって、通常、数百のホストでの単純なコマンドは数秒で完了し、非常に複雑なシェルスクリプトは単一の長いコマンド文字列で完了します。 。50行ほど言うと...数千のホストを約10分で完了できます...私の環境では1時間あたり約10Kのホストがあり、それらの多くは大陸間で配置されています)。

したがって、これは、パペット構成を実装して十分にテストするまで、アドホックな手段として使用できるものかもしれません...また、ホストのアドホック調査を実行して、どのホストが標準から逸脱しているかを確認するのにも非常に役立ちます。さまざまな小さな方法。

1
Jim Dennis

すべてのホストがDebian(または派生物)を実行している場合の別の解決策は、 cron-aptパッケージ を使用することです。ただし、ドキュメントで提案されているように、少し注意が必要です。

現在、多数のサーバーでcron-aptを使用して、すべてのセキュリティ更新を自動的に無人で実行しています。不要なアップグレードを回避するために、Debian安定ディストリビューションを実行するサーバーでのみcron-aptを使用し、aptソースを構成するようにしているので、ディストリビューション名wheezy、エイリアスではありません(安定)。

私が使用する特定のcron-apt構成は、1つのアクションファイルに要約されています:/etc/cron-apt/action.d/5-install

dist-upgrade -y -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null"

その他のアップグレードは、アップグレード中に手動で介入する必要がある場合があるため、画面または最も適切なものを使用して手動で実行されます。

0
Tonin

webmin 、、、を使用し、そのwebminクラスター機能を使用します。この機能では、すべてのシステムを1つのwebminコンソールに追加し、任意のコマンドを発行するか、すべてを1か所から制御できます。

または

Clustersshを使用する

または

PSSH

0
Farhan