rsync+Gitで設定ファイルの差分管理

基本的にサーバーの設定はPuppet経由で実施しており、かつmanifestをGitで管理しているので、変更内容は後から容易にトラッキング出来るのだが、1台だけで実施していた作業や、暫定的に追加した対応については、サーバー上の設定を直接変更していることも多い。

その部分については、基本的には設定項目をExcelで管理していたのだが、変更項目が多かったり、今までに無い変更だったりすると、台帳のフォーマットに大きく変更が入ってしまうことがある。
また複数人で作業していると台帳更新が徹底されないこともあり、もう少し上手いやり方が欲しいところだった。

より上手い方法として、サーバー上で変更が頻繁に入る部分を、日次でrsyncでGitサーバーに転送しておき、かつGitサーバーではcronでdailyコミットを行うことで、各設定ファイルの差分を管理していくことにした。

やり方としては次のようになる。(CentOS6で実施。)
1. Gitサーバー側での作業
1-1.
次のような/etc/rsyncd.confを作成しておく。

uid = root
gid = root

[rsyncbackup]
        path = /srv/rsyncbackup
        read only = false

合わせて/etc/xinetd.d/rsync でdisable = no を設定し、xinetd を有効化しておく。

1-2.
/srv/rsyncbackup でgit initを実施しておく。

1-3. cronに次の登録を実施しておく。

 cd /srv/rsyncbackup && git add -A . && git commit -m "daily commit" > /dev/null 2>&1

2. 管理したいサーバーに 次のcronを登録する。(転送対象, 除外対象、転送時刻は適宜変更)

2 1 * * * cd / && rsync -aqzR --exclude=/etc/selinux /etc /usr/local serverfqdn::rsyncbackup/$(hostname)

これで、各サーバーの設定ファイルがGitで管理できるようになる。普段.yyyymmdd などのバックアップファイルで管理している部分までdiff形式で取得できるようになるのでとても便利だ。また、スクリプトの開発等で使用しているサーバーに入れておくことで、各サーバーにGitを入れなくてもスクリプトのバージョン管理が出来るようになる。

[考慮点]

  • 一部のファイル (/etc/adjtime など) は定期的に内容が変化して、その度にコミットが発生してしまう。こちらを回避するために不要な項目については .gitignoreに追加していく必要がある。
  • Gitはレポジトリのサイズが大きくなるとgit status, git log --stat などのスピードが落ちるので、各サーバーから送付するサイズはできる限り絞った方がよい。
  • DBの中に設定を持つような場合、PostgreSQLならテーブル指定のpg_dump等を使用して設定ファイルとして落とし込む必要がある。
  • rsyncに--deleteをつけた方がよいかは今後の課題。

[今後の展開]

  • Puppetマニフェストもそうだが、こちらのレポジトリもRedmineと組み合わせておくと、チケット内容(日付、実施者、変更意図、作業ログなど)と実機の設定変更の内容を関連付けることが出来る。後から実施内容を振り返る際にとても便利そうだ。。


トラックバック
http://d.hatena.ne.jp/enakai00/20131001/1380616727

Ganglia3.2とgweb2を試してみた

