2013-12-12 3 views
6

카산드라 버전 1.2.9. 다섯 개의 노드 클러스터가 있지만 노드 중 하나가 하드웨어 오류 및 수리/교체 ETA로 인해 작동 중지되었습니다. 다운 노드를 제거/제거하고 싶습니다 (알림이 모든 로그를 복잡하게합니다). 호스트 ID가 필요하다는 것을 제외하고는 nodetool removenode가 완벽 해 보입니다. 다운 된 노드에는 호스트 ID가 없습니다 (상태에서 null로 표시됨).카산드라 - 사각 노드를 제거하는 방법

이제는 removetoken이 nodetool의 옵션이 아닌 것 같습니다.

이 죽은 노드를 제거하는 적절한 방법은 무엇입니까?

+0

DataStax의 "dead node 교체"문서에 대한 링크를 제공 하겠지만, 마지막 단계는 당신이 말한 'nodetool removenode'를하는 것입니다. 너는 '노드 툴 이동'을 해봤습니까? 이론적으로 대체 노드를 초기화하고 (initial_token을 불감 노드의 집합에서 빼고 -1) 원하는 토큰 범위로 옮길 수 있습니다. – Aaron

+1

아직 대체 서버가 없습니다. 나는 removetoken을 시도했다; 이 버전에서는 더 이상 사용되지 않습니다. 나는 removenode를 시도했다; 호스트 ID가 없으므로 실패합니다. 나는 이동을 시도했고 충분한 스트리밍 소스를 얻지 못했습니다. 다음은 JMX 명령입니다 : 쉘 모드로 들어갑니다. % jmx_invoke -m org.apache.cassandra.net:type=Gossiper unsafeAssassinateEndpoint . 그것은 널 포인터 예외로 실패했습니다. 아직도이 일을하고 있습니다. –

+6

다음 단계는 작동하지 않습니다. - 1) 나머지 각 노드에서, cassandra-env.sh 파일의 JVM_OPTS에 -Dcassandra.load_ring_state = false를 추가하고 다시 시작하십시오. - 2) nodetool 상태를 다시 실행하고 원하지 않는 노드가 없어 졌는지 확인하십시오. - 3) 각 노드에서 system.peers에서 delete를 실행합니다. 여기서 peer = '[죽은 노드의 IP 주소]'; via cqlsh - 4) 각 노드의 cassandra-env.sh에서 -Dcassandra.load_ring_state = false를 제거하고 다시 시작하십시오. –

답변

0

질문은 이전 버전의 cassandra에 대한 것입니다. 그러나 공식적인 해결책은 모든 버전의 카산드라에 적용되어야합니다. - https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsGossipPurge.html

단계는 기본적으로 클러스터를 중지하고, 피어링과 관련된 스 타일을 삭제하고, 가십 상태를 지우고 클러스터를 다시 시작하도록 알려줍니다. 그것은 의미가 있습니다.

관련 문제