2 노드 액티브 / 패시브 리눅스 HA 맥박 조정기 클러스터에서 STONITH를 설정하는 방법은 무엇입니까?


12

PostgreSQL 데이터베이스를 유지하기 위해 corosync 및 pacemaker를 사용하여 능동 / 수동 (2 노드) Linux-HA 클러스터를 설정하려고합니다. DRBD와 service-ip를 통해 작동합니다. node1이 실패하면 node2가 대신해야합니다. PG가 node2에서 실행되고 실패하면 동일합니다. STONITH를 제외한 모든 것이 잘 작동합니다.

노드 사이에는 전용 HA 연결 (10.10.10.X)이 있으므로 다음과 같은 인터페이스 구성이 있습니다.

eth0            eth1            host
10.10.10.251    172.10.10.1     node1
10.10.10.252    172.10.10.2     node2

Stonith가 활성화되어 있고 노드를 죽이기 위해 ssh-agent로 테스트하고 있습니다.

crm configure property stonith-enabled=true
crm configure property stonith-action=poweroff
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore

crm configure primitive stonith_postgres stonith:external/ssh \
                params hostlist="node1 node2"
crm configure clone fencing_postgres stonith_postgres

crm_mon -1 보여줍니다 :

============
Last updated: Mon Mar 19 15:21:11 2012
Stack: openais
Current DC: node2 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
4 Resources configured.
============

Online: [ node2 node1 ]

Full list of resources:

 Master/Slave Set: ms_drbd_postgres
     Masters: [ node1 ]
     Slaves: [ node2 ]
 Resource Group: postgres
     fs_postgres        (ocf::heartbeat:Filesystem):    Started node1
     virtual_ip_postgres        (ocf::heartbeat:IPaddr2):       Started node1
     postgresql (ocf::heartbeat:pgsql): Started node1
 Clone Set: fencing_postgres
     Started: [ node2 node1 ]

문제는 eth0 인터페이스 간의 연결을 끊으면 두 노드를 모두 죽 입니다. 노드가 2 개뿐이므로 쿼럼에 문제가 있다고 생각합니다. 그러나 올바른 정족수를 계산하기 위해 세 번째 노드를 추가하고 싶지 않습니다.

이 문제를 해결할 아이디어가 있습니까?


crm_mon클러스터가 실패한 상태에서 출력 결과는 어떻습니까?
Larsks

1
이제 postgres와 같은 노드에서 실행되지 않는 하나의 stonith 장치를 사용하고 있습니다. 이 작품은 예상대로입니다!
MMore

답변:


21

이것은 약간 오래된 질문이지만 여기에 제시된 문제는 클러스터, 특히 2 노드 클러스터의 장애 조치 작동 방식과시기에 대한 오해에 근거합니다.

요점은 다음과 같습니다 . 두 노드 간의 통신을 비활성화하여 장애 조치 테스트를 수행 할 수 없습니다. 그렇게하면 정확히보고있는 것과 상호간의 STONITH가 추가 된 분할 시나리오가됩니다. 펜싱 기능을 테스트 killall -9 corosync하려면 활성 노드 에서 간단 하게 수행하십시오. 다른 방법은 crm node fence또는 stonith_admin -F입니다.

클러스터에 대한 완전하지 않은 설명 ( crm configure show및 출력은 cat /etc/corosync/corosync.conf?)에서 메시징, 즉 Corosync / cluster 통신에 10.10.10.xx 주소를 사용하고있는 것 같습니다. 172.10.10.xx 주소는 일반 / 서비스 네트워크 주소이며 SSH를 사용하여 172.10.10.xx 주소로 지정된 노드에 액세스합니다. DNS는 또한 node1172.10.10.1 과 같은 노드 호스트 이름을 확인하는 것으로 보입니다 .

