50台以上のUbuntuサーバを管理しています。サーバ事に用途は異なるのですが、たとえば「Apacheをインストールしているサーバのみ、一律で80番ポートを空けたい」というような単純だけど面倒な作業がよくあります。

特にサーバを増設した場合に設定の見直しが必要となり、アプリケーションを正常に動作させるまでに、とても大変な思いをしています。何か良い手法はないでしょうか?
自動化というか、各サーバ1台1台に手動でログインして設定を行うのではなく、一辺に且つ安全に設定する方法を探しています。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/07/04 15:32:23
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:sat777 No.1

回答回数6ベストアンサー獲得回数0

ポイント20pt

ターミナルソフトのマクロは使えないでしょうか。

複数のマシンを対象にしたことはありませんが、私はTeraTermのマクロを使って、Win端末から処理を自動化したことがあります。

id:gfs

便利になるのであれば、マクロの記述方法を覚えるのも嫌ではないのですが、そのやり方だと例外処理を書くのがとても大変そうです。

あるサーバでは設定が成功し、あるサーバでは失敗するということが起きた場合、ログを確認しなおし、且つ手動で設定しなおさなければならない・・・これだと作業量が増える可能性が多く、また必ずしもエラーが出てくれるとも限りません。間違っているにも関わらず正常終了となった場合、それは設定ミスですし、最悪の場合、予期しない問題が発生し、しかも記憶にないという自体になるため恐ろしいです。

2011/06/30 21:34:37
id:km1981 No.2

回答回数429ベストアンサー獲得回数49

ポイント10pt

SUSE Managerを使うといいと思います

http://www.novell.com/ja-jp/products/suse-manager/

id:gfs

商用サービスはちょっと手がでません。

2011/06/30 21:36:49
id:hissssa No.3

回答回数428ベストアンサー獲得回数129

ポイント50pt

定義ファイル系を一箇所で集中管理する運用はどうでしょうか。

どれか一台のマシンに定義ファイル置き場を作り、その下に各サーバ名のディレクトリを作って、その下に「管理操作する全てのファイル」をおいておきます。

で、設定を変える時はそこのファイルを書き換えたあと、スクリプトで一気に全サーバに配布するわけです。配布スクリプトはあらかじめ作っておいて。

Linuxなら大抵の設定は定義ファイルで行いますから、一元管理しておくだけでも相当手間は軽減されると思います。配布後、設定を反映する手順も定型化しておいてremshで実行すればいいですし。

そうやって一元管理の仕組みを作ってしまえば、その管理サーバ上でさらに工夫して、同種のサーバの設定を共通化するような仕組みに拡張していくことも可能でしょう。

id:gfs

確かにその通りなのですが、これを自作でやるのは例外処理が大変です。

SSH接続に失敗したときどうするのか、スクリプトの実行に失敗したときどうするのか、APサーバ等の停止に成功したが実はプロセスが残り続けているケースではどうすべきなのか、とか…。

最後のケース関してはどんなツールでも解決できない気がするので、何かしら運用で対処すべきでしょうが、きちんと管理されている(テストやデバッグが行われている)OSSなどのツールでないと厳しいのではないかと感じます。

2011/06/30 21:44:00
id:earu No.4

回答回数9ベストアンサー獲得回数0

ポイント80pt

私もサーバ管理を片手間ですが手伝っています。

バージョン管理システムを使います(ここでは仮にsubversion)

サーバ側とクライアント側で設定する必要があります。

------

準備は下記

クライアント側:subversionのクライアントをインストール

subversionなどのリポジトリから変更ファイル(例:change.txt)と変更スクリプト(例:change.sh)を取得するようにセット

cronで定時点にchange.sh(仮)が実行するようにセット

------

サーバ側:

subversionをインストール(server機能を使用)

------

作業は下記

  • 変更ファイルをサーバにコミット
  • 変更スクリプトをサーバにコミット

------

下準備はそこそこかかるが変更履歴も管理できてとても楽。変更が終わったら、変更スクリプトを空にしてコミットすればOK(これは忘れてないようにやること)。

また、変更内容をサーバに送るように変更結果ファイル(changeResult.txt)をshellに作らせ、結果をコミットすれば、サーバ側で結果を取得できます。

------

puppetなどのツールを入れることも検討したのですが、

そこまですることはなかったので、この方法を使っています。

puppet >> http://gihyo.jp/admin/serial/01/puppet

id:gfs

なるほど。実用的で堅実な運用方法だと思います。

Puppet や Chef も聞いたことはあるのですが、さてどうしたものかと悩んだまま進捗していません。

2011/06/30 21:33:03
id:azumakuniyuki No.5

回答回数17ベストアンサー獲得回数4

ポイント130pt

同じ構成のサーバ複数台に対して、同じ操作を行いたいという目的であれば、GNU Parallelが目的にあっているかもしれません。

http://blog.riywo.com/2011/04/19/022802 GNU Parallelがすごすぎて生きるのがつらい - As a Futurist... で詳しく説明されているので紹介します。

ただし、ご質問の内容がおそらくiptablesに対する変更ですので、作業内容によっては充分で慎重な検証が必要です。

id:gfs

GNU Parallelは初めて知りました。活用できそうですね。

iptabelsについては、Ubuntuにはそのフロントエンドとなる ufwコマンドがあるため、問題にはならないです。ありがとうございます。

2011/07/01 08:48:56
id:h_kondo No.6

回答回数33ベストアンサー獲得回数3

ポイント10pt

50台が同じセグメントに存在するとか、50台のデフォルトゲートウェイを単一のルーターに向けることができる環境ならば、ファイアウォールルーターを導入してパケットのやり取りを管理するというのはどうでしょう。

ただし普通のHUBにつながった同じセグメント内のサーバー同士のやりとりはファイアウールでで管理できないです。

でも賢いL2スイッチを使えばポート間(サーバー同士)の通信を行えなくすることができます。

id:gfs

このレイヤーの話は私には理解できませんでした。

2011/07/04 15:29:02
  • id:gfs
    この記事がいま一番参考になっています。
    http://d.hatena.ne.jp/interu/20101206/1291639210

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません