2013-05-14 3 views
5

저는 Cassandra의 초보자입니다. 단일 노드에서 Cassandra의 커밋 및 오류 복구와 관련된 정보를 검색했습니다. 그리고 누군가가 세부 사항을 명확히 할 수 있기를 바랍니다.Cassandra 단일 노드에서 커밋 및 복구

카산드라를 테스트 중이므로 단일 노드에서 설정하십시오. 수백만 개의 행을 삽입하기 위해 datastax에 stresstool을 사용하고 있습니다. 전기 장애 또는 시스템 종료가 발생하면 어떻게됩니까? Cassandra의 메모리에 있던 모든 데이터가 Cassandra가 다시 시작될 때 디스크에 기록됩니까? (commitlog가 중개자 역할을하는 것 같습니까?) 이 과정은 얼마나 걸립니까?

감사합니다.

답변

11

카산드라의 커밋 로그는 카산드라의 내구성 기록을 제공합니다. Cassandra에 쓸 때 쓰기는 클라이언트에 쓰기가 확인되기 전에 커밋 로그에 추가됩니다. 이것은 클라이언트가 성공적인 응답을 수신하는 모든 쓰기가 커밋 로그에 기록됨을 의미합니다. 쓰기는 또한 현재의 memtable에 대해서도 이루어지며, 결국에는 충분히 클 때 SSTable로 디스크에 기록됩니다. 쓰기가 완료된 후 오랜 시간이 걸릴 수 있습니다.

그러나 성능상의 이유로 커밋 로그는 즉시 디스크에 동기화되지 않습니다. 기본값은주기 모드이며 (cassandra.yaml의 commitlog_sync 매개 변수로 설정) 10 초입니다 (cassandra.yaml의 commitlog_sync_period_in_ms로 설정). 즉, 커밋 로그가 10 초마다 디스크에 동기화됩니다. 이 동작으로 인해 서버의 전원이 꺼지면 최대 10 초 동안 쓰기 작업이 손실 될 수 있습니다. 클러스터에 노드가 여러 개 있고 복제 계수를 1보다 큰 값으로 사용하면 데이터를 손실하기 위해 10 초 내에 여러 노드에 전원을 공급해야합니다.

이 위험 요소 창을 허용 할 수없는 경우 커밋 로그에 일괄 처리 모드를 사용할 수 있습니다. 이 모드는 커밋 로그가 디스크에 동기화 될 때까지 클라이언트에 대한 쓰기를 승인하지 않습니다. 시간 창은 commitlog_sync_batch_window_in_ms에 의해 설정되며 기본값은 50ms입니다. 이렇게하면 쓰기 대기 시간이 크게 늘어나고 처리량도 줄어들 기 때문에 승인 된 쓰기 손실 비용이 많은 경우에만 사용하십시오. 이 모드를 사용할 때는 커밋 로그를 별도의 드라이브에 저장하는 것이 특히 중요합니다.

서버의 전원이 꺼지면 시작시 Cassandra가 해당 memtable을 다시 작성하기 위해 커밋 로그를 재생합니다. 이 프로세스는 많은 양의 무거운 서버에서 초 (아마도 분)가 소요됩니다.

memtables의 데이터가 디스크에 기록되도록하려면 '노드 끄기 플러시'를 실행할 수 있습니다 (노드별로 작동). 이렇게하면 새로운 SSTable이 생성되고 플러시 된 memtables의 데이터를 참조하는 커밋 로그가 삭제됩니다.

+3

상세하고 잘 쓰여진 설명에 감사드립니다. 지금은 훨씬 명확합니다.나는 이것이 나를 좋아하는 다른 초보자들에게도 도움이되기를 바랍니다. – user1680784

+0

'일괄'및 '주기적으로'거꾸로 가질 수있는 것처럼 보입니다 ... 주기적으로 기본 설정이므로 확인을 기다리면 일괄 처리로 전환됩니다. –

+0

@ 리차드 나는이 문제에 직면 해있다. 카산드라 커밋 로그가 손상되었습니다. 어떤 제안? 여기에 질문을 게시했습니다 : http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo

0

당신은 SQL의 * 로더를 사용하여 Oracle에로드되는 시간 데이터에서 네트워크 오류가있는 경우 일어날 무엇

  1. 같은 것을 요구하고있다?
  2. 데이터를 전송하는 동안 Sqoop이 어떤 조건으로 인해 처리를 중단합니까?

정전 또는 시스템 종료 전에 어떤 데이터가 전송 되든지 동일하게 유지됩니다.

memtable의 공간이 부족할 때, 즉 키 수가 특정 제한을 초과하면 (기본값 128) 또는 지속 시간 (클러스터 클럭)에 도달하면 sstable에 저장됩니다 , 불변의 공간.

+0

두 번째 부분은 도움이되었습니다 - 감사합니다! – user1680784