web-dev-qa-db-ja.com

ペースメーカーcorosyncelsbリソーススクリプト(SybaseデータベースASEサーバーおよびバックアップサーバー)

Rhel7.2でpcsを使用してlsbリソースを作成しようとしています。「sybase」スクリプトは、Sybase DatabaseASEサーバーとバックアップサーバーの起動と停止と再起動$ステータススクリプトに関するものです。

[root@pldbsv01 ~]# pcs status 
    Cluster name: PLDBSV_CLUSTER
    Last updated: Tue Apr 19 23:18:44 2016      Last change: Tue Apr 19 22:59:07 2016 by root via cibadmin on pldbsv02-cr
    Stack: corosync
    Current DC: pldbsv02-cr (version 1.1.13-10.el7-44eb2dd) - partition with quorum
    2 nodes and 9 resources configured

    Online: [ pldbsv01-cr pldbsv02-cr ]

    Full list of resources:

     Resource Group: PLDBSV_RESOURCE
         PLDBSV_VIP (ocf::heartbeat:IPaddr2):   Started pldbsv01-cr
     idrac-pldbsv01 (stonith:fence_ipmilan):    Started pldbsv02-cr
     idrac-pldbsv02 (stonith:fence_ipmilan):    Started pldbsv01-cr
     Clone Set: dlm-clone [dlm]
         Started: [ pldbsv01-cr ]
         Stopped: [ pldbsv02-cr ]
     Clone Set: clvmd-clone [clvmd]
         Started: [ pldbsv01-cr ]
         Stopped: [ pldbsv02-cr ]
     Clone Set: gfs2sybasedata_res-clone [gfs2sybasedata_res]
         Started: [ pldbsv01-cr ]
         Stopped: [ pldbsv02-cr ]

    PCSD Status:
      pldbsv01-cr: Online
      pldbsv02-cr: Online

    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

Aftersybase lsbreesource呼び出しase157_resを追加します

[root@pldbsv01 ~]# pcs resource create ase157_res lsb:sybase op monitor interval=30s
[root@pldbsv01 ~]# pcs constraint order start gfs2sybasedata_res-clone then ase157_res
    Adding gfs2sybasedata_res-clone ase157_res (kind: Mandatory) (Options: first-action=start then-action=start)

