web-dev-qa-db-ja.com

Linuxバルク/リモート管理

内部ITインフラストラクチャに加えて、オンライン世界向けのサービスをホストする約500台のLinuxマシンがあります。それらは、データベースA-n、製品A-n、NFS、バックオフィスなどのクラスターの束にグループ化されます。さらに、弊社の仕様と要件に従って、外部プロバイダーによって管理されます。

ただし、(Web)ソフトウェアの開発、ロールアウト、および展開中に多くの問題に直面します。特に、開発環境とステージング環境には、ライブシステムとほとんど共通点がないためです(厄介な詳細は割愛します)。 。

したがって、私は仮想マシンを作成しようとし、さまざまなライブシステムをできるだけ正確にコピーして、それらに接続する準備をしました。開発者にとって透過的に「実際の」データベースの代わりに開発データベース(それらはrootではありません)。これはかなりうまくいきますが...

それらのシステムをリモートで管理するにはどうすればよいのか一括で?私が知らないソフトウェアファミリはありますか?または、少なくとも、知っておくべきいくつかのテクニックや原則はありますか?

すべての開発者に、ローカルで実行する一連のイメージ(VirtualBox)を提供します。 QA部門仮想クラスター(XENまたはHyper-V)を取得します。追加のサーバーモジュールを提供する必要がある場合、新しいデータベース接続を再ルーティングするか、パッケージマネージャーによって提供されるすべてを更新したい場合...すべてのシステムへのログオンを強制せずにそれを行う方法同僚にフィクスチャスクリプトをダウンロードして実行するように依頼しますか?

解決策はたくさんあると思います。まあ、どういうわけか私は検索エンジンに正しいキーワードを入力するにはあまりにも愚かです...またはこの問題はそれが聞こえるほど些細なことではありませんか?

記録のために:

  • ほとんどすべてのシステムがDebianGNU/Linux6.x「スクイーズ」を実行しています
  • ワークステーションで特定のOSの使用を強制される開発者はいません
  • もちろん予算は限られていますが、独自のソフトウェアを購入するには小さすぎます
  • 前述のプロバイダーが関与するソリューションが推奨されます
10
mjhennig

それはあなたが正確に何を必要とし、何を探しているかによります。しかし、一般に、「 構成管理 には、次のような複数のソリューションがあります。

  1. 人形
  2. シェフ
  3. cfengine
  4. ansible

個人的には、大きなコミュニティと外部から提供されたレシピがたくさんある人形をお勧めします。これにより、システムを自動的に構成および管理できます。これを独自のリポジトリや自動更新と組み合わせると、 unattended-upgrades システムを自動的に更新できます。

別の解決策は、必要なソフトウェアに自動的に依存し、システムを自動的に構成できるcompany-baseなどの独自のパッケージを提供することです。

また、自動化された展開(ベアボーンおよび仮想化)も検討する必要があります。これを構成管理または独自のリポジトリと組み合わせると、システムを簡単に自動化して再インストールできます。自動インストールを開始したい場合は、 theforman を参照してください。これは、libvirtとベアボーンのインストールをサポートし、パペットのサポートを統合しています。自分で実行したい場合は、 kickstart (redhat et。al。)または「preseeding」を調べて、システムを自動的に構成できます。 Debianの場合、 debootstrap または grml-debootstrap という名前のラッパーを使用して、仮想化イメージをサポートすることもできます。

開発者にVirtualBoxイメージを提供するのに役立つ vagrant を見てください。これにより、VirtualBoxをサポートするシェフ、パペット、シェルスクリプトを使用して仮想化システムの作成を自動化し、仮想環境をカスタマイズできます。

既存のプロバイダーによるソリューションを使用する場合は、プロバイダーがシステムをどのように管理しているかを尋ねる必要がありますが、おそらく何らかの構成管理になるでしょう。構成サーバーにアクセスできる場合は、システムでエージェントを実行できる可能性があります。

Googleキーワードについては、devopsconfiguration managementit automation、およびserver orchestrationを調べてください。

要するに、可能な限り自動化し、手動で行うことさえ考えないでください。

15
Ulrich Dangel

Ulrichは、ソフトウェアの展開と自動サーバーセットアップに関する回答をすでに提供しています。

この背後にある原則は

  • サーバーがどのように見えるかを定義します-これには、デフォルトでインストールされる一般的なソフトウェア、パーティション設定スキーム、ファイルシステムレイアウトが含まれます
  • 運用サーバー、ステージングサーバー、テストサーバー、および開発サーバーは、これらの基本的な標準に関して異ならないようにする必要があります(そうしないと、後で問題が発生します-あなたがしたように)
  • 適切な変更管理を使用して、行ったすべての変更を文書化します(任意の構成での小さな1行の変更を含む)
  • 常に最初にテストで、次に開発で、次にステージングで、本番で最後に変更しますか

大量のサーバーを管理するための便利なツールを求められました。私の個人的なお気に入りはcluster-ssh(cssh)です。一度入力すると、多くのサーバーで同時に変更を行います。

問題を発見し、問題を解決する修正がある場合:

  1. それが実際に機能する場合は、テスト/開発/ステージング/製品(上記を参照)に修正を適用します
  2. 仮想テンプレートに修正を適用して、将来のVMクローンにそのバグが発生しないようにします
  3. 物理的なインストールプロセス(キックスタート/オートヤスト/その他)に修正を適用します
  4. すべてのサーバーに修正を適用します

修正するために大量のサーバーに直面している場合、これは十分に文書化する必要があるプロセスであり、最後に別のチームが修正が完全に適用されているかどうかを確認する必要があります。

そのために、Mantis(オープンソース、PHP)を採用しています。

3
Nils

私は複数の国で約30の製品と数百のサーバーを管理しています。私はソフトウェア構成マネージャーなので、(設計により)ルートアクセスがなく、データベースやそのサーバーに(設計により)触れないでください。また、企業のセキュリティのために多くのフープにジャンプする必要があります。ただし、データベースリンクや変更を含め、テスト、ステージング、本番環境で構成を管理しています。 sshpythonとシェルスクリプトの組み合わせを使用してサーバーに送信する多数のスクリプトがあります。

考えるべき主なことは次のとおりです。

  1. サーバーとどのようなやり取りをしますか?ファイルのアップロードだけですか?コマンドラインプログラムを実行していますか?リモートXクライアントを実行していますか?
  2. これらのサーバーにアクセスするには、どのレベルのセキュリティが必要ですか?ファイアウォール、安全なネットワーク、VPN? sshで十分で、中央の安全な場所からですか?
  3. 各サーバーでどれだけ自動化できますか?各サーバーにプログラムをインストールして実行できますか、それともリモートで実行するためにsshなどを介してプログラムをストリーミングする必要がありますか? expectまたはコマンドライン呼び出しだけでスクリプトを作成できますか?

VirtualBoxには、Ulrichが言及しているように、sshまたはpuppetのようなシステムだけで管理できるコマンドラインツールが多数用意されています。

2
Arcege