.NET Framework를 사용하여 2노드 클러스터(두 노드 모두 RHEL 7)를 만들었습니다 pacemaker
. 사용자 정의 응용 프로그램을 실행하는 데 사용됩니다. 다음 리소스를 생성하여 클러스터에 할당했습니다.
- 애플리케이션 데이터를 위한 공유 스토리지
- 가상 IP
그것은 아주 잘 작동합니다.
이제 요청이 있습니다. 현재 장애 조치는 전체 서버에 문제가 있는 경우에만 발생합니다. Pacemaker는 활성 노드에서 실행 중인 애플리케이션의 상태를 인식하지 못하며 이를 완전히 무시합니다. 애플리케이션에 대한 상태 확인을 실행하고 애플리케이션의 상태에 따라 true/false 값을 반환하는 셸 스크립트가 있습니다.
누구든지 이 셸 스크립트를 사용하여 클러스터의 활성 노드에 있는 애플리케이션의 상태를 주기적으로 확인하고 스크립트가 오류 값을 반환하는 경우 장애 조치를 시작하도록 맥박 조정기를 구성하는 방법을 제안할 수 있습니까?
http://127.0.0.1/samplepage.html
나는 웹 서버 클러스터에서 사람들이 샘플 HTML 페이지를 생성하고 이( )를 페이스메이커의 리소스로 사용하여 활성 노드에 있는 Apache 웹 서버의 상태를 확인하는 몇 가지 예를 보았습니다 .
쉘 스크립트를 사용하여 유사한 결과를 얻는 방법을 안내해 주십시오.
고쳐 쓰다:
내 구성은 다음과 같습니다.
[root@node1 ~]# pcs status
Cluster name: webspheremq
Stack: corosync
Current DC: node1 (version 1.1.15-11.el7-e174ec8) - partition with quorum
Last updated: Wed Jun 14 20:38:48 2017 Last change: Tue Jun 13 20:04:58 2017 by root via crm_attribute on svdg-stg29
2 nodes and 3 resources configured: 2 resources DISABLED and 0 BLOCKED from being started due to failures
Online: [ node1 node2 ]
Full list of resources:
Resource Group: websphere
websphere_fs (ocf::heartbeat:Filesystem): Started node1
websphere_vip (ocf::heartbeat:IPaddr2): Started node1
FailOverScript (ocf::heartbeat:Dummy): Started node1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
애플리케이션을 시작하고 중지하기 위해 두 개의 쉘 스크립트가 있습니다. 장애 조치 중에는 stop.sh
리소스가 이동될 노드와 start.sh
클러스터가 장애 조치되는 노드에서 실행 해야 합니다 .
몇 가지 실험을 수행한 결과 사람들이 이 요구 사항을 달성하기 위해 가상 리소스를 사용하고 있음을 발견했습니다(장애 조치 중 스크립트 실행).
지금까지 내가 한 일은 다음과 같습니다.
FailOverScript
다음과 같이 애플리케이션 시작/중지 스크립트를 테스트하기 위해 더미 리소스( )를 만들었습니다 .
[root@node1 tmp]# pcs status resources
Resource Group: websphere
websphere_fs (ocf::heartbeat:Filesystem): Started node1
websphere_vip (ocf::heartbeat:IPaddr2): Started node1
**FailOverScript (ocf::heartbeat:Dummy): Started node1**
현재로서는 FailOverScript 리소스의 시작 및 중지 작업 아래에 테스트 스크립트를 포함했습니다. 이 가상 리소스가 시작되고 중지될 때 각각 스크립트 실패 시작script.sh 및 실패 중지 스크립트.sh를 실행해야 합니다.
[root@node1 heartbeat]# pwd
/usr/lib/ocf/resource.d/heartbeat
[root@node1 heartbeat]#
[root@node1 heartbeat]# grep -A5 "start()" FailOverScript
FailOverScript_start() {
FailOverScript_monitor
/usr/local/bin/failoverstartscript.sh
if [ $? = $OCF_SUCCESS ]; then
return $OCF_SUCCESS
fi
[root@node1 heartbeat]#
[root@node1 heartbeat]#
[root@node1 heartbeat]# grep -A5 "stop()" FailOverScript
FailOverScript_stop() {
FailOverScript_monitor
/usr/local/bin/failoverstopscript.sh
if [ $? = $OCF_SUCCESS ]; then
rm ${OCF_RESKEY_state}
fi
그러나 해당 가상 리소스를 시작/중지하는 경우(수동 장애 조치를 통해) 스크립트가 실행되지 않습니다. 다양한 방법을 시도해 보았지만 여전히 원인을 알 수 없습니다. 장애 조치 중에 스크립트가 자동으로 실행되지 않는 이유를 찾는 데 도움이 필요합니다.
답변1
anything
임의의 스크립트를 실행하기 위해 가상 RA를 수정하는 대신 리소스 에이전트 사용을 고려할 수 있습니다.
# pcs resource describe ocf:heartbeat:anything
ocf:heartbeat:anything - Manages an arbitrary service
This is a generic OCF RA to manage almost anything.
Resource options:
binfile (required): The full name of the binary to be executed.
This is expected to keep running with the
same pid and not just do something and
exit.
cmdline_options: Command line options to pass to the binary
workdir: The path from where the binfile will be executed.
pidfile: File to read/write the PID from/to.
logfile: File to write STDOUT to
errlogfile: File to write STDERR to
user: User to run the command as
monitor_hook: Command to run in monitor operation
stop_timeout: In the stop operation: Seconds to wait for kill
-TERM to succeed before sending kill -SIGKILL.
Defaults to 2/3 of the stop operation timeout.
anything
매개변수 로 에이전트에 스크립트를 지정할 수 있으며 , 실행 중인 pid( 에이전트가 기본적으로 수행하는 작업)를 binfile=
확인하는 것 외에 사용자 정의 애플리케이션을 모니터링할 수 있는 방법이 있는 경우 매개변수에서 이를 정의할 수 있습니다.anything
monitor_hook