Hinemosをジョブスケジューラ目的でDebianに構築

需要ガン無視で、ちょっとマイナーなことやったからって書いておく系。少し古目の情報です。

ジョブの定期的な実行をしたい時、スケジューラを自分たちで作るか何を使うか議論すると思いますが、とりあえず手軽にお試しでやってみたい場合にHinemosさんでもいかがですか。



概要

ジョブを定期的にキックするシステムを探すと、あまり見つからなかったり有償だったりしますが、機能的に要件を満たせるなら当然LinuxのOSSが一番なわけです。今回紹介するHinemosは統合管理ツールということで色々できるわけですが、ジョブスケジューラにしか用が無い前提でやった構築手順を記しておきます。

Hinemosの動作環境を見ると、Debianはサポート外となっていますが、サポートなんて細けぇことはいいから無理矢理Debianに入れてみるわけです。

ということでSqueezeにHinemos3を入れる手順です。
既にHinemos4が出ていますが、まだ全然中身は見ていません!

構成について

Hinemosは本来、Manager : Agent = 1 : N の構成で監視とかをやるのですが、ジョブのキックをしたいだけなのでAgentは1台でよく、ちゃんと冗長化もするとなると、ManagerとAgentを1台に同居させ、さらに同じ構成で2台目を作ることになります。

結果だけ言えば、Hinemos Manager と Agent は全て /opt/ 配下にデータが収まるので、DRBDとVIPを使えば案外容易く冗長化できちゃいます。Postgresも含んでいますが気にしません。めったに落ちない部分だし、落ちてもちゃんとフェイルオーバーで動かすことが可能です。

そして重要なことが1つあり、有償版ではちゃんとしたManagerの冗長化があるのですが(Agent側が複数指定しておく形)、残念なことにAgentの冗長化は存在しません(※Hinemos4では知らないです)。ジョブの仕組み次第でなんとでもなるかもですが、ジョブキックAgentが冗長化することが最もシンプルなのでそうしてみました。

Master (Manager + Agent) <= DRBD + VIP => StandBy (Manager + Agent)
の形はまったくもって非公式なので以降の説明では冗長化部分を割愛します。


Hinemos Managerの構築

パッケージ

HinemosManagerインストーラが必要としているものを入れておきます。実際に動くpostgresはHinemos同梱のものになるため停止しておきます。

ソース編集

