[Linux-ha-jp] crm設定のprimitive - op monitorの設定値について

Back to archive index

Takehiro Matsushima takeh****@gmail*****
2017年 8月 24日 (木) 16:23:52 JST


久保さん

上手く動いたとのこと、安心しました。
monitorも含めて、intervalの指定がない場合にはワンショットの動作になるようです。
startにintervalを付けたらどうなるんだろうという興味はあります。

# 編集したinitスクリプトを元に戻すことをお忘れなく…

ひとまず、お疲れ様でした!

松島

2017/08/24 午後4:14 "久保貴美" <takam****@kccs*****>:

できました。
うわぁ。恥ずかしい。。。(><

しかし、pacemakerは文法誤りあっても無視して実行されるのか・・・。
corosyncはcorosync.conf間違ってたら動かないのになぁ。
一つ勉強になりました。

松島さん、長々とお付き合いいただきありがとうございました。




2017年8月24日 16:03 Takehiro Matsushima <takeh****@gmail*****>:

久保さん
>
> 私もjenkinsでやってみたところ、問題なくmonitorが動きました。
> なのでよくよく久保さんのcrm設定を見てみましたら、op monitor int"a"rvalになっていました。
> このタイポをint"e"rvalに修正したらうまく動くようになるかと思いますがいかがでしょうか?
>
> 松島
>
> 2017/08/24 午後3:18 "久保貴美" <takam****@kccs*****>:
>
> 松島さん
>
> お世話になります。
> 久保です。
>
> 松島さんにご提示いただいたサンプルをウチの環境に当てはめてみたところ、
> 確かに10秒おきに「Hoge Status」というメッセージがsyslogに表示される
> ようになりました。
> しかし、自分の作ったcrmファイルでは起動時一回目しか表示されません。
> /etc/inet.d配下のファイルに「echo "test" >> /tmp/test.log」も加えてみたのですが、
> やはりはじめの一回しか書き込まれませんでした。
>
> 当方のcrmファイルは以下のようにしています。
> --------
> ## Cluster Option ###
> property no-quorum-policy="ignore" \
>     stonith-enabled="false"
>
> ### Group Configuration ###
> group group1 \
>     httpd \
>     jenkins \
>     ip-192.168.204.16 \
>     ip-192.168.204.17
>
> ### Resource Location ###
> location rsc_location group1 \
>     rule 200: #uname eq pm01 \
>     rule 100: #uname eq pm02
>
> ### Resource Defaults ###
> rsc_defaults resource-stickiness="INFINITY" \
>     migration-threshold="1"
>
> ### Primitive Configuration ###
> primitive jenkins lsb:jenkins \
>     op start interval="0" timeout="60s" \
>     op monitor intarval="30s" timeout="30s" \
>     op stop interval="0" timeout="60s" \
>     meta target-role="Started"
>
> primitive httpd ocf:heartbeat:apache \
>     params configfile="/etc/httpd/conf/httpd.conf" port="80" \
>     op start interval="0" timeout="60s" \
>     op monitor interval="5s" timeout="20s" \
>     op stop interval="0" timeout="60s" \
>     meta target-role="Started"
>
> primitive ip-192.168.204.16 ocf:heartbeat:IPaddr2 \
>     params ip="192.168.204.16" nic="ens33" cidr_netmask="24" \
>     op monitor interval="30s" timeout="30s"
>
> primitive ip-192.168.204.17 ocf:heartbeat:IPaddr2 \
>     params ip="192.168.204.17" nic="ens33" cidr_netmask="24" \
>     op monitor interval="30s" timeout="30s"
> --------
> 全部で4つ書いてありますが、今回試しているのはjenkinsというプログラムの部分のみです。
> 松島さんのファイルとだいぶ書き方が違うので、どこを修正すればよいのかわかりませんでした。
>
> なお、/etc/init.d/jenkinsのファイルは以下のようにしました。
> --------
> #!/bin/sh
> #
> #     SUSE system statup script for Jenkins
> #     Copyright (C) 2007  Pascal Bleser
> #
> #     This library is free software; you can redistribute it and/or modify
> it
> #     under the terms of the GNU Lesser General Public License as
> published by
> #     the Free Software Foundation; either version 2.1 of the License, or
> (at
> #     your option) any later version.
> #
> #     This library is distributed in the hope that it will be useful, but
> #     WITHOUT ANY WARRANTY; without even the implied warranty of
> #     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> #     Lesser General Public License for more details.
> #
> #     You should have received a copy of the GNU Lesser General Public
> #     License along with this library; if not, write to the Free Software
> #     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
> #     USA.
> #
> ### BEGIN INIT INFO
> # Provides:          jenkins
> # Required-Start:    $local_fs $remote_fs $network $time $named
> # Should-Start: $time sendmail
> # Required-Stop:     $local_fs $remote_fs $network $time $named
> # Should-Stop: $time sendmail
> # Default-Start:     3 5
> # Default-Stop:      0 1 2 6
> # Short-Description: Jenkins Automation Server
> # Description:       Jenkins Automation Server
> ### END INIT INFO
>
> # Check for missing binaries (stale symlinks should not happen)
> JENKINS_WAR="/usr/lib/jenkins/jenkins.war"
> test -r "$JENKINS_WAR" || { echo "$JENKINS_WAR not installed";
>         if [ "$1" = "stop" ]; then exit 0;
>         else exit 5; fi; }
>
> # Check for existence of needed config file and read it
> JENKINS_CONFIG=/etc/sysconfig/jenkins
> test -e "$JENKINS_CONFIG" || { echo "$JENKINS_CONFIG not existing";
>         if [ "$1" = "stop" ]; then exit 0;
>         else exit 6; fi; }
> test -r "$JENKINS_CONFIG" || { echo "$JENKINS_CONFIG not readable. Perhaps
> you forgot 'sudo'?";
>         if [ "$1" = "stop" ]; then exit 0;
>         else exit 6; fi; }
>
> JENKINS_PID_FILE="/var/run/jenkins.pid"
>
> # Source function library.
> . /etc/init.d/functions
>
> # Read config
> [ -f "$JENKINS_CONFIG" ] && . "$JENKINS_CONFIG"
>
> # Set up environment accordingly to the configuration settings
> [ -n "$JENKINS_HOME" ] || { echo "JENKINS_HOME not configured in
> $JENKINS_CONFIG";
>         if [ "$1" = "stop" ]; then exit 0;
>         else exit 6; fi; }
> [ -d "$JENKINS_HOME" ] || { echo "JENKINS_HOME directory does not exist:
> $JENKINS_HOME";
>         if [ "$1" = "stop" ]; then exit 0;
>         else exit 1; fi; }
>
> # Search usable Java as /usr/bin/java might not point to minimal version
> required by Jenkins.
> # see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-
> RedHat-Linux-td25673707.html
> candidates="
> /etc/alternatives/java
> /usr/lib/jvm/java-1.8.0/bin/java
> /usr/lib/jvm/jre-1.8.0/bin/java
> /usr/lib/jvm/java-1.7.0/bin/java
> /usr/lib/jvm/jre-1.7.0/bin/java
> /usr/bin/java
> "
> for candidate in $candidates
> do
>   [ -x "$JENKINS_JAVA_CMD" ] && break
>   JENKINS_JAVA_CMD="$candidate"
> done
>
> JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS
> -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR"
> PARAMS="--logfile=/var/log/jenkins/jenkins.log
> --webroot=/var/cache/jenkins/war --daemon"
> [ -n "$JENKINS_PORT" ] && PARAMS="$PARAMS --httpPort=$JENKINS_PORT"
> [ -n "$JENKINS_LISTEN_ADDRESS" ] && PARAMS="$PARAMS
> --httpListenAddress=$JENKINS_LISTEN_ADDRESS"
> [ -n "$JENKINS_HTTPS_PORT" ] && PARAMS="$PARAMS
> --httpsPort=$JENKINS_HTTPS_PORT"
> [ -n "$JENKINS_HTTPS_KEYSTORE" ] && PARAMS="$PARAMS
> --httpsKeyStore=$JENKINS_HTTPS_KEYSTORE"
> [ -n "$JENKINS_HTTPS_KEYSTORE_PASSWORD" ] && PARAMS="$PARAMS
> --httpsKeyStorePassword='$JENKINS_HTTPS_KEYSTORE_PASSWORD'"
> [ -n "$JENKINS_HTTPS_LISTEN_ADDRESS" ] && PARAMS="$PARAMS
> --httpsListenAddress=$JENKINS_HTTPS_LISTEN_ADDRESS"
> [ -n "$JENKINS_DEBUG_LEVEL" ] && PARAMS="$PARAMS
> --debug=$JENKINS_DEBUG_LEVEL"
> [ -n "$JENKINS_HANDLER_STARTUP" ] && PARAMS="$PARAMS
> --handlerCountStartup=$JENKINS_HANDLER_STARTUP"
> [ -n "$JENKINS_HANDLER_MAX" ] && PARAMS="$PARAMS
> --handlerCountMax=$JENKINS_HANDLER_MAX"
> [ -n "$JENKINS_HANDLER_IDLE" ] && PARAMS="$PARAMS
> --handlerCountMaxIdle=$JENKINS_HANDLER_IDLE"
> [ -n "$JENKINS_ARGS" ] && PARAMS="$PARAMS $JENKINS_ARGS"
>
> if [ "$JENKINS_ENABLE_ACCESS_LOG" = "yes" ]; then
>     PARAMS="$PARAMS --accessLoggerClassName=winsto
> ne.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined
> --simpleAccessLogger.file=/var/log/jenkins/access_log"
> fi
>
> RETVAL=0
>
> case "$1" in
>     start)
>         echo -n "Starting Jenkins "
>         daemon --user "$JENKINS_USER" --pidfile "$JENKINS_PID_FILE"
> $JAVA_CMD $PARAMS > /dev/null
>         RETVAL=$?
>         if [ $RETVAL = 0 ]; then
>             success
>             echo > "$JENKINS_PID_FILE"  # just in case we fail to find it
>             MY_SESSION_ID=`/bin/ps h -o sess -p $$`
>             # get PID
>             /bin/ps hww -u "$JENKINS_USER" -o sess,ppid,pid,cmd | \
>             while read sess ppid pid cmd; do
>                 [ "$ppid" = 1 ] || continue
>                 # this test doesn't work because Jenkins sets a new
> Session ID
>                 # [ "$sess" = "$MY_SESSION_ID" ] || continue
>                 echo "$cmd" | grep $JENKINS_WAR > /dev/null
>                 [ $? = 0 ] || continue
>                 # found a PID
>                 echo $pid > "$JENKINS_PID_FILE"
>             done
>         else
>             failure
>         fi
>         echo
>         ;;
>     stop)
>         echo -n "Shutting down Jenkins "
>         killproc jenkins
>         RETVAL=$?
>         echo
>         ;;
>     try-restart|condrestart)
>         if test "$1" = "condrestart"; then
>                 echo "${attn} Use try-restart ${done}(LSB)${attn} rather
> than condrestart ${warn}(RH)${norm}"
>         fi
>         $0 status
>         if test $? = 0; then
>                 $0 restart
>         else
>                 : # Not running is not a failure.
>         fi
>         ;;
>     restart)
>         $0 stop
>         $0 start
>         ;;
>     force-reload)
>         echo -n "Reload service Jenkins "
>         $0 try-restart
>         ;;
>     reload)
>         $0 restart
>         ;;
>     status)
>         status jenkins
>         RETVAL=$?
>         logger jenkins_online
>         echo "test" >> /tmp/jenkins.log
>         ;;
>     probe)
>         ## Optional: Probe for the necessity of a reload, print out the
>         ## argument to this init script which is required for a reload.
>         ## Note: probe is not (yet) part of LSB (as of 1.9)
>
>         test "$JENKINS_CONFIG" -nt "$JENKINS_PID_FILE" && echo reload
>         ;;
>     *)
>         echo "Usage: $0 {start|stop|status|try-restart
> |restart|force-reload|reload|probe}"
>         exit 1
>         ;;
> esac
> exit $RETVAL
> --------
>
> 明らかに自分のcrmファイルに問題があることはわかるのですが、どうすれば正しく
> monitorされるのかがわかりません。
> 実際のところ、monitorパラメータは全く活用していないので動かなくても問題はない
> のですが、やはり正しく動かないのは気持ち悪いので、ご指摘などいただければと
> 思います。
>
> お手数をおかけしますが、よろしくお願いします。
>
>
> 2017年8月24日 13:37 Takehiro Matsushima <takeh****@gmail*****>:
>
> 久保さん
>>
>> こんにちは、松島です。
>> お返事遅くなりまして申し訳ございません。
>>
>> op monitorですが、これは指定したintervalで走るはずです。
>> もしかしたらsyslogの方で繰り返しメッセージを抑制しているかもしれませんし、間にSystemdが入っているからなのかもしれません。
>> (CentOS7 rsyslogは繰り返しのメッセージを抑制しないらしいので違うかもしれませんが…)
>> setenforce 0して、initスクリプトのstatus処理のところにecho "something" >
>> /path/to/somewhereなどを追加したらいかがでしょうか。
>>
>> ちなみに、私も試してみました。/var/log/messagesに10秒間隔で記録は残っておりました。
>> 参考になるかはわかりませんが、以下ご確認ください。
>>
>> /var/log/messages
>> ---------------------------
>> Aug 24 13:06:02 pm1 crmd[1913]:  notice: State transition S_IDLE ->
>> S_POLICY_ENGINE
>> Aug 24 13:06:02 pm1 pengine[1912]:  notice: On loss of CCM Quorum: Ignore
>> Aug 24 13:06:02 pm1 pengine[1912]:  notice: Start   hoge#011(pm1)
>> Aug 24 13:06:02 pm1 pengine[1912]:  notice: Calculated transition 11,
>> saving inputs in /var/lib/pacemaker/pengine/pe-input-11.bz2
>> Aug 24 13:06:02 pm1 crmd[1913]:  notice: Initiating start operation
>> hoge_start_0 locally on pm1
>> Aug 24 13:06:02 pm1 systemd: Starting SYSV: Dummy...
>> Aug 24 13:06:02 pm1 logger: Hoge Started
>> Aug 24 13:06:02 pm1 crmd[1913]:  notice: Result of start operation for
>> hoge on pm1: 0 (ok)
>> Aug 24 13:06:02 pm1 systemd: Started SYSV: Dummy.
>> Aug 24 13:06:02 pm1 crmd[1913]:  notice: Initiating monitor operation
>> hoge_monitor_10000 locally on pm1
>> Aug 24 13:06:02 pm1 logger: Hoge Status
>> Aug 24 13:06:02 pm1 crmd[1913]:  notice: Transition 11 (Complete=2,
>> Pending=0, Fired=0, Skipped=0, Incomplete=0,
>> Source=/var/lib/pacemaker/pengine/pe-input-11.bz2): Complete
>> Aug 24 13:06:02 pm1 crmd[1913]:  notice: State transition
>> S_TRANSITION_ENGINE -> S_IDLE
>> Aug 24 13:06:12 pm1 logger: Hoge Status
>> Aug 24 13:06:22 pm1 logger: Hoge Status
>> Aug 24 13:06:32 pm1 logger: Hoge Status
>> ---------------------------
>>
>>
>> /etc/init.d/hoge
>> ---------------------
>> #! /bin/bash
>> #
>> # hoge
>> #
>> # chkconfig: 2345 10 90
>> # description: Dummy
>>
>> # Source function library.
>> . /etc/init.d/functions
>>
>> case "$1" in
>>   start)
>>         logger "Hoge Started"
>>         rc=0
>>         ;;
>>   stop)
>>         logger "Hoge Stopperd"
>>         rc=0
>>         ;;
>>   status)
>>         logger "Hoge Status"
>>         rc=0
>>         ;;
>>   restart|reload|force-reload)
>>         cd "$CWD"
>>         $0 stop
>>         $0 start
>>         rc=$?
>>         ;;
>>   *)
>>         echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
>>         exit 2
>> esac
>>
>> exit $rc
>> -----------
>>
>> /etc/corosync/corosync.conf
>> ----------------------------------------
>> totem {
>>         version: 2
>>         token: 1000
>>
>>         crypto_cipher: none
>>         crypto_hash: none
>>
>>         interface {
>>                 ringnumber: 0
>>                 bindnetaddr: 10.128.0.0
>>                 mcastaddr: 239.255.1.1
>>                 mcastport: 5405
>>                 ttl: 1
>>         }
>> }
>>
>> logging {
>>         to_syslog: yes
>>         debug: off
>>         timestamp: on
>>         syslog_facility: daemon
>>         logger_subsys {
>>                 subsys: QUORUM
>>                 debug: off
>>         }
>> }
>>
>> quorum {
>>         provider: corosync_votequorum
>>         expected_votes: 2
>> }
>> -------------------------------------------------
>>
>> crm
>> -----------
>> node 2130706433: pm1
>> primitive hoge lsb:hoge \
>>         op start interval=0 timeout=30s \
>>         op stop interval=0 timeout=30s \
>>         op monitor interval=10 timeout=30s migration-threshold=1
>> resource-stickiness=INFINITY \
>>         meta target-role=Started
>> property cib-bootstrap-options: \
>>         no-quorum-policy=ignore \
>>         stonith-enabled=false \
>>         have-watchdog=false \
>>         dc-version=1.1.16-1.el7-94ff4df \
>>         cluster-infrastructure=corosync
>> rsc_defaults rsc-options: \
>>         resource-stickiness=INFINITY \
>>         migration-threshold=1
>> ------------
>>
>> 2017年8月23日 14:12 久保貴美 <takam****@kccs*****>:
>> > 松島さん
>> >
>> > お世話になります。
>> > 久保と申します。
>> >
>> > お返事遅くなってすみません。
>> > 確認するのに手間取っていましたが、ご案内いただいたとおりの方法で起動失敗、タイムアウト
>> > などの処理を確認することができました。
>> >
>> > op monitorについては、起動後一回だけ死活監視をするようなイメージで合っているでしょうか。
>> > loggerコマンドを仕込んでsyslogにメッセージが吐かれるのは確認したのですが、メッセージが
>> > 出るのが一回だけでした。
>> > 私はintervalの間隔でずっと死活監視をしてくれるように思い込んでいたのですが、それは誤りで
>> > プログラムがstart処理で起動した後、起動自体はうまくいったけれどもその後お亡くなりになる
>> > のを防ぐ意味でop monitorというパラメータがあるのかな、と解釈しました。
>> > この解釈で合っているでしょうか。
>> >
>> > お手数をおかけしますが教えていただけると助かります。
>> >
>> > 以上、よろしくお願いします。
>> >
>> >
>> >
>> >
>> > 2017年8月18日 21:05 Takehiro Matsushima <takeh****@gmail*****>:
>> >
>> >> 久保さん
>> >>
>> >> こんにちは。松島と申します。
>> >>
>> >> lsbとのことですので、/etc/init.d/hogeなどというスクリプトが置いてあるはずです。
>> >> startやstopを失敗させてみるには、スクリプトの中でそれらに対応する処理をみつけて、exit 1などとするのが手っ取り早いと思います。
>> >>
>> >> monitorアクションですが、lsbの場合はservice hoge statusが実行されます。
>> >> 同様にスクリプトのstatusを処理するところにloggerなどを使って何かメッセージを吐かせれば、可視化はできると思います。
>> >>
>> >>
>> >> 通常、daemonが動いているか(PIDの存在確認)のほかに、PortをListenしているか、リクエストを受け付けるか
>> 、などといったチェックもしたい場合が多いのでOCFに従ったRAをこしらえることが多いですね。
>> >>
>> >>
>> >> ちなみに各アクションのタイムアウトを模擬するには、timeout値よりも長い時間sleepさせればOKです。
>> >>
>> >>
>> >> 以上お答えになっていますでしょうか??
>> >>
>> >> 松島
>> >>
>> >> 2017/08/18 午後1:42 "久保貴美" <takam****@kccs*****>:
>> >>>
>> >>> 毎度お世話になります。
>> >>> 久保と申します。
>> >>>
>> >>> pacemakerの設定内容についてわからないところがあるので教えてください。
>> >>>
>> >>> 当方の環境は、CentOS 7.3、Pacemaker 1.1.16-1.el7となります。
>> >>> pacemakerの設定でcrmコマンドで設定するパラメータがありますが、
>> >>> 以下のような設定を行ったとします。
>> >>>
>> >>> primitive hoge lsb:hoge \
>> >>>     op start interval="0" timeout=60s" \
>> >>>     op monitor interval="30s" timeout="30s" \
>> >>>     op stop interval ="0" timeout="60s" \
>> >>>     meta target-role="Started"
>> >>>
>> >>> ここで、op startとop stopはそれぞれhogeの起動停止時に失敗したときの
>> >>> 挙動を定義しているのだろうなと想像できるのですが(実際には失敗する
>> >>> シチュエーションが作り出せなかったので未検証です)、op monitorについては
>> >>> どのような動作を規定しているのかがわかりません。
>> >>> 例えば、kill -9 "hogeのpid"でhogeを殺してやるとノードの切り替わりが
>> >>> 発生しますが、これはmonitorの設定値にかかわらず1秒程度で切り替わっている
>> >>> ように見えます。
>> >>>
>> >>> となると、op monitorの設定は何の役に立っているのかわからないのですが、
>> >>> 機能について教えていただけないでしょうか。
>> >>>
>> >>> 以上、よろしくお願いします。
>> >>>
>> >>> --
>> >>> 久保貴美
>> >>>
>> >>>
>> >>> _______________________________________________
>> >>> Linux-ha-japan mailing list
>> >>> Linux****@lists*****
>> >>> http://lists.osdn.me/mailman/listinfo/linux-ha-japan
>> >>>
>> >>
>> >> _______________________________________________
>> >> Linux-ha-japan mailing list
>> >> Linux****@lists*****
>> >> http://lists.osdn.me/mailman/listinfo/linux-ha-japan
>> >>
>> >
>> >
>> > _______________________________________________
>> > Linux-ha-japan mailing list
>> > Linux****@lists*****
>> > http://lists.osdn.me/mailman/listinfo/linux-ha-japan
>> >
>> _______________________________________________
>> Linux-ha-japan mailing list
>> Linux****@lists*****
>> http://lists.osdn.me/mailman/listinfo/linux-ha-japan
>>
>
>
> _______________________________________________
> Linux-ha-japan mailing list
> Linux****@lists*****
> http://lists.osdn.me/mailman/listinfo/linux-ha-japan
>
>
>
> _______________________________________________
> Linux-ha-japan mailing list
> Linux****@lists*****
> http://lists.osdn.me/mailman/listinfo/linux-ha-japan
>
>

_______________________________________________
Linux-ha-japan mailing list
Linux****@lists*****
http://lists.osdn.me/mailman/listinfo/linux-ha-japan
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
다운로드 



Linux-ha-japan メーリングリストの案内
Back to archive index