Master
Master
HMaster는 Master Server의 구현체예요. Master 서버는 클러스터의 모든 RegionServer 인스턴스를 모니터링하는 역할을 맡으며, 모든 메타데이터 변경의 인터페이스가 돼요. 마스터가 다운됐을 때 클러스터에 어떤 일이 벌어지는지, 그리고 HMasterInterface가 제공하는 메서드와 백그라운드 프로세스를 살펴볼게요.
출처: 문서
본문
HMaster는 Master Server의 구현이에요. Master 서버는 클러스터의 모든 RegionServer 인스턴스를 모니터링하는 책임을 지고, 모든 메타데이터 변경의 인터페이스 역할을 해요. 분산 클러스터에서 Master는 보통 NameNode에서 실행돼요. J Mohamed Zahoor가 이 블로그 글 HBase HMaster Architecture에서 Master 아키텍처에 대해 더 자세히 다루고 있어요.
시작 동작 (Startup Behavior)
다중 Master 환경에서 실행되면, 모든 Master가 클러스터를 운영하기 위해 경쟁해요. 활성 Master가 ZooKeeper에서 lease를 잃으면(또는 Master가 종료되면), 나머지 Master들이 Master 역할을 넘겨받기 위해 다투게 돼요.
런타임 영향 (Runtime Impact)
흔한 dist-list 질문은 Master가 다운됐을 때 HBase 클러스터에 무슨 일이 벌어지느냐는 거예요. 이 정보는 3.0.0부터 변경되었어요.
2.x.y 릴리스까지 (Up until releases 2.x.y)
HBase 클라이언트가 RegionServer와 직접 통신하기 때문에, 클러스터는 "안정 상태(steady state)"에서 계속 동작할 수 있어요. 또한 Catalog Tables에 따라 hbase:meta는 HBase 테이블로 존재하며 Master에 상주하지 않아요. 하지만 Master는 RegionServer 장애 조치와 region 분할 완료 같은 중요한 기능을 제어해요. 그래서 Master 없이도 클러스터가 잠시는 돌아갈 수 있지만, Master는 가능한 한 빨리 재시작해야 해요.
3.0.0부터 (Staring release 3.0.0)
섹션 Master Registry(2.3.0부터 새로 추가됨)에서 언급했듯이, 클라이언트의 기본 연결 레지스트리는 이제 master rpc 엔드포인트 기반이에요. 그래서 이 릴리스부터 마스터의 가동 시간 요구사항이 더 엄격해졌어요.
- 이전에는 모든 클라이언트가 필요한 것이 ZooKeeper 앙상블뿐이었지만, 이제는 연결 설정을 위해 활성 또는 대기(stand by) 마스터가 최소 하나는 필요해요.
- Master는 이제 읽기/쓰기 작업의 중요 경로(critical path)에 있어요. 예를 들어 meta region이 다른 region server로 튕겨 나가면, 클라이언트는 새 위치를 가져오기 위해 마스터가 필요해요. 이전에는 이 정보를 ZooKeeper에서 직접 가져왔었어요.
- Master는 이전보다 더 높은 연결 부하를 받게 돼요. 그래서 부하에 따라 서버 측 설정을 조정해야 할 수도 있어요.
전반적으로, 이 기능이 활성화되면 마스터의 가동 시간 요구사항이 클라이언트 작업이 정상 진행되기 위해 훨씬 더 높아져요.
인터페이스 (Interface)
HMasterInterface가 노출하는 메서드는 주로 메타데이터 지향적인 메서드예요.
- Table (createTable, modifyTable, removeTable, enable, disable)
- ColumnFamily (addColumn, modifyColumn, removeColumn)
- Region (move, assign, unassign) 예를 들어 Admin 메서드 disableTable이 호출되면 Master 서버가 이를 처리해요.
프로세스 (Processes)
Master는 여러 백그라운드 스레드를 실행해요.
LoadBalancer
주기적으로, 그리고 전환(in transition) 중인 region이 없을 때, 로드 밸런서가 실행되어 클러스터 부하를 균형 있게 하기 위해 region을 이동시켜요. 이 속성 구성에 대해서는 Balancer를 참고해 주세요.
region 할당에 대한 자세한 내용은 Region-RegionServer Assignment를 참고해 주세요.
CatalogJanitor
주기적으로 hbase:meta 테이블을 확인하고 정리해요. meta 테이블에 대한 자세한 내용은 hbase:meta를 참고해 주세요.
MasterProcWAL
MasterProcWAL은 hbase-2.3.0에서 대체 Procedure Store 구현으로 교체되었어요. in-master-procedure-store-region을 참고해 주세요. 이 섹션은 hbase-2.0.0부터 hbase-2.2.x에 해당해요.
HMaster는 충돌한 서버 처리, 테이블 생성, 기타 DDL 같은 관리 작업과 그 실행 상태를 Procedure Store에 기록해요. Procedure Store WAL은 MasterProcWALs 디렉터리에 저장돼요. Master WAL은 RegionServer WAL과 같지 않아요. Master WAL을 유지하면 Master 실패에도 견고한 상태 머신을 실행할 수 있어요. 예를 들어 HMaster가 테이블을 만드는 도중 문제를 만나 실패했다면, 다음 활성 HMaster가 이전 작업이 멈춘 지점부터 이어받아 작업을 완료할 수 있어요. hbase-2.0.0부터 새로운 AssignmentManager(일명 AMv2)가 도입되었고, HMaster는 region 할당 작업, 서버 충돌 처리, 밸런싱 등을 모두 AMv2를 통해 처리하며, hbase-1.x에서처럼 ZooKeeper가 아니라 모든 상태와 전환을 MasterProcWALs에 영속화해요.
새 AssignmentManager에 대해 더 알고 싶다면 AMv2 Description for Devs(그리고 그 기반인 Procedure Framework (Pv2): HBASE-12439)를 참고해 주세요.
MasterProcWAL 구성 (Configurations for MasterProcWAL)
MasterProcWAL 동작에 영향을 주는 구성 목록이에요. 기본값은 바꿀 필요가 없어요.
- hbase.procedure.store.wal.periodic.roll.msec 설명: 새 WAL 생성 빈도 기본값: 1h (3600000 msec)
- hbase.procedure.store.wal.roll.threshold 설명: WAL이 롤되는 크기 임계값. WAL이 이 크기에 도달하거나 마지막 로그 롤 이후 1시간이 지날 때마다 HMaster는 새 WAL을 생성해요. 기본값: 32MB (33554432 byte)
- hbase.procedure.store.wal.warn.threshold 설명: WAL 개수가 이 임계값을 넘으면, 롤링 시 다음 메시지가 WARN 레벨로 HMaster 로그에 나타나야 해요. procedure WALs count=xx above the warning threshold 64. check running procedures to see if something is stuck. 기본값: 64
- hbase.procedure.store.wal.max.retries.before.roll 설명: 슬롯(레코드)을 HDFS 같은 기본 저장소에 동기화할 때의 최대 재시도 횟수. 매 시도마다 다음 메시지가 HMaster 로그에 나타나야 해요. unable to sync slots, retry=xx 기본값: 3
- hbase.procedure.store.wal.sync.failure.roll.max 설명: 위 3회 재시도 후 로그가 롤되고 재시도 횟수가 0으로 리셋되며, 새로운 재시도 세트가 시작돼요. 이 구성은 동기화 실패 시 로그 롤링의 최대 시도 횟수를 제어해요. 즉, HMaster는 총 9번 동기화에 실패할 수 있어요. 이를 초과하면 다음 로그가 HMaster 로그에 나타나야 해요. Sync slots after log roll failed, abort. 기본값: 3
더 알아보기 (Learn more)
AMv2, Timeline-consistent Reads, Master Registry, Catalog Tables 등 HBase 마스터와 관련된 문서를 이어서 보시길 권해요.