特にサーバを増設した場合に設定の見直しが必要となり、アプリケーションを正常に動作させるまでに、とても大変な思いをしています。何か良い手法はないでしょうか?
自動化というか、各サーバ1台1台に手動でログインして設定を行うのではなく、一辺に且つ安全に設定する方法を探しています。
ターミナルソフトのマクロは使えないでしょうか。
複数のマシンを対象にしたことはありませんが、私はTeraTermのマクロを使って、Win端末から処理を自動化したことがあります。
商用サービスはちょっと手がでません。
定義ファイル系を一箇所で集中管理する運用はどうでしょうか。
どれか一台のマシンに定義ファイル置き場を作り、その下に各サーバ名のディレクトリを作って、その下に「管理操作する全てのファイル」をおいておきます。
で、設定を変える時はそこのファイルを書き換えたあと、スクリプトで一気に全サーバに配布するわけです。配布スクリプトはあらかじめ作っておいて。
Linuxなら大抵の設定は定義ファイルで行いますから、一元管理しておくだけでも相当手間は軽減されると思います。配布後、設定を反映する手順も定型化しておいてremshで実行すればいいですし。
そうやって一元管理の仕組みを作ってしまえば、その管理サーバ上でさらに工夫して、同種のサーバの設定を共通化するような仕組みに拡張していくことも可能でしょう。
確かにその通りなのですが、これを自作でやるのは例外処理が大変です。
SSH接続に失敗したときどうするのか、スクリプトの実行に失敗したときどうするのか、APサーバ等の停止に成功したが実はプロセスが残り続けているケースではどうすべきなのか、とか…。
最後のケース関してはどんなツールでも解決できない気がするので、何かしら運用で対処すべきでしょうが、きちんと管理されている(テストやデバッグが行われている)OSSなどのツールでないと厳しいのではないかと感じます。
私もサーバ管理を片手間ですが手伝っています。
バージョン管理システムを使います(ここでは仮に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
なるほど。実用的で堅実な運用方法だと思います。
Puppet や Chef も聞いたことはあるのですが、さてどうしたものかと悩んだまま進捗していません。
同じ構成のサーバ複数台に対して、同じ操作を行いたいという目的であれば、GNU Parallelが目的にあっているかもしれません。
http://blog.riywo.com/2011/04/19/022802 GNU Parallelがすごすぎて生きるのがつらい - As a Futurist... で詳しく説明されているので紹介します。
ただし、ご質問の内容がおそらくiptablesに対する変更ですので、作業内容によっては充分で慎重な検証が必要です。
GNU Parallelは初めて知りました。活用できそうですね。
iptabelsについては、Ubuntuにはそのフロントエンドとなる ufwコマンドがあるため、問題にはならないです。ありがとうございます。
50台が同じセグメントに存在するとか、50台のデフォルトゲートウェイを単一のルーターに向けることができる環境ならば、ファイアウォールルーターを導入してパケットのやり取りを管理するというのはどうでしょう。
ただし普通のHUBにつながった同じセグメント内のサーバー同士のやりとりはファイアウールでで管理できないです。
でも賢いL2スイッチを使えばポート間(サーバー同士)の通信を行えなくすることができます。
このレイヤーの話は私には理解できませんでした。
便利になるのであれば、マクロの記述方法を覚えるのも嫌ではないのですが、そのやり方だと例外処理を書くのがとても大変そうです。
あるサーバでは設定が成功し、あるサーバでは失敗するということが起きた場合、ログを確認しなおし、且つ手動で設定しなおさなければならない・・・これだと作業量が増える可能性が多く、また必ずしもエラーが出てくれるとも限りません。間違っているにも関わらず正常終了となった場合、それは設定ミスですし、最悪の場合、予期しない問題が発生し、しかも記憶にないという自体になるため恐ろしいです。