Pacemaker - Corosync - HA - 단순 사용자 지정 리소스 테스트 - 상태 스윙 - 시작됨 - 실패 - 중지됨 - 시작됨

Pacemaker - Corosync - HA - 단순 사용자 지정 리소스 테스트 - 상태 스윙 - 시작됨 - 실패 - 중지됨 - 시작됨

나는 테스트를 위해 OCF:Heartbeat:Dummy 스크립트를 사용하고 있으며, 그것이 어떻게 작동하고 빌드되는지 알기 위해 매우 기본적인 설정을 갖고 싶었습니다.

내가 찾을 수 있는 유일한 정보는 여기 이 웹 블로그에 있습니다. https://raymii.org/s/tutorials/Corosync_Pacemaker_-_Execute_a_script_on_failover.html

오타가 몇 개 있지만 기본적으로 저에게는 효과적입니다.

현재 스크립트에는 다음 내용만 포함되어 있습니다.

sudo nano /usr/local/bin/failover.sh && sudo chmod +x /usr/local/bin/failover.sh

#!/bin/sh

touch /tmp/testfailover.sh

이것은 내 설정입니다.

cp /usr/lib/ocf/resource.d/heartbeat/Dummy /usr/lib/ocf/resource.d/heartbeat/FailOverScript

sudo nano /usr/lib/ocf/resource.d/heartbeat/FailOverScript

dummy_start() {
    dummy_monitor
    /usr/local/bin/failover.sh
    if [ $? =  $OCF_SUCCESS ]; then
    return $OCF_SUCCESS
    fi
    touch ${OCF_RESKEY_state}
}

sed -i 's/Dummy/FailOverScript/g' /usr/lib/ocf/resource.d/heartbeat/FailOverScript



sed -i 's/dummy/FailOverScript/g' /usr/lib/ocf/resource.d/heartbeat/FailOverScript

pcs resource create FailOverScript ocf:heartbeat:FailOverScript op monitor interval="30"

내가 실제로 할 수 있는 유일한 테스트는 다음과 같습니다.

[root@node2 ~]# /usr/lib/ocf/resource.d/heartbeat/FailOverScript start ; echo $?
DEBUG: default start : 0
0

ocf-tester는 최신 HA 소프트웨어 제품군에 존재하지 않는 것 같습니다. 수동으로 설치하는 방법은 확실하지 않지만 스크립트는 "절반 작동"합니다.

스크립트에는 모니터링이 필요하지 않으며 매우 기본적이어야 하지만 스래싱이 발생하고 다음과 같은 오류 코드가 표시되는 것 같습니다. 무엇을 해야할지 아시나요?

FailOverScript (ocf::heartbeat:FailOverScript):        Started
node2

Failed Actions:
* FailOverScript_monitor_30000 on node2 'not running' (7): call=
24423, status=complete, exitreason='none',
    last-rc-change='Tue Aug 16 15:53:50 2016', queued=0ms, exec=
9ms

내가 하고 싶은 일의 예:

클러스터 시작

스크립트는 "start.sh"를 실행합니다.

클러스터가 노드 2로 장애 조치됩니다.

스크립트는 node1에서 "fail.sh"를 실행합니다.

node2에서 "start.sh" 스크립트 실행

반대 방향에서 실패하면 그 반대도 마찬가지입니다.

참고: 스크립트가 작동하면 /tmp/testfailover.sh가 표시됩니다. 파일을 삭제하기 위해 dummy_stop 아래에 다른 스크립트를 넣으려고 시도했지만 작동했지만 파일 삭제/추가/제거/추가 및 시작/실패/중지/시작 등을 통해 계속 스 래싱됩니다.

읽어 주셔서 감사합니다!

답변1

문제를 발견했습니다. 오타가 있습니다.그 가이드. 명령은 dummy_monitor과 사이에 있어서는 안 됩니다 if [ $? = $OCF_SUCCESS ]; then. 이는 $?명령의 반환 결과를 가져오기 때문입니다 dummy_monitor. 그것은해야한다:

dummy_start() {
    dummy_monitor
    if [ $? =  $OCF_SUCCESS ]; then
    /usr/local/bin/failover.sh
    return $OCF_SUCCESS
    fi
    touch ${OCF_RESKEY_state}
}

몇 가지 테스트 후 편집:

위 형식은 오류를 제거하지만 실제로 장애 조치 시 스크립트를 실행하려는 경우 실제로 장애 조치 시 스크립트를 실행하지 않습니다.

dummy_start() {
    dummy_monitor
    if [ $? =  $OCF_SUCCESS ]; then
    return $OCF_SUCCESS
    fi
    /usr/local/bin/failover.sh
    touch ${OCF_RESKEY_state}
}

관련 정보