[root@pldbsv01 ~]# pcs constraint colocation add ase157_res with gfs2sybasedata_res-clone
[root@pldbsv01 ~]# pcs status
Cluster name: PLDBSV_CLUSTER
Last updated: Wed Apr 20 12:22:51 2016      Last change: Wed Apr 20 12:20:18 2016 by root via cibadmin on pldbsv01-cr
Stack: corosync
Current DC: pldbsv01-cr (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 10 resources configured

Online: [ pldbsv01-cr pldbsv02-cr ]

Full list of resources:

 Resource Group: PLDBSV_RESOURCE
     PLDBSV_VIP (ocf::heartbeat:IPaddr2):   Started pldbsv02-cr
 idrac-pldbsv01 (stonith:fence_ipmilan):    Started pldbsv01-cr
 idrac-pldbsv02 (stonith:fence_ipmilan):    Started pldbsv01-cr
 Clone Set: dlm-clone [dlm]
     Started: [ pldbsv02-cr ]
     Stopped: [ pldbsv01-cr ]
 Clone Set: clvmd-clone [clvmd]
     Started: [ pldbsv02-cr ]
     Stopped: [ pldbsv01-cr ]
 Clone Set: gfs2sybasedata_res-clone [gfs2sybasedata_res]
     Started: [ pldbsv02-cr ]
     Stopped: [ pldbsv01-cr ]
 ase157_res (lsb:sybase):   Stopped

Failed Actions:
* ase157_res_start_0 on pldbsv02-cr 'unknown error' (1): call=41, status=Timed Out, exitreason='none',
    last-rc-change='Wed Apr 20 12:21:35 2016', queued=0ms, exec=20002ms
* ase157_res_start_0 on pldbsv01-cr 'unknown error' (1): call=45, status=Timed Out, exitreason='none',
    last-rc-change='Wed Apr 20 12:19:56 2016', queued=0ms, exec=20002ms


PCSD Status:
  pldbsv01-cr: Online
  pldbsv02-cr: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

エラー

失敗したアクション:

  • ase157_res_start_0 on pldbsv02-cr '不明なエラー'(1):call = 41、status = Timed Out、exitreason = 'none'、last-rc-change = 'Wed Apr 20 12:21:35 2016'、queued = 0ms、 exec = 20002ms
  • ase157_res_start_0 on pldbsv01-cr '不明なエラー'(1):call = 45、status = Timed Out、exitreason = 'none'、last-rc-change = 'Wed Apr 20 12:19:56 2016'、queued = 0ms、 exec = 20002ms

そこで、 付録G. InitスクリプトLSBコンプライアンス で詳しく説明されている手順に従って、sybaseスクリプトを確認しました。

これらの手順の項目5をテストしたところ、出力された結果は0でした。

ステータス(停止):

/etc/init.d/some_service status;エコー「結果:$?」

私の質問:

  • スクリプトはコマンドを受け入れましたか?
  • スクリプトは、サービスが実行されていなかったことを示しましたか?
  • コマンドは結果を出力しました:3(通常の出力に加えて)?
  • どうすれば修正できますか?
#!/bin/sh
#
# Startup script for Sybase ASE
# Description: Service script for starting/stopping/monitoring \
#              Sybase Adaptive Server on: \
#                            Red Hat Enterprise Linux 6 \
# Release date 2015-08-11
# Version 1 
# Processname: dataserver
# (1) Before running this script, we assume that user has installed
#     Sybase ASE 15.0.2 or higher version on the machine.
# (2) This script should be put under /etc/init.d. Its owner should be "root" with 
#     execution permission.
# (3) You must define the variables "SYBASE" "SERVER" BACKUPSERVER"
# (4) You can change Adaptive Server login name and password in line 96,
#     defaults are "sa" and "sybase"



SYBASE=/opt/sybase
SERVER=PLDBSV
BACKUPSERVER=PLDBSV_BS

# Source environment variables.
. $SYBASE/SYBASE.sh


# Find the name of the script
NAME=`basename $0`


# For SELinux we need to use 'runuser' not 'su'
if [ -x /sbin/runuser ]
then
  SU=runuser
else
  SU=su
fi


# Start sybase Adaptive Server and Backup Server
start() {
  SYBASE_ASE_START=$"Starting ${NAME} Adaptive Server: "
  $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null"
  ret=$? 
  if [ $ret -eq 0 ]
  then    
      echo -n "$SYBASE_ASE_START                    ["
      echo -n -e "\033[32m Success \033[0m"  
      echo "]"
  else
      echo -n "$SYBASE_ASE_START           ["
      echo -n -e "\033[31m Failed \033[0m"
      echo "]"
                exit 1
  fi

  for ((i=1; i<31; i++))
  do
        sleep 1
        echo "waitting $i sec to prepare Backup Server!"
  done

  SYBASE_BS_START=$"Starting ${NAME} Backup Server: "
  $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${BACKUPSERVER} > /dev/null"
  ret=$? 
  if [ $ret -eq 0 ]
  then
      echo -n "$SYBASE_BS_START                    ["
      echo -n -e "\033[32m Success \033[0m"
      echo "]"
  else
      echo -n "$SYBASE_BS_START                    ["
      echo -n -e "\033[31m Failed \033[0m"
      echo "]"
                exit 1
  fi  
}

#stop sybase adaptive server and backup server
stop() {
  SYBASE_BS_STOP=$"Stopping ${NAME} Backup Server"
  pid=$(pidof backupserver)
  if [ $pid > 0 ]
  then
  $SU root -c "kill -9 $pid > /dev/null"
      echo -n "$SYBASE_BS_STOP                     ["
      echo -n -e "\033[32m Success \033[0m"
      echo "]"
  else
      echo -n "$SYBASE_BS_STOP                     ["
      echo -n -e "\033[31m Failed \033[0m"
      echo "]"
  fi

  SYBASE_ASE_STOP=$"Stopping ${NAME} Adaptive Server: "
  $SU sybase -c ". $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P sybase < \
$SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null"
  ret=$?
  if [ $ret -eq 0 ]
  then
      echo -n "$SYBASE_ASE_STOP            ["
      echo -n -e "\033[32m Success \033[0m"
      echo "]"
  else
      echo -n "$SYBASE_ASE_STOP            ["
      echo -n -e "\033[31m Failed \033[0m"
      echo "]"
      exit 1
  fi
}

restart() {
  stop
  start
}

# Check Sybase Adaptive Server and Backup Server status
status() {
  dataserver=$(pidof dataserver)
  backupserver=$(pidof backupserver)
  if [ -n "$dataserver" ]; then
      echo "sybase Adaptive Server is running!" && exit 0 || exit $?
  else
      echo "sybase Adaptive Server is stopped!"

  fi

  if [ -n "$backupserver" ]; then     
      echo "sybase Backup Server is running!" && exit 0 || exit $?
  else
      echo "sybase Backup Server is stopped!"
      exit 1
  fi
}

case "$1" in
  start)
      start
      ;;
  stop)
      stop
      ;;
  restart)
      restart
      ;;
  status) 
      status
      ;;
  *)
      echo $"Usage: $0 {start|stop|restart|status}"
      exit 1