SSH를 사용하도록 STONITH를 구성했습니다. SSH 자체는 그다지 좋은 아이디어는 아니지만 테스트 중일 것입니다. 나는 그것을 직접 사용하지는 않았지만 SSH STONITH 에이전트가 다른 노드에 로그인하고 종료 명령 ssh root@node2 "shutdown -h now"또는 이와 동등한 것을 발행한다고 가정합니다 .

이제 노드 간 클러스터 통신을 끊으면 어떻게됩니까? 노드간에 더 이상 통신이 없기 때문에 노드는 더 이상 각 노드를 활성 상태로 인식하지 않습니다. 따라서 각 노드는 유감스러운 이벤트의 유일한 생존자라고 가정하고 활성 또는 기본 노드가 되려고합니다. 이것은 고전적이고 두려운 스플릿 브레인 시나리오 입니다.

이 중 일부는 것입니다 확인 다른, 분명하고 아마도 실패 노드가 STONITH이 들어 오면 좋은을 위해 아래 있음을 유의하십시오. 노드가 지금 같은 게임을하고있다 : 시도가되기 위해 (또는 체류) 활성 및 포획 헤드의 다른 노드를 촬영할뿐 아니라 모든 클러스터 리소스를 통해

아마 지금 무슨 일이 일어날 지 추측 할 수 있습니다. node1수행 ssh root@node2 "shutdown -h now"node2수행합니다 ssh root@node1 "shutdown -h now". 클러스터 통신 네트워크 10.10.10.xx를 사용하지 않고 서비스 네트워크 172.10.10.xx를 사용합니다. 두 노드가 실제로 살아 있고 잘 작동하기 때문에 명령을 실행하거나 SSH 연결을받는 데 아무런 문제가 없으므로 두 노드가 동시에 서로를 쏠 수 있습니다. 이것은 두 노드를 모두 죽입니다.

STONITH를 사용하지 않으면 분할 뇌는 특히 DRBD의 경우 더 나쁜 결과를 초래할 수 있습니다. 특히 DRBD의 경우 두 노드가 모두 기본이 될 수 있습니다. 데이터 손상이 발생할 가능성이 있으며 분할 브레인을 수동으로 해결해야합니다.

http://www.hastexo.com/resources/hints-and-kinks에 있는 자료를 읽는 것이 좋습니다.이 기사 는 오늘날 "Linux HA"라고하는 많은 부분을 기여한 사람들이 작성하고 유지 관리합니다. 스택".

TL; DR : 펜싱 설정을 테스트하기 위해 노드 간 클러스터 통신을 차단 하는 경우 잘못하고 있습니다 . 사용 killall -9 corosync, crm node fence또는 stonith_admin -F대신. 클러스터 통신을 줄이면 분할 브레인 시나리오 만 발생하여 데이터가 손상 될 수 있습니다.


2

auto_tie_breaker: 1/etc/corosync/corosync.conf의 쿼럼 섹션에 추가해 볼 수 있습니다

ATB가 활성화되면 클러스터가 결정적 방식으로 최대 50 %의 노드 장애를 동시에 겪을 수 있습니다. 가장 낮은 nodeid를 가진 노드와 여전히 연결되어있는 클러스터 파티션 또는 노드 세트는 정족수로 유지됩니다. 다른 노드는 정족수입니다.


0

Pacemaker 설명서 의 쿼럼 및 2 노드 클러스터 장을 읽으십시오 .


쿼럼 정책이 아닌 것을 의미한다고 생각하십시오. 나는 이미 그것을 설정했다 (첫 번째 게시물도 편집했다). 여기에 도움이되지 않습니다. 좀 더 자세히 설명해 주시겠습니까?
MMore

글쎄, 설명서는 클러스터에 쿼럼 문제가있을 경우 페이스 메이커가 특정 메시지를 기록 할 것을 제안합니다. 당신은 당신의 로그에 그것을 볼 수 있습니까? 무엇을 crm_mon보여줍니까?
larsks

sth를 찾을 수 없습니다. 로그에서 흥미있는. 의 정보로 첫 번째 게시물을 수정했습니다 crm_mon -1.
MMore

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.