Ganalia ( http://ganglia.sourceforge.net/ )はUnix系のリアルタイムグラフ化ツールなのだが、最近本体のバージョンが3.2に上がっており、かつWebコンソールのバージョンが2.0にあがったのに気づいたので改めて試してみた。

元々Gangliaはエージェントのインストール, 設定が非常に簡単で、かつ取得する量を増やすのも比較的簡単(エージェントに値を送るためのコマンドが付属しており、シェル等で値を送付できる, http://d.hatena.ne.jp/aaabbb_200904/20100313/1268472285 )と使いやすいものだったのだが、2つ厄介な点があった。
1. Windowsで使用できない (正確にはCygwinからは使用できるはずなのだが、Cygwin-1.7で上手くビルド出来ない、など使い辛かった。。)
2. 値を取得するのは簡単だが、それを任意の並びで表示するのが少々大変(PHPで表示ロジックを書く必要がある)
今回のバージョンアップではこの辺が大きく改善されていた。まずはGanglia3.2の変更点とgweb2の変更点を順番にまとめていこうと思う。<<参考リンク>>
http://ganglia.info/?p=430
http://ganglia.info/?p=393
http://ganglia.info/?p=422
http://ganglia.info/?p=448

Ganglia3.2

sFlow対応(Windows対応)

WindowsネイティブのGangliaエージェントは依然として上手く動かないようなのだが w, Ganlia3.2ではsFlow(詳細は参考リンクを参照, 元々はSNMPに代わるネットワーク機器の情報取得プロトコルだったはずなのだが、ホストのキャパシティ管理にも転用されたらしい。。w) の値を表示できるようになっており、Windows用のホストsFlowエージェントを使うことで、Gangliaエージェントで取得できる量が表示できるようになっている。<<参考リンク>>
http://itpro.nikkeibp.co.jp/article/COLUMN/20070410/267869/
http://blog.sflow.com/2010/10/installing-host-sflow-on-windows-server.html
gmondと違って、任意の値を取得するためのコマンドが付属していないので、完全にgmondを置き換えられるわけではないが、まったく量が取れなかった以前の状態と比べると大きな進歩だ。。

互換性

こちらで試した限りでは、gmond 3.1.7からgmond 3.2 に送付したデータは正常に表示できた。ただし、3.0, 3.1 は元々互換性が無いので、3.0系しかパッケージが準備出来ない場合には 3.2のSRPMをビルドしなおした方がよいかもしれない。
※ CentOS5のEPELではパッケージが 3.0系なので、ビルドが必要になる。

gweb-2.0

GangliaのWebコンソールはかなり大きく変更されているので、大きい変更だけを記述しようと思う。。詳細は参考リンクを参照。<<参照リンク>>
http://sourceforge.net/apps/trac/ganglia/wiki/ganglia-web-2
なお、デモサイトとしてこちらのサイトが用意されていた。
http://fjrkr5ab.joyent.us/ganglia-2.0/

Aggregate Graph

前述の通り、今まではGangliaのWebコンソールにグラフを追加する際は手でロジックを作る必要があったが、この機能を使うと"ある値を複数のサーバーに対してまとめて表示する"というグラフをWebコンソール上で作成出来るようになる。例えば、Apacheサーバーが複数ある場合、全サーバーのスレッド数をまとめて表示した画面を作っておくと、パフォーマンス障害に気づくのが簡単になるだろう。。

AggregateGraphの作成画面は、こんな感じの画面になっている。(デモサイトの画面を参照, 直接たどるには 上部の "Aggregate Graphs"タブを使用。)
http://fjrkr5ab.joyent.us/ganglia-2.0/aggregate_graphs.php
この画面で、ホスト正規表現: "ba"("ba"を含むノード), メトリック正規表現 "cpu_idle" を選ぶと、"ba"を含むノードについて cpu_idle のグラフが表示される。(直リンクは下のリンクを参照, 数台のサーバーについてidleの量がグラフで見られるはず。。)

http://fjrkr5ab.joyent.us/ganglia-2.0/graph.php?r=hour&z=xlarge&title=&vl=&hreg[]=ba&mreg[]=cpu_idle&gtype=line&aggregate=1&embed=1

なお、確認時点ではデモサイトのWebコンソールのバージョンが 2.0.0だったのだが、最新の2.1.7(正確には 2.1.5以降 ) では、作成したAggregateGraphを閲覧するためのURLを生成するボタンが追加されている。メモ帳等によく使うURLを書いておき、毎朝まとめて開くと良さそうだ。。なお、Views機能を使うと開くグラフをサーバー側に保管できるが、これについては後述。。

Event

Eventはあるノードのグラフに対して縦棒と、その時刻に起こった事象を書き込む機能になる。 参考リンク先に例があった。値が妙な動きを見せたときの確認結果をまとめるために使えそうだ。。<<参考リンク>>
http://sourceforge.net/apps/trac/ganglia/wiki/events
時刻、名前等はWebコンソールの"Events"タブから指定できる(こちらも2.1.5以降)が、事前に gwebのconf.php(インストールディレクトリに置く, CentOSでは通常 /var/www/html/gweb) で次の設定を行う必要がある。

$conf['overlay_events'] = true;

便利な機能だが、こちらは、管理コンソールから変更を加えてしまうため、閲覧だけのユーザーには実施させないよう注意したい。ただ、現時点のWebコンソール(2.1.7で確認)ではEventsの追加については、認証の対象となっていない(このため、閲覧が出来るユーザーなら誰でもEventを定義出来てしまう)ようなので注意。URL的には "events.php"が画面となるので、後述する"login.php"と合わせて、個別にhtpasswdの対象としておくとよさそうだ。。

認証

1.0系のコンソールでは、認証はクラスタごとの閲覧制限にしか使用していなかった(private_clusters 内に記述していた )が、2.0系ではViewsの編集 (2.1.7でいうと、Viewを事前に定義しておき、任意のAggregateGraphを追加していく機能になっている。1画面に表示するグラフを細かく制御したい場合に便利そう。。 ) の機能が加わったため、この機能を有効にする場合には認証を有効にしておいた方がよさそうだ。。<<参考リンク>>
http://sourceforge.net/apps/trac/ganglia/wiki/ganglia-web-2/AuthSystem

デフォルトの設定では conf_default.php 内で次が定義されており、Viewsの編集機能が使えなくなっている。

$conf['auth_system'] = 'readonly'

編集を有効化するには、次の定義を入れる必要があるが、

$conf['auth_system'] = 'enabled'

gweb自体は認証を行えず、Apache等のBasic認証と連携する(REMOTE_USER を取得する) 形で認証を行うため、上の設定と合わせて、httpd.confに次の設定を行う必要がある。

SetEnv ganglia_secret yourSuperSecretValueGoesHere

<Files "login.php">
  AuthType Basic
  AuthName "Ganglia Access"
  AuthUserFile /var/lib/ganglia/htpasswd
  Require valid-user
</Files>

なお、ACLを設定するには更にconf.php内で$aclにユーザーを追加していく必要があるが、こちらで試したところ "admin" というユーザーには元々admin権限が与えられていたため、htpasswd を作成するだけで動作させることが出来た。

# htpasswd -c /var/lib/ganglia/htpasswd admin

この設定で、admin権限を持つユーザーだけがシステムに変更を行えるようになるはずである。

まとめ

リアルタイムグラフ系のツールではCacti(http://www.cacti.net/)も有名だが、こちらはWindows対応が難しいのと(wmiはLinuxからの取得が難しい、、)、取得量の追加が多少面倒(グラフを作るのは簡単なのだが、エージェント型では無いので取る量を増やすのが多少面倒 )な感じで、Ganglia3.2はかなり出来がよい印象を受ける。
あまり商用製品が多い分野では無いので、地味な感じだが w 障害切り分けの助けとなったり、長期的なシステムの変化を確認したりと、運用上非常に重要なツールなので、まだ類似のツールが導入されていない場合には、早めに導入計画を立てておくのがよさそうだ。。

エンタープライズで使えそうなオープンソースまとめ(2011年度6月)

エンタープライズで使えそうなオープンソースを分野別にまとめてみた。独断と偏見によりまとめているので、使用は自己責任で w

分類 小分類 ツール名 日本でのサポート元 備考 おすすめ度(1-5)
アプリケーションサーバ Java JBoss あり
その他(PHPなど) Apache 多数
DB PostgreSQL あり
MySQL あり
グループウェア メール・カレンダー中心 Zimbra あり
アプリケーション基盤 Drupal 多分無し LDAP連携で認証・認可設定が可能、CCK機能によりプログラミング無しでフォーム開発が可能、モジュールにより機能拡張可能 3
インスタントメッセージング ejabberd 無し Jabber経由でチャットが可能。 2
VoIP Asterisk 無し SIP経由で通話が可能。 2
Web会議 Dimdim 不明 ブラウザからのWeb会議が可能(Flash必須)。チャット/スクリーンの共有 等が可能。 3
運用・管理 監視 Nagios(Groundworks) あり
Zabbix あり
プロビジョニング Puppet 無し Unix系のみ対応、オンラインで構成同期可能、台数が多い場合の必携ツール 5
バックアップ Bacula RHEL6上のみだが、限定的にあり エージェント型。多数ノード上データのバックアップに対応、テープ/ディスクへのバックアップに対応,Windowsにも対応 4
リアルタイムグラフ Cacti 多分無し SNMP等で値を取得してグラフ化, Windows対応が弱いかも。。 4
Ganglia 多分無し エージェントで値を取得するのでインストールが簡単。3.2からsFlow経由でWindowsにも対応出来そう。。 4
構成管理 OCS Inventory 無し Windows,Linuxに加え各種Unixにも対応。基本的にOSの設定のみだが、Plugin追加で機能拡張が可能 3
ID管理 FreeIPA 限定的にあり Unix用。Kerberos・LDAPの構成が簡単に行える。SSSD(Linuxの一部ディストリビューションで使用可)と連携するとPAMのかなりの部分がコンソールで集約管理できる。 4
統合認証 OpenAM あり
Apache/Squid あり ベーシック認証/リバースプロキシの場合に限定だが。。
Shibboleth 無し SAML連携用。AD FS等と連携できる。 2
ジョブ管理 Condor あり グリッド型。負荷に応じて、複数サーバーへのジョブ振り分けが可能。休日指定・時刻指定の機能が限定的なので注意。。
開発環境 (詳しくないので省略。。 )
OS・仮想化 (LinuxKVM/Xenが有名すぎるので省略。。w)
ネットワーク機器 ルーター・F/W・NAT・VPN Vyatta あり
負荷分散機 LVS あり Linuxの一機能(ディストリビューターからサポートあり)
ストレージ クラスタストレージ Glusterfs 多分まだ無し Linux上のストレージをエクスポート。アクセスが分散するため、スケールアウトに使用可能。ミラーリング/非同期レプリケーションにも対応。 3
重複排除 lessfs 無し Linux fuseで重複排除を実施。今後定番になるかも。。 2
その他 サービスマネジメント OTRS 無し SystemCenterServiceManagerと似たツール, チケット管理,メールの管理などが可能, 見た感じヘルプデスク向け。依頼の管理に便利。OTRS ITSMパッケージの追加で、インシデント、問題、変更、構成などITIL式の機能を追加できる。 2

注: おすすめ度はサポートが無いツールにのみ記入している。
注2: 2011/7/22 に追記。


今のところこんな感じになる。今後も状況は変わっていくと思うので定期的にまとめていきたい。(予定は未定だが。。) なお、ほとんどのツールについては当ブログに情報があると思うが、OCS Inventory, Drupal, OTRS, lessfs あたりは無いはずなので個別にWeb等を検索してほしい。。(一応こちらでは、どのツールもインストールまでは実施している。。)

Fedora15 KVM上のWindowsにデバイスドライバを導入するには

Fedora15のvirt-managerではいくつかのハードウェアを設定できるが、このうちWindows上で次を使用する場合には、Windowsに専用のデバイスドライバを追加する必要がある。

・ virtio storage
・ virtio nic
・ baloon driver
・ virtio serial
・ QXL

(QXLはSPICEのサイト(http://spice-space.org/download.html), それ以外はFedora KVMのサイト(http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/)からダウンロードできる)

後々のために、Windows上でドライバを読ませるための設定をまとめておこう。。

基本: ドライバの自動読み取り

Windows上で使用するドライバ(実体はsysファイルで、設定ファイルとしてinfファイルがある)は、OS起動時に、デバイスID(PCI IDなど)を鍵とした自動検索がかかる。
自動検索の検索パスは、デフォルトで c:\windows\inf 以下なので、上記のデバイスに対するドライバをこのパスに置いておくと、対応するデバイスを追加した際に、Windowsが自動で認識するようになる。

ドライバ署名の回避

特に64bit版のWindowsで問題になるのだが、新しめのWindowsにはマイクロソフトの署名が入っていないドライバの読み込みを拒否する機能がある。。商用のKVMではvirtio-win パッケージからドライバが手に入るので問題にならないはずなのだが、テスト用のドライバには署名は行われていない。
この対応には、次のdseoというツールが有用だった。
http://www.ngohq.com/home.php?page=dseo

このツールでは、1. テスト署名の作成, 2. 署名検証の無効化 の2つの操作を実施できる。こちらでドライバへの署名と、検証の無効化を行うことで、ドライバの読み取りが出来るようになった。
※ 2. 署名検証の無効化は、実際には bcdedit /set TESTSIGNING ON を実行しているらしい。。 1.はテスト署名のキーストアへの登録、署名の実施等を行っているようだが、詳細はわからなかった。。
なお、検証の無効化を行っても、あくまでマイクロソフト署名のチェックを行わないだけで、テスト署名そのものは必要なようなので、1, 2は両方実施する必要があった。
なお、dseoのサイトには書いていないが、こちらで試した限りでは、テスト署名については、 sysファイル、catファイル(infファイルからinf2cat で作成できる署名ファイル?) の両方に行う必要があるらしい。。

VESA,Memory等、既にデバイスドライバがある場合の対応

QXLのグラフィックスアダプターや、Balloon用のメモリは、通常はVESA/Memoryとして振る舞うため、Microsoft純正のドライバが優先されてしまう場合があった。
この場合、次のコマンドを実行することで、無理やりドライバを更新することができた。

Windows7 試用版(pnputil):
> pnputil -i c:\windows\inf\ballon.inf
> pnputil -i c:\windows\inf\qxl.inf

WindowsServer2003試用版(devcon, PCIパスの詳細はinfファイルの中身を確認):
> devcon update c:\windows\inf\ballon.inf "PCIパス"
> devcon update c:\windows\inf\qxl.inf "PCIパス"

このうち、pnputilはWindowsのバージョンにより存在しないことがあるので、その場合はdevconを使うことになりそうだ。。devconは次 (http://support.microsoft.com/kb/311272/ja)から入手できる。32bit/64bitがあり、バージョンが違うと変更が実施できない(閲覧系のコマンドは実施できる)ので注意。
なお、デバイスマネージャー経由でも読み込みを実施できるのかもしれないが、優先度を変更する方法がわからなかったため上記のツールを使用している。。 orz

その他注意点

qxlでcatファイルが無い

qxlのデバイスファイルはSPICEのサイトから入手できるが、2011/6の時点で、64bit版が無いのに加えて(これは今のところ自力でビルドするしかなさそう。。)、zipファイルにcatファイルが含まれておらず、署名チェックが回避出来ないという問題があった。対応として inf2cat ( ここから入手できる: https://winqual.microsoft.com/help/Inf2cat_FAQ.htm ) でcatファイルを作成する必要があった。

vdagent, blnsvrのインストール

SPICE, Baloonの動作のためには、Windows上に対応するサービスをインストールする必要がある。それぞれ、次のコマンドでインストールできた。

SPICE vdagent(SPICEのサイトからダウンロード):
> vdservice install

Balloonエージェント(FedoraKVMのサイトからダウンロード)
> blnsvr -i 

まとめ

Tipsとして、Fedora15のguestfishではゲストOSのNTFSに直接ファイルを配置出来るため、大量にドライバや、devcon.exeなどを配置する場合には、WindowsFTP等を使うより、ホストOSから直接置いた方が簡単そうだ。。(Windows上でもPuppetが使えるようになれば、楽なのだが。。)<<参考リンク>>
http://spice-space.org/page/WinQXL

pGina-2.Xを使ってみた

pGina(http://www.pgina.org/index.php/Main_Page)はWindowsのログインロジックを修正して、ログイン方法を変更するツールなのだが、今回はFreeIPAと組み合わせて使ってみた。検証にはwindows7 32bit版の試用版を使用した。

元々pGinaはWindowsXPまでのWindowsの機能(GINA)を使っていたのだが、Vista以降で動作が変化し、上手く動かない状態だった。(そのため、AD以外でWindowsのパスワードを集約管理する方法がほぼ皆無だった。。) pGina2.X系列で遂にVista以降の仕組みにも対応した形となる。
pGina自体はPluginを通じて動作するのだが、今回はLDAPと、Kerberos用のプラグインを使ってみた。

pGina本体のインストール

本家からダウンロードしてインストーラを叩くだけなので、特に問題は無かったはず。。

FreeIPAの構築

詳細は参考URLを参照。基本的には次の2コマンドを叩くだけである。(/etc/hosts, DNS等の設定が必要かも)

# yum -y install freeipa-server
# ipa-server-install

<<参考URL>>
http://obriend.fedorapeople.org/freeIPA2.0/Identity_and_Policy_Management_Guide/html-single/
FreeIPAはFedora15でメジャーバージョンが変わっており、動作が大きく変わっているので注意。。大きい変更としては、sssdと連携してオフラインキャッシュが出来たり、hbacの管理がWebコンソールから出来るようになっている。。

LDAP

LDAPのpGinaプラグインは、本家からダウンロードできる。インストールとして、プラグインファイル(dllファイル)をc:\program files\pgina\plugins 以下に置く必要がある。

インストールが終わった後、設定(スタート=>全てのプログラム=>Configure pGina から実施)として次を設定した。

モード: Searchモード
LDAPサーバー: IPAサーバーのIP
ポート: 389
adminユーザー,adminパスワード: adminの情報(実際には各LDAPユーザーでbindしているだけなので不要かも。。)
Filter: (cn=%s)
Context: dc=jp,dc=example,dc=org

なお、LDAPユーザーをローカルのユーザーとして作成するために、次の設定を行う必要があった。(こちらは次のKerberosの設定でも必要となる)

keep user profiles persistent: 有効 
replace plugin authenticated password with local password: 無効 

この状態でログオン画面から、LDAPユーザーでログオンできるはずである。(上手くいかない場合、次のログを確認。。 "c:\program files\pgina\doc\pgina.log")

Kerberos

Kerberosログインのプラグインも本家からダウンロードできる。マニュアルがドイツ語しかない w ので、正しい方法なのかわからないが、一応動作するところまでいったので、ここに書いておこう。。。
1. 事前にkfw-3.2.2 (http://web.mit.edu/kerberos/dist/index.html#kfw-3.2)をインストールしておく。c:\windows\krb5.ini を編集し、IPAドメインを指定し、次のコマンドでチケットが取得できるかを確認する。(上手くいかない場合、DNS, NTP, IPAサーバーの/var/log/krb5kdc.log等を確認。。) なお、klistでチケットを確認できるが、Windows7 デフォルトではWindows付属のklist が優先されるので、フルパスで指定する必要がある。

> kinit admin

2. ダウンロードしたファイルを展開すると、dllファイルが4つあるが、krb5plugin.dllをpGinaのプラグインフォルダに置くだけでよいらしい。(READMEの通り各ファイルをc:\windowsにコピーすると上手く動作しなかった。。)
3. この状態でpGinaの設定を行い、Pluginでkrb5plugin.dll を指定する。対応するドメインが表示されれば成功となる。
4. 一旦ログオフして、該当ドメインプリンシパルでログオンしてみる。ログオンが成功すれば上手く行っている。
なお、このプラグインでログオンした場合、デフォルトではkerberosのチケットは取得できず、明示的にkinitを実施する必要があった。また、WindowsデフォルトのCIFSは、MIT Kerberosのチケットを見ないらしく、このままだとSambaと連携することは出来ない。。orz (PuttyによるOpenSSHサーバーへの接続はパスワード無しで実施出来るため、こちらは連携出来ている, また、Linux同士だと、SambaにKerberosログインが出来ている)
なお、KerberosログインについてはWindows付属の機能を使った次の方法もあるようだが、こちらで試した限りでは、この方法ではログイン出来なかった。。(何故かKDCがクラッシュする。。 w )
http://freeipa.org/page/Implementing_FreeIPA_in_a_mixed_Environment_%28Windows/Linux%29_-_Step_by_step

SambaのFreeIPA追加については次を参照。Fedora15:FreeIPA, Samba, ScientificLinux6: smbcllient として、kerberosログインが出来ることを確認している。。 ( https://help.ubuntu.com/community/Samba/Kerberos ) 迷った点として、こちらの環境でkeytabの名前を変更したことに伴い、smb.confに次の設定を追加する必要が生じていた点があった。

1. dedicated keytab file = /etc/samba/cifs.keytab に変更
2. "system keytab" を "dedicated keytab"に変更

まとめ

現状 Windows CIFSのKerberos連携が出来ていない段階なのでなんなのだが、一応 pGinaを使うことでWindowsのIDとLinuxのIDを集約管理できそうだ。今までWindows, LinuxのIDを統一するには、WinbindでADにLinuxを追加するしかなかったので、これで構成の幅が広がるだろうか。。
なおファイルサービスについては、OpenAFSを使うことでKerberos化されたファイル共有が出来そうなのだが、こちらはまだ試していない。。他にFilezilla, WinSCP等もKerberosに対応しているようなので、単純にファイル転送が必要ならこちらを使えばよさそうだ。(ただし、エクセル等の"共有"機能を有効に活用するにはこれでは不十分なのだが。。)