ここからソースを取得して /usr/local/src に置いておきます。
  • hinemos_manager-3.2.2_rhel6_32.tar.gz
  • hinemos_agent-3.2.2_rhel6_32.tar.gz

  • 解凍します。

    ソースを編集します。
    manager_installer_all

    hinemos/sbin/db_init/pg_init.sh

    インストール

  • UNIXユーザhinemosのパスワードはとりあえずhinemos
  • 受け付けるIPアドレス は静的でも動的でもよいので入力する。0.0.0.0は不可。hostsと一致する必要はない
  • FTP IPアドレス は使わないので 127.0.0.1
  • このアドレスは下記設定ファイルに入ります
    /opt/hinemos/etc/selfcheck-service.xml
    /opt/hinemos/etc/hinemos.cfg

    やり直す場合アンインストールしてからもう一度
    ./manager_uninstaller_JP.sh


    起動前準備としてjavaのリンクを作成します。

    設定ファイルはこの辺にあります。

    Hinemosを起動します。PostgresとJBossが順に起動します。

    起動の確認をします。


    syslog-ng

    syslog-ng の設定は使わないし重いので無効にしておきます。使う場合は syslog-ng.conf の最後尾で include しつつ、syslog-ng v3 用に書き換えるのがよいです。

    /etc/syslog-ng/syslog-ng.conf

    これは lib/syslog-ng_append_ipv4.conf を syslog-ng v3 用に編集したものになります(使わないけど)。
    /etc/syslog-ng/hinemos-manager.conf

    有効にした場合は再起動します。

    Postgres

  • PostgreSQL接続設定ファイルは /opt/hinemos/etc/hinemos-ds.xml
  • psql で posqgres内のユーザ情報を変更した場合は編集する必要がある
  • Windowsクライアントでのユーザ操作はUNIXユーザの操作でしかないので区別に注意

  • Postgres動作の確認。


    Hinemos Agentの構築

    注意事項

  • ジョブキックのみ目的としているためAgentはManagerと同サーバに構築する
  • Manger, Agent 混在環境では Agent のリポジトリでのIPアドレス指定は localhost(127.0.0.1) を使えない
  • 冗長化構成の場合、localhostのAgentにジョブを投げる場合は2サーバ共通のhostnameをノード名に指定する(下記のマニュアル注意事項を参照)
  • 冗長化構成の場合、hostnameが2サーバで重複してしまうが我慢するしかない。Agent起動時にのみ変更して戻しても定期チェックで無効になることを確認済み

  • マニュアルより注意事項

  • install.pdf の Page 14 – Section 3.6 使用ソフトウェア
  • hostname と hostsの最初の名前が一致していないと agent は起動しない
  • リポジトリ情報の ノード名と hostname が一致しないとジョブを実行できない。これはAgent起動時にhostnameを送信してMangerデータのノード名と一致させ、リポジトリと関連付けしているからである(よって複数関連も可能)
  • /etc/hosts の記述ルールは通常のhostsと左右逆だが、必ずこの形式にする必要がある
  • ログ関係だけならまだしも、機能面にhostname, hostsが密に関わるシステムは好きじゃないです

    インストール

    HinemosAgentインストーラが必要としているものを入れておきます。

    ソース取得

    Managerと一緒に落としたAgentと、もう1つjreを落としておきます。

    解凍し、jreを移動します。

    ソースを編集します。
    agent_installer_all

    hostsを編集します。

  • 上記(マニュアルの注意事項)のため、hostsルールに従う&ジョブ実行制限の回避のため、上2行はこの状態とする
  • ※PrivateアドレスはStaticAddressにする。3行目以降はなんでもよい
  • /etc/hosts

    インストール

  • net-snmp は無視
  • rpm パッケージ各種も少し無視
  • 応答は全て Y(yes)
  • マネージャのIPアドレスのみ入力(ホスト名は不可)。Managerと1:1にするなら 127.0.0.1
  • syslog-ng

    Manager同様、使わないので無効にしておきますが、勝手にsyslog-ng.confの最後尾に入るため少なくともincludeに出しておき、使うなら v3用に編集する。
    ”/etc/syslog-ng/syslog-ng.conf”

    /etc/syslog-ng/hinemos-agent.conf

    有効にした場合は再起動します。


    エージェント起動前準備をします。

    /opt/hinemos_agent/bin/job_agent_start.sh

    起動

    ジョブエージェント、ログエージェントを起動し、確認します。


    Windowsクライアントのインストール

    インストール

    インストールはダウンロードしてきて普通にすすめます。

    ログインします。

    Windowsクライアント上で扱うユーザ&パスワード は UNIXユーザであってPostgresは関係ありません

    パスワードの変更

    UNIXユーザのパスワードが変更されます。
  • “アクセス”タブを表示
  • ユーザ名で右クリック -> パスワードを ど に変更
  • 再ログイン

  • Postgresのパスワードを変更する場合はpsqlからになります(上述済み)。

    ジョブ作成

    レポジトリでノードを追加します。

    ジョブでジョブユニットを作成し、
    さらにジョブネット作成し、
    さらにジョブを幾つか作成し、
    待ち条件やスコープを設定して
    登録完了させ、

    ジョブネットを実行するとAgentがスクリプトを実行してくれます。ここまでくれば、あとはマニュアルを見てスクリプト内で変数を使ってみたり、クライアントのインターフェースを色々いじるだけになります。

    再実行されたジョブのセッションIDは初回時のものでなく再発行される──とか色々仕様があります




    ジョブスケジューラを選ぶ際は、機能・堅牢性・操作性・可視性・価格と様々ありますが、基準を定める意味でもまずはOSSで始めてみるのが良いのではないでしょうか。