Linux 一括/リモート管理

Linux 一括/リモート管理

社内 IT インフラストラクチャの他に、オンライン ワールド向けのサービスをホストする Linux マシンが約 500 台あります。これらは、データベース An、製品 An、NFS、バックオフィスなどの一連のクラスターにグループ化されています。さらに、これらは当社の仕様と要件に従って、外部プロバイダーによって管理されています。

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

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

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

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

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

記録のために:

  • ほぼすべてのシステムはDebian GNU/Linux 6.x "squeeze"を実行しています
  • 開発者は自分のワークステーションで特定のOSを使用することを強制されない
  • もちろん予算は限られているが、プロプライエタリソフトウェアを購入するには小さすぎるわけではない。
  • 前述のプロバイダーが関与するソリューションが望ましい

答え1

それはあなたが何を必要とし、何を探しているかによって異なります。しかし、一般的には「構成管理のように:

  1. 傀儡
  2. シェフ
  3. cfエンジン
  4. アンシブル

など。個人的には、大きなコミュニティと多くの外部提供レシピを持つPuppetをお勧めします。これにより、システムを自動的に構成および管理できます。これを独自のリポジトリと組み合わせ、たとえばunattended-upgradesシステムを自動的に更新できます。

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

自動化されたデプロイメント(ベアボーンおよび仮想化)も検討する必要があります。これを構成管理または独自のリポジトリと組み合わせると、システムの自動化と再インストールが簡単に行えます。自動インストールを開始したい場合は、フォーマンこれはlibvirtとベアボーンインストールをサポートし、puppetサポートも統合されています。自分でやりたい場合は、キックスタート (redhatなど) または「preseeding」を使用してシステムを自動的に構成します。Debianの場合は、次のようなものも使用できます。デブートストラップまたはラッパーgrml-debootstrap仮想化イメージをサポートします。

開発者にVirtualBoxイメージを提供するには、以下を参照してください。浮浪者Chef、Puppet、およびシェル スクリプトをサポートする VirtualBox を使用して仮想化システムの作成を自動化し、仮想環境をカスタマイズできます。

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

Google キーワードについてはdevops、、、configuration managementおよびit automationを調べてくださいserver orchestration

つまり、できる限り自動化し、手動で作業を行うことは考えないでください。

答え2

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

その背後にある原則は

  • サーバーの外観を定義します。これには、デフォルトでインストールされる一般的なソフトウェア、パーティションスキーム、ファイルシステムレイアウトが含まれます。
  • 運用、ステージング、テスト、開発の各サーバーは、これらの基本標準に関して異なるべきではありません (そうでないと、後で問題に遭遇することになります - 実際にそうでした)
  • 適切な変更管理を使用して、行ったすべての変更(構成内の 1 行の小さな変更も含む)を文書化します。
  • 常に最初にテストで変更し、次に開発で変更し、次にステージングで変更し、最後に本番で変更します。

大量のサーバーを管理する便利なツールについて質問がありましたが、私の個人的なお気に入りは cluster-ssh ( cssh) です。一度入力するだけで、複数のサーバーに同時に変更を加えることができます。

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

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

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

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

答え3

私は、複数の国で約 30 の製品と数百のサーバーを管理しています。私はソフトウェア構成マネージャーなので、ルート アクセス権がなく (設計による)、データベースやそのサーバーに触れることもありません (これも設計による)。また、企業のセキュリティのために多くの手続きを踏まなければなりません。ただし、データベース リンクや変更など、テスト、ステージング、および実稼働の構成は管理しています。、sshおよびpythonシェル スクリプトの組み合わせを使用してサーバーに送信されるスクリプトがいくつかあります。

考慮すべき主な事項は次のとおりです。

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

sshVirtualBox には、Ulrich が言及しているように、直接またはシステムを通じて管理できる多くのコマンドライン ツールが用意されていますpuppet

答え4

過去数年間、スクリプトを使用して構成を構築する機能に重点を置いた新しい一連のミニマリスト システムが登場しました。これらはスクリプトを作成するためのフレームワークであるため、シーケンス処理を必要とするタスクに優れている傾向があります。

pyinfra

pyinfra は、大規模にインフラストラクチャを超高速で自動化します。アドホックコマンドの実行、サービスの展開、構成管理などに使用できます。

http://pyinfra.com/

柔道

シンプルなオーケストレーションと構成管理

http://github.com/rollcat/judo

rset(1) : pln(5)

任意のスクリプト言語を使用してシステムを構成する

http://scriptedconfiguration.org/

関連情報