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


11

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

私は今でも優れたソリューションを探しています。人形はこの仕事をすることができますか?どうやってやるの?


はい、人形はこれを行うことができます。csshは短期的にも問題を解決します。
Sirex

回答:


10

次の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上記のオプションを追加できます。


よさそう!これを試すために、いくつかのテストマシンでPuppet Usecaseを作成すると思います。どうもありがとう!
デニスウィスニア

3
Puppetを推奨するための+1!システム管理者としてのあなたの人生を変える:)
アントワーヌベンケモン

3
このexecは、Puppetを実行するたびに(30分ごとに)実行されることに注意してください。これにより、「サーバーがたくさんある」場合、プロキシやミラーがかなりハードになる可能性があります。個人的には、上記のexecタイプのスケジュールを実装することをお勧めします。たとえば、夜間のみ実行されるようにします。私の意見では、Puppetはシステム状態を強制することを意図しており、upgrade_packagesのようなコマンドを人間の監視なしで実行することは、少し怖いだけでなく、Puppetの悪用でもあります。Puppet Enterpriseに付属しているmColectiveツール(または同等のオープンソース)は、より良いオプションかもしれません。
wzzrd

7
puppetのインストールには、ファイルのタイムスタンプをチェックし、クライアントのバージョンよりも新しい場合にのみアップグレードを実行する同様のexecがあります。すべてをアップグレードする場合はtouch、そのファイルをパペットマスターに保存します。
ラダダダダ

@wzzrd:良い点ですが、ラダダダダが言ったように外部条件をチェックすることで改善できます。
ハレド

7

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

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

ここでは、puppetを使用してdebian仮想マシンを管理していますが、puppetを使用すると、すべてのサーバーで未アップグレードの設定を有効化および管理できます。

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

[s]グート


5

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

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

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


私は同意します、Puppetは実際には大量/組織的なパッケージ更新のような管理アクションを管理するための最良のツールではありません。
-robbyt

3

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

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

あなたは間違いなく塩を愛する でしょう。


2

だから私は良い解決に貢献する多くのものがあると思います:

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

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

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

管理:以前にサンプルマシンでコマンドをテストした場合、PDSHPSSHGNU Parallelなどのパラレルシェルを構成し、すべてのクライアントでコマンドを発行します。その後、他のすべてで失敗する可能性はほとんどありません。別の方法として、すべてのクライアントでcronジョブを検討することもできますが、自動的に失敗する可能性があるため、最初のソリューションをお勧めします。

アップグレードの同時性について懸念がある場合は、コマンドをスケジュールすることができます at

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


帯域幅:debリポジトリ専用のキャッシュプロキシがあります。apt-cacherまたはapt-proxyを探してください。
S19N

これを答えに統合します。
数学

また、mCollectiveなどのソフトウェアは、並列コマンドの実行を許可し、出力/結果を報告します。
CloudWeavers

1

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

あなたはそれを好むかもしれませんし、嫌うかもしれません。ここで言及している理由は3つだけです。

  • インストールと使用は非常に簡単です。Python2.5標準ライブラリを超える外部依存関係のない単一の.pyファイル。
  • 制限内で非常に信頼性が高い。私は毎日仕事をしますが、多くの場合、1日にほぼ100回、通常はコマンドごとに数百から数千のターゲットのコレクションに使用します。(一度に25,000台をはるかに超えるサーバーのターゲットリストでテストしました)。実行に失敗したり、完了に失敗したり、不確定な動作が発生したりすることはありません。(Python subprocess.communicate()メソッドの制限に関連する唯一の制限---たとえば、約64Kのstdoutと、個別に最大64Kのstderrのキャプチャのみを取得できます。また、stdinから読み取ろうとするリモートプロセスは、すべて停止します)classhのタイムアウト処理により、ローカルsshサブプロセスが強制終了されるまで)
  • 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ジョブのデフォルトで同時に実行されます。したがって、通常、数百のホストでの単純なコマンドは数秒で完了し、非常に複雑なシェルスクリプトは1つの長いコマンド文字列で完了します.. 50行程度と言うと...数千台のホストを約10分で完了することができます...私の環境では1時間あたり約1万台のホストがあり、それらの多くは大陸間にあります)。

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


ちなみに、クラスのWebページのbitbucket.orgには、自分で書くことを決める前に調査した他のさまざまなsshラッパーのリストもあります。それらのどれでもあなたのために働くかもしれません。さらに、より大規模で少し複雑な機能を備えた類似の新しいプロジェクトであるPython Fabricを調べることもできます。
ジム・デニス

1

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スクリプトは機能を失うことなく取得するのと同じくらい簡単です。


はい、一部のサーバーにとっては良い方法だと思います。しかし、さらにいくつかのオプションを取得する必要がある場合(各サーバーでいくつかの構成を展開するなど)、そのパペットは本当に良い方法です。人形とその美しい上の現時点での私の仕事...
デニスWisnia

私は同意しません。しかし、ポスターがそれについて尋ねていた目的のために、やり過ぎかもしれません。
aseq

1

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


1

Fabricを使用できます。Fabricは、Python(2.5-2.7)ライブラリおよびコマンドラインツールであり、アプリケーションの展開またはシステム管理タスクのためのSSHの使用を合理化します。


0

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

または

クラスターsshを使用する

または

PSSH


はい、たくさんのウィンドウを開くことができ、並行して作業できます。クラスターSSHはかなりクールですが、十分にスマートではないと思います。
デニスウィスニア

0

すべてのホストが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"

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.