quiesce 는 tablet server 를 "조용한 상태" 로 만드는 조작이다. 해당 서버가 새 리더가 되는 것을 막고, 이미 갖고 있는 리더 역할을 다른 복제본에 넘기며, 새 스캐너를 받지 않게 한다. 진행 중인 작업이 끝나면 그 서버를 내려도 클라이언트 쪽 오류가 거의 생기지 않는다. Kudu 1.12 부터 제공된다.
테이블 단위 DDL 이 아니라 서버 단위 조작이다. ALTER TABLE ... QUIESCE 같은 구문은 존재하지 않는다.
kudu tserver quiesce start <tserver>:7050
kudu tserver quiesce status <tserver>:7050
kudu tserver quiesce stop <tserver>:7050
status 는 아직 남아 있는 리더 태블릿 수와 활성 스캐너 수를 돌려준다. 두 값이 모두 0이 되면 정지해도 안전한 상태다.
start 에 완료 확인 옵션을 붙이면, 아직 정리되지 않았을 때 다음과 같이 보고하고 실패로 끝난다.
Illegal state: Tablet server is not fully quiesced: 4510 tablet leaders and 0 active scanners remain
스캐너가 0인데 리더가 많이 남아 있다는 것은 리더 이양이 아직 진행 중이라는 뜻이다. 태블릿이 수천 개면 이양에 시간이 걸리므로 몇 분 간격으로 status 를 다시 본다.
숫자가 전혀 줄지 않으면 리더 이양이 막혀 있는 것이다. 개별 태블릿의 리더를 직접 내려 볼 수 있다.
kudu cluster ksck <master-addresses>
kudu tablet leader_step_down <master-addresses> <tablet-id>
이양이 실패하는 흔한 사유는 남은 복제본 중 최신 로그를 가진 것이 없는 경우다. 복제가 지연된 태블릿이 있으면 ksck 에 드러나므로 먼저 그것을 해소한다.
quiesce stop 을 빠뜨리면 그 서버는 계속 리더를 맡지 않아 다른 노드에 부하가 몰린다.