-
2024.05.06 Galera Crash RecoveryTIL 2024. 5. 6. 20:24
Crash Recovery
앞서 봤던 것처럼 트랜잭션이 donor의 gcahce에 남아있으면 IST로 복제를 하고 없으면 SST로 복제를 한다.
IST는 non blocking으로 진행되기 때문에 read write가 가능하다. 다만 성능에 영향을 줄 수도 있으니 매직넘버 3을 유지하는 것이 좋다.
만약에 순서대로 DB가 뜰 때 바로 앞에 뜬 db를 donor로 사용할 수도 있으니 잘 확인하자.
모든 노드가 정상적으로 다운됐을 때 가장 마지막으로 다운된 노드를 찾아야 하고 해당 노드를 기반으로 클러스터를 띄워야 한다.
만약 가장 마지막 노드가 아닌 다른 노드를 기반으로 클러스터를 띄우면 가장 마지막에 종료된 노드는 SST 기반 복제가 되기에 시간이 오래 걸리고 데이터가 유실될 수 있다.
순서는 grastate.dat의 seqno를 비교해야 한다.
모든 노드가 다운되었다면 gcache가 없으므로 SST 방식을 통해 복제한다. 모든 노드가 동일한 위치에서 종료되도록 하는 것이 좋은데 비정상적인 상황에서는 힘들듯하다.
Two Nodes Disappear from the Cluster
비정상 종료일 때인데 "Good bye"를 수신하지 않고 죽었을 때를 이야기하는 거 같다.
쿼럼을 구성할 수 없어서 하나 남은 DB가 쿼리 실행을 할 수 없는 것일까.
All Nodes Go Down Without a Proper Shutdown Procedure
음. 모든 노드가 "Good bye"없이 죽었을 때를 의미하는 것 같다.
아래처럼 우리도 seqno가 -1로 되어 있었다. 이건 앞에서 말한 db복구를 위해 마지막 트랜잭션 id를 나타내는 것이 아니라 비정상 종료를 의미하는 것 같다.
해당 노드에서 bootstrap을 하면 실패한다는 의미가 클러스터를 띄울 수 없다는 의미 같은데..
해당 노드가 safe_to_bootstrap 0이었기 때문에 galera_new_cluster이 거부되었던 거 같다.
먼저 최신 노드를 파악해야 했고 그리고 파악한 최신노드에서 safe_to_bootstrap을 1로 바꾸고 galera_new_cluster를 했어야 했다.
만약 서로 데이터 불일치가 발생한 노드가 생긴다면? ative-ative 구조에서 각 노드가 write 쿼리를 수행하고 복제 전에 죽어버린다면..
The Cluster Loses its Primary State Due to Split Brain 이거 같은데 더 읽어봐야겠다..
'TIL' 카테고리의 다른 글
2024.05.08 build server down, Share Data Between MSA (0) 2024.05.08 2024.05.07 Sharing Data Between Microservices (0) 2024.05.07 2024.05.05 Galera IST (0) 2024.05.05 2024.05.04 Galeral Physical State Snapshot, Understanding the bug (0) 2024.05.04 2024.05.03 Galera SST (0) 2024.05.03