esac

スクリプトはすべて合格です LSB互換 ですが、機能しません!

#!/bin/sh
#
# Startup script for Sybase ASE
# Description: Service script for starting/stopping/monitoring \
#              Sybase Adaptive Server on: \
#                            Red Hat Enterprise Linux 6 \
# Release date 2015-08-11
# Version 1 
# Processname: dataserver
# (1) Before running this script, we assume that user has installed
#     Sybase ASE 15.0.2 or higher version on the machine.
# (2) This script should be put under /etc/init.d. Its owner should be "root" with 
#     execution permission.
# (3) You must define the variables "SYBASE" "SERVER" BACKUPSERVER"
# (4) You can change Adaptive Server login name and password in line 96,
#     defaults are "sa" and "sybase"



SYBASE=/opt/sybase
SERVER=PLDBSV
BACKUPSERVER=PLDBSV_BS

# Source environment variables.
. $SYBASE/SYBASE.sh


# Find the name of the script
NAME=`basename $0`


# For SELinux we need to use 'runuser' not 'su'
if [ -x /sbin/runuser ]
then
    SU=runuser
else
    SU=su
fi


# Start sybase Adaptive Server and Backup Server
start() {
    SYBASE_ASE_START=$"Starting ${NAME} Adaptive Server: "
    $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null"
    ret=$? 
    if [ $ret -eq 0 ]
    then    
        echo -n "$SYBASE_ASE_START                    ["
        echo -n -e "\033[32m Success \033[0m"  
        echo "]"
    else
        echo -n "$SYBASE_ASE_START           ["
        echo -n -e "\033[31m Failed \033[0m"
        echo "]"
                exit 1
    fi

    for ((i=1; i<31; i++))
    do
        sleep 1
        echo "waitting $i sec to prepare Backup Server!"
    done

    SYBASE_BS_START=$"Starting ${NAME} Backup Server: "
    $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${BACKUPSERVER} > /dev/null"
    ret=$? 
    if [ $ret -eq 0 ]
    then
        echo -n "$SYBASE_BS_START                    ["
        echo -n -e "\033[32m Success \033[0m"
        echo "]"
    else
        echo -n "$SYBASE_BS_START                    ["
        echo -n -e "\033[31m Failed \033[0m"
        echo "]"
                exit 1
    fi  
}

