需要ガン無視で、ちょっとマイナーなことやったからって書いておく系。少し古目の情報です。
ジョブの定期的な実行をしたい時、スケジューラを自分たちで作るか何を使うか議論すると思いますが、とりあえず手軽にお試しでやってみたい場合に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が冗長化することが最もシンプルなのでそうしてみました。
の形はまったくもって非公式なので以降の説明では冗長化部分を割愛します。
Hinemos Managerの構築
パッケージ
HinemosManagerインストーラが必要としているものを入れておきます。実際に動くpostgresはHinemos同梱のものになるため停止しておきます。
1 2 3 4 5 6 7 |
apt-get install \ sun-java6-jre sun-java6-bin sun-java6-jdk \ selinux-utils chkconfig postgresql-8.4 postgresql-client-8.4 /etc/init.d/postgresql stop update-rc.d -f postgresql remove chmod 777 /var/run/postgresql |
ソース編集
ここからソースを取得して /usr/local/src に置いておきます。解凍します。
1 2 3 4 |
cd /usr/local/src chown root:root ./hinemos_* tar xzf hinemos_manager-3.2.2_rhel6_32.tar.gz cd Hinemos_Manager-3.2.2_rhel6_32/ |
ソースを編集します。
manager_installer_all
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
--- Hinemos_Manager-3.2.2_rhel6_32~orig/manager_installer_all 2011-09-20 15:09:49.000000000 +0900 +++ Hinemos_Manager-3.2.2_rhel6_32/manager_installer_all 2012-03-13 10:15:21.740894123 +0900 @@ -516,7 +516,8 @@ echo echo ${MSG_I017} - rpm -q syslog-ng > /dev/null + #rpm -q syslog-ng > /dev/null + echo "pass installing syslog-ng" RET=$? if [ ${RET} -ne 0 ] then @@ -732,6 +733,11 @@ echo echo ${MSG_I029} && sleep 0.5 + sed -i -e 's/^max_fsm_pages/#max_fsm_pages/' /opt/hinemos/etc/postgresql.conf + + PG_DIR=`ls -d /opt/hinemos/postgresql*` + cp /usr/lib/postgresql/8.4/bin/* $PG_DIR/bin/ + cp /usr/lib/postgresql/8.4/lib/* $PG_DIR/lib/ su -c "${HINEMOS_HOME}/sbin/db_init/pg_init.sh ${LANGUAGE}" - ${HINEMOS_USER} if [ $? -ne 0 ] then |
hinemos/sbin/db_init/pg_init.sh
1 2 3 4 5 6 7 8 9 10 11 |
--- Hinemos_Manager-3.2.2_rhel6_32~orig/hinemos/sbin/db_init/pg_init.sh 2011-09-20 15:09:48.000000000 +0900 +++ Hinemos_Manager-3.2.2_rhel6_32/hinemos/sbin/db_init/pg_init.sh 2012-03-13 10:15:41.380894641 +0900 @@ -167,7 +167,7 @@ EchoOK # initialize database(nodemap icon) -TMP_FILE=tmp_hinemos.sql +TMP_FILE=/tmp/tmp_hinemos.sql rm -f ${TMP_FILE} for imgfile in node scope nw1.png pc1.png Hinemos_icon_32x32.gif do |
インストール
1 |
./manager_installer_JP.sh |
/opt/hinemos/etc/selfcheck-service.xml
/opt/hinemos/etc/hinemos.cfg
./manager_uninstaller_JP.sh
起動前準備としてjavaのリンクを作成します。
1 2 |
mkdir -p /opt/hinemos/jre1.5.0_22/bin/ ln -s /usr/bin/java /opt/hinemos/jre1.5.0_22/bin/ |
設定ファイルはこの辺にあります。
1 2 3 |
ls /opt/hinemos/etc/* ls /opt/hinemos_agent/lib/job_agent/* ls /opt/hinemos_agent/lib/log_agent/* |
Hinemosを起動します。PostgresとJBossが順に起動します。
1 |
/opt/hinemos/bin/hinemos_start.sh |
起動の確認をします。
1 2 3 4 5 6 7 8 |
# Javaプロセス jps # PostgreSQL lsof -i:24001 # JBoss lsof -i:1099 |
syslog-ng
syslog-ng の設定は使わないし重いので無効にしておきます。使う場合は syslog-ng.conf の最後尾で include しつつ、syslog-ng v3 用に書き換えるのがよいです。/etc/syslog-ng/syslog-ng.conf
1 |
#include "/etc/syslog-ng/hinemos-manager.conf"; |
これは lib/syslog-ng_append_ipv4.conf を syslog-ng v3 用に編集したものになります(使わないけど)。
/etc/syslog-ng/hinemos-manager.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
# # Hinemos Manager __HINEMOS_VERSION__ (for syslog monitoring) # source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); udp(ip(0.0.0.0) port(514)); }; filter f_mesg { level(info..emerg) and not facility(mail,authpriv,cron); }; destination d_hinemos_syslogforward { program("__HINEMOS_HOME__/__JAVA_DIR__/bin/java -Xms16m -Xmx64m -cp __HINEMOS_HOME__/lib/syslogforward:__HINEMOS_HOME__/lib/HinemosCommon.jar:__HINEMOS_HOME__/lib/HinemosIF.jar:__HINEMOS_HOME__/lib/HinemosManager.jar:__HINEMOS_HOME__/lib/commons-logging-1.1.jar:__HINEMOS_HOME__/lib/log4j-1.2.15.jar:__HINEMOS_HOME__/lib/javassist.jar:__HINEMOS_HOME__/lib/jboss-aop-jdk50.jar:__HINEMOS_HOME__/lib/jboss-messaging-client.jar:__HINEMOS_HOME__/lib/jboss-remoting.jar:__HINEMOS_HOME__/lib/jbossall-client.jar:__HINEMOS_HOME__/lib/trove.jar:__HINEMOS_HOME__/lib/syslogforward/SyslogForward.jar: com.clustercontrol.syslogng.forward.LogForward __HINEMOS_HOME__/lib/syslogforward/LogForward.properties __HINEMOS_HOME__/lib/syslogforward/log4j.properties" template("<$PRI>$DATE $HOST $MSG\n"));}; log { source(s_src); filter(f_mesg); destination(d_hinemos_syslogforward); }; log { source(s_net); filter(f_mesg); destination(d_hinemos_syslogforward); }; |
有効にした場合は再起動します。
1 |
/etc/init.d/syslog-ng restart |
Postgres
Postgres動作の確認。
1 2 |
psql -h localhost -p 24001 -U hinemos hinemos password> hinemos |
Hinemos Agentの構築
注意事項
マニュアルより注意事項
1 |
IPアドレス ホスト名 FQDN |
インストール
HinemosAgentインストーラが必要としているものを入れておきます。
1 |
apt-get install selinux-utils chkconfig gawk snmptrapfmt |
ソース取得
Managerと一緒に落としたAgentと、もう1つjreを落としておきます。
1 2 |
cd /usr/local/src wget http://ftp.cc.uoc.gr/Java/Linux-x86/1.5u22/jre-1_5_0_22-linux-i586.bin |
解凍し、jreを移動します。
1 2 3 4 5 6 |
chown root:root ./hinemos_* tar xzf hinemos_agent-3.2.2_rhel6_32.tar.gz cd Hinemos_Agent-3.2.2_rhel6_32/ cp ../jre-1_5_0_22-linux-i586.bin thirdparty/ chmod 777 thirdparty/jre-*.bin |
ソースを編集します。
agent_installer_all
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
--- Hinemos_Agent-3.2.2_rhel6_32~orig/agent_installer_all 2011-09-20 15:10:49.000000000 +0900 +++ Hinemos_Agent-3.2.2_rhel6_32/agent_installer_all 2012-03-13 10:46:43.208896966 +0900 @@ -646,11 +646,13 @@ echo echo "${MSG_I025}" - rpm -q syslog-ng > /dev/null + #rpm -q syslog-ng > /dev/null + echo "pass installing syslog-ng" RET=$? if [ ${RET} -ne 0 ] then - rpm -ivh --force ${SYSLOG_NG_RPM} + #rpm -ivh --force ${SYSLOG_NG_RPM} + echo "pass installing syslog-ng" if [ $? -ne 0 ] then echo "${MSG_E007}" && echo "${MSG_E004}" |
hostsを編集します。
1 2 |
127.0.0.1 localhost 192.168.xx.yy hinemos-local-agent hinemos-local-agent.test.drecom.jp |
インストール
1 |
./agent_installer_JP.sh |
syslog-ng
Manager同様、使わないので無効にしておきますが、勝手にsyslog-ng.confの最後尾に入るため少なくともincludeに出しておき、使うなら v3用に編集する。”/etc/syslog-ng/syslog-ng.conf”
1 |
#include "/etc/syslog-ng/hinemos-agent.conf"; |
/etc/syslog-ng/hinemos-agent.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# # Hinemos Agent 3.2.2 (for syslog monitoring) # source s_netudp { udp( ip(0.0.0.0) port(514) ); }; filter f_mesg { level(info..emerg) and not facility(mail,authpriv,cron); }; filter f_hinemos_log { facility(user) and program("hinemos_log_agent"); }; destination d_hinemos_manager { tcp( "10.1.20.110" port(514) ); }; log { source( s_netudp ); filter( f_hinemos_log ); destination( d_hinemos_manager );}; log { source( s_src ); filter( f_mesg ); destination( d_hinemos_manager );}; |
有効にした場合は再起動します。
1 |
/etc/init.d/syslog-ng restart |
エージェント起動前準備をします。
1 |
ln -s /usr/bin/java /opt/hinemos_agent/bin/ |
/opt/hinemos_agent/bin/job_agent_start.sh
1 2 3 4 5 6 7 8 9 10 |
--- /opt/hinemos_agent/bin/job_agent_start.sh~orig 2012-07-30 17:53:23.290459476 +0900 +++ /opt/hinemos_agent/bin/job_agent_start.sh 2012-07-30 17:53:16.570461365 +0900 @@ -49,6 +49,7 @@ read PID < ${HINEMOS_JOB_AGENT_PID} for TIME in `seq 1 ${TIMEOUT}` do + exit 0 if [ `ps --no-headers --pid ${PID} e | grep "${JAVA_HOME}/bin/java.*com.clustercontrol.agent.Agent" | wc -l` -gt 0 ] then echo "Hinemos Job Agent started." |
起動
ジョブエージェント、ログエージェントを起動し、確認します。
1 2 3 4 |
/opt/hinemos_agent/bin/job_agent_start.sh /opt/hinemos_agent/bin/log_agent_start.sh jps |
Windowsクライアントのインストール
インストール
インストールはダウンロードしてきて普通にすすめます。ログインします。
1 2 3 |
User: hinemos Pass: hinemos (デフォルト) Serv: jnp://hinemos-manager-vip.test.drecom.jp:1099 |
パスワードの変更
UNIXユーザのパスワードが変更されます。Postgresのパスワードを変更する場合はpsqlからになります(上述済み)。
ジョブ作成
レポジトリでノードを追加します。
1 2 3 4 |
IPアドレス(ホスト不可) 192.168.xx.yy ポート番号 161 コミュニティ名 public ファシリティID・ファシリティ名 hinemos-local-agent |
ジョブでジョブユニットを作成し、
さらにジョブネット作成し、
さらにジョブを幾つか作成し、
待ち条件やスコープを設定して
登録完了させ、
ジョブネットを実行するとAgentがスクリプトを実行してくれます。ここまでくれば、あとはマニュアルを見てスクリプト内で変数を使ってみたり、クライアントのインターフェースを色々いじるだけになります。
ジョブスケジューラを選ぶ際は、機能・堅牢性・操作性・可視性・価格と様々ありますが、基準を定める意味でもまずはOSSで始めてみるのが良いのではないでしょうか。