Apache Kudu 1.6.0 CDH5.14.0 분산 클러스터 구축 가이드

Kudu 아키텍처 개요

Kudu는 컬럼 기반 분산 스토리지로, Raft 합의 알고리즘을 기반으로 리더-팔로워 구조를 유지합니다. 마스터 노드와 태블릿 서버 간의 역할 분담을 통해 고가용성을 확보하며, 특정 태블릿에 대해 리더 역할을 수행하는 서버가 다른 태블릿에 대해서는 팔로워로 동작할 수 있습니다.

핵심 구성 요소

  • Table: 스키마와 정렬된 기본 키를 가진 데이터 저장 단위. 여러 개의 태블릿으로 분할됨
  • Tablet: 테이블의 연속적인 세그먼트로, 여러 태블릿 서버에 복제됨. Raft 합의를 통해 일관성 유지
  • Tablet Server: 태블릿을 실제로 저장하고 클라이언트 요청을 처리. 리더는 쓰기를, 리더/팔로워는 읽기를 각각 담당

클러스터 노드 구성

호스트명마스터 프로세스태블릿 서버 프로세스
node01
node02
node03

로컬 YUM 저장소 구축

Cloudera 저장소에서 필요한 RPM 패키지를 내려받아 내부 HTTP 서버로 제공합니다.

패키지 준비 및 압축 해제

cd /data/repository
tar -zxvf cdh5.14.0-centos6.tar.gz

HTTP 서버 설정

# httpd 설치 및 실행
yum -y install httpd
systemctl start httpd

# 저장소 연결
setenforce 0
ln -s /data/repository/cdh/5.14.0 /var/www/html/cdh-repo

YUM 저장소 설정 파일

/etc/yum.repos.d/cdh-local.repo 파일 생성:

[cdh-local]
name=Cloudera CDH Local Repository
baseurl=http://node01/cdh-repo
gpgcheck=0
enabled=1

설정 파일을 모든 노드로 배포:

for host in node02 node03; do
  scp /etc/yum.repos.d/cdh-local.repo ${host}:/etc/yum.repos.d/
done

Kudu 패키지 설치

설치 가능한 패키지 목록

패키지명설명
kudu기본 실행 파일 및 라이브러리
kudu-master마스터 서비스 스크립트 및 기본 설정
kudu-tserver태블릿 서버 서비스 스크립트 및 기본 설정
kudu-client0C++ 클라이언트 공유 라이브러리
kudu-client-develC++ 클라이언트 개발 SDK

전체 노드 설치

# 모든 노드에서 실행
yum install -y kudu kudu-master kudu-tserver kudu-client0 kudu-client-devel

서비스 설정

설치 후 /etc/kudu/conf/ 디렉터리에 마스터와 태블릿 서버 설정 파일을 구성합니다.

마스터 서버 설정

환경 변수 파일 /etc/default/kudu-master:

export FLAGS_log_dir=/var/log/kudu
export FLAGS_rpc_bind_addresses=node01:7051  # 각 호스트에 맞게 수정

구성 파일 /etc/kudu/conf/master.gflagfile:

--fromenv=rpc_bind_addresses
--fromenv=log_dir
--fs_wal_dir=/data/kudu/master/wal
--fs_data_dirs=/data/kudu/master/data
--master_addresses=node01:7051,node02:7051,node03:7051

태블릿 서버 설정

환경 변수 파일 /etc/default/kudu-tserver:

export FLAGS_log_dir=/var/log/kudu
export FLAGS_rpc_bind_addresses=node01:7050  # 각 호스트에 맞게 수정

구성 파일 /etc/kudu/conf/tserver.gflagfile:

--fromenv=rpc_bind_addresses
--fromenv=log_dir
--fs_wal_dir=/data/kudu/tserver/wal
--fs_data_dirs=/data/kudu/tserver/data
--tserver_master_addrs=node01:7051,node02:7051,node03:7051

디렉터리 권한 설정

# Kudu는 기본적으로 kudu 사용자로 실행됨
mkdir -p /data/kudu/{master,tserver}/{wal,data}
chown -R kudu:kudu /data/kudu

# 또는 사용자 정의 계정 사용 시
chown -R deploy:deploy /data/kudu

서비스 운영

시작 및 종료

# 시스템 서비스 방식
sudo service kudu-master start
sudo service kudu-tserver start

# 또는 init.d 스크립트 직접 실행
sudo /etc/init.d/kudu-master start
sudo /etc/init.d/kudu-tserver start

# 종료
sudo service kudu-master stop
sudo service kudu-tserver stop

주의: NTP 시간 동기화가 필수입니다. ntpd 또는 chronyd가 정상 실행 중인지 확인하세요.

일반적인 문제 해결

시계 동기화 오류

증상: Cannot initialize clock: Error reading clock. Clock considered unsynchronized

yum -y install ntp
systemctl enable ntpd
systemctl start ntpd

카탈로그 매니저 초기화 실패

증상: Unable to initialize catalog manager: Failed to initialize sys tables async

# 모든 마스터/태블릿 서버 프로세스 중지
# 기존 데이터 디렉터리 초기화 후 재시작
rm -rf /data/kudu/master/*
rm -rf /data/kudu/tserver/*

권한 거부 오류

증상: Permission denied (error 13)

# 디렉터리 소유자 확인
ls -la /data/kudu/

# 필요 시 권한 수정
chown -R kudu:kudu /data/kudu

sudoers 파일 권한 오류

sudo: /etc/sudoers is world writable
# 해결
pkexec chmod 440 /etc/sudoers

웹 관리 콘솔

구성 요소접근 URL
마스터 상태http://node01:8051/masters
태블릿 서버 목록http://node01:8051/tablet-servers

웹 UI를 통해 태블릿 분배 현황, 리더 선출 상태, 각 노드의 리소스 사용량 등을 모니터링할 수 있습니다.

운영 팁: /var/log/kudu 디렉터리의 로그 파일은 주기적으로 회전 및 삭제 처리하여 디스크 공간 부족 문제를 예방하세요. logrotate 유틸리티를 활용한 자동화를 권장합니다.

태그: Kudu cdh Apache Kudu 분산 스토리지 Raft 합의

6월 6일 18:50에 게시됨