#stop sybase adaptive server and backup server
stop() {
    SYBASE_BS_STOP=$"Stopping ${NAME} Backup Server"
    pid=$(pidof backupserver)
    if [ $pid > 0 ]
    then
    $SU root -c "kill -9 $pid > /dev/null"
        echo -n "$SYBASE_BS_STOP                     ["
        echo -n -e "\033[32m Success \033[0m"
        echo "]"
    else
        echo -n "$SYBASE_BS_STOP                     ["
        echo -n -e "\033[31m Failed \033[0m"
        echo "]"
    fi

    SYBASE_ASE_STOP=$"Stopping ${NAME} Adaptive Server: "
    $SU sybase -c ". $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P sybase < \
$SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null"
    ret=$?
    if [ $ret -eq 0 ]
    then
        echo -n "$SYBASE_ASE_STOP            ["
        echo -n -e "\033[32m Success \033[0m"
        echo "]"
    else
        echo -n "$SYBASE_ASE_STOP            ["
        echo -n -e "\033[31m Failed \033[0m"
        echo "]"
        exit 0
    fi
}

restart() {
    stop
    start
}

# Check Sybase Adaptive Server and Backup Server status
status() {
    dataserver=$(pidof dataserver)
    backupserver=$(pidof backupserver)
    if [ -n "$dataserver" ]; then
        echo "sybase Adaptive Server is running!"
    else
        echo "sybase Adaptive Server is stopped!" 

    fi

    if [ -n "$backupserver" ]; then     
        echo "sybase Backup Server is running!" && exit 0 || exit $?
    else
        echo "sybase Backup Server is stopped!"
        exit 3
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status) 
        status
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 1
esac

問題を解決する方法について何か提案はありますか?

2
Arthur Cheng

の結果 pcs resource show ase157_resop start timeout="20s"

「/etc/init.d/that_scriptstart」まで30秒かかるので、timeout=はそれ以上でなければなりません。

2
Taichi Yanagiya

スクリプトのステータス関数にexit 3を追加して、準拠させようとしましたか?

このようなものが機能するはずです:

# Check Sybase Adaptive Server and Backup Server status
status() {
  dataserver=$(pidof dataserver)
  backupserver=$(pidof backupserver)
  if [ -n "$dataserver" ]; then
      echo "sybase Adaptive Server is running!" && exit 0 || exit $?
  else
      echo "sybase Adaptive Server is stopped!"
      exit 3
  fi

  if [ -n "$backupserver" ]; then     
      echo "sybase Backup Server is running!" && exit 0 || exit $?
  else
      echo "sybase Backup Server is stopped!"
      exit 1
  fi
}

EDIT:失敗したアクションは開始操作に対するものでした。スクリプトで何が失敗しているのかをデバッグしようとすると、「ロガー」コマンドをスローし始め、ログを見て失敗が発生している場所と理由をデバッグできるようにします。

このようなもの:

# Start sybase Adaptive Server and Backup Server
start() {
  logger "DEBUG: ENTERED START FUNCTION
  SYBASE_ASE_START=$"Starting ${NAME} Adaptive Server: "
  $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null"
  ret=$?
  logger "DEBUG: RETURN CODE: $ret"
  logger "DEBUG: CHECK THE VARS:"
  logger "DEBUG: \$SU=$SU"
  logger "DEBUG: \$SYBASE/SYBASE.sh=$SYBASE/SYBASE.sh"
  logger "DEBUG: \$SYBASE_ASE=$SYBASE_ASE"
  logger "DEBUG: \${SERVER}=${SERVER}"
  if [ $ret -eq 0 ]
  then
      echo -n "$SYBASE_ASE_START                    ["
      echo -n -e "\033[32m Success \033[0m"
      echo "]"
      logger "DEBUG: We're about to leave \$ret -eq 0"
  else
      echo -n "$SYBASE_ASE_START           ["
      echo -n -e "\033[31m Failed \033[0m"
      echo "]"
      logger "DEBUG: We're about to leave \$ret -ne 0"
                exit 1
  fi

次に、ログ(/ var/log/messagesまたは/ var/log/syslog)を調べ、「DEBUG」メッセージを探して、スクリプトのどこで問題が発生しているかを判断します。

0
Matt Kereczman