Kudu 는 tablet server 에 위치(location) 문자열을 부여하고, 같은 위치에 복제본이 몰리지 않도록 배치하는 기능을 갖고 있다. HDFS 의 rack awareness 에 대응하는 기능이며 랙 단위 장애 격리가 목적이다.
위치는 tablet server 자신이 정하지 않는다. 마스터가 --location_mapping_cmd 로 지정된 외부 명령을 실행해, 등록해 온 tablet server 의 주소를 위치 문자열로 변환한다. 위치 문자열은 /dc0/rack1 처럼 슬래시로 시작하는 계층 경로 형식이다.
--location_mapping_cmd=/opt/kudu/bin/location_mapping.py
Cloudera Manager 로 관리하는 클러스터는 호스트에 지정한 랙 정보를 바탕으로 이 매핑을 구성해 준다.
--location_mapping_cmd 는 마스터가 기동할 때 읽어 들이는 설정이고, 각 tablet server 의 위치는 그 서버가 마스터에 등록되는 시점에 확정된다. 따라서 설정만 비우면 즉시 반영되지 않는다.
| 대상 | 필요 작업 |
|---|---|
| Kudu Master | 설정 변경 후 재시작 |
| Kudu Tablet Server | 마스터에 재등록되도록 재시작 |
마스터가 여러 대면 한 대씩 롤링으로 재시작한다. 리더 마스터가 바뀌는 순간 짧은 쓰기 중단이 생길 수 있으나 3대 구성이면 영향은 크지 않다.
kudu tserver list <master-addresses> -columns=uuid,rpc-addresses,location
location 열이 비어 있으면 해제가 반영된 것이다. 웹 UI 의 tablet server 목록에서도 같은 값을 볼 수 있다.
위치 정보를 없애도 기존 복제본은 그대로 남는다. 이후 새로 만들어지는 태블릿부터 위치를 고려하지 않고 배치되며, 리밸런서도 위치 정책 없이 동작한다. 기존 배치를 다시 흩으려면 리밸런스를 따로 돌려야 한다.
kudu cluster rebalance <master-addresses>
반대로 위치를 새로 도입한 경우에도 마찬가지다. 설정을 넣는 것만으로 기존 태블릿이 재배치되지는 않는다.
kudu cluster rebalance --help 로 확인한다. (확인 필요)