CEPH 클러스터 구축 (2) - Cephadm으로 클러스터 세팅하기

시리즈 소개

이 시리즈는 물리 노드 3개에 Proxmox 하이퍼바이저를 사용하여 CEPH 클러스터를 구축하는 전 과정을 다룹니다. 두 번째 글에서는 Cephadm을 사용하여 컨테이너 기반으로 Ceph 클러스터를 배포하는 방법을 설명합니다.

사용 버전

  • Ceph 버전: v19.2.3 Squid
  • 초기 릴리스: 2024년 9월 26일
  • 지원 종료 예정: 2026년 9월 19일

아키텍처 구성

6개의 VM에 다음과 같이 역할을 분배합니다.

Ceph1-1 Ceph1-2 Ceph2-1 Ceph2-2 Ceph3-1 Ceph3-2
Monitor CephFS Monitor CephFS Monitor CephFS
Manager RGW-S3 Manager RGW-S3 Manager RGW-S3
OSD×6 OSD×6 OSD×6 OSD×6 OSD×6 OSD×6

핵심 용어 정리

  • OSD (Object Storage Daemon): 실제 데이터를 저장하고 관리하는 데몬입니다.
  • Monitor (MON): 클러스터 맵을 유지하고 쿼럼을 형성합니다.
  • Manager (MGR): 클러스터 관리 및 모니터링을 담당합니다.
  • MDS (Metadata Server): CephFS의 메타데이터를 관리합니다.
  • PG (Placement Group): 객체를 OSD에 매핑하는 논리적 그룹입니다.
  • CRUSH: Ceph의 데이터 배치 알고리즘입니다.
  • Pool: 데이터를 저장하는 논리적 파티션입니다.
  • BlueStore: Ceph의 기본 스토리지 백엔드입니다.

데이터 복제 및 가용성

  • Replication Size: 3 (데이터를 3개 복사본으로 유지)
  • Min Size: 2 (쓰기 작업에 필요한 최소 복제본 수)
  • 내결함성: 1개 노드 장애까지 허용하며, 2개 노드 장애 시 데이터 손실 가능성이 있습니다.

1. 호스트 설정 (모든 노드)

1.1 호스트명 및 네트워크 설정

각 노드에서 호스트명을 설정합니다.

# 각 노드에서 호스트명 설정 (host01, host02, host03 등으로 변경)
sudo hostnamectl set-hostname host01

모든 노드의 /etc/hosts 파일에 동일한 내용을 추가합니다.

sudo vi /etc/hosts

/etc/hosts 예시:

# Ceph Public Network
192.168.1.200   ceph1-1
192.168.1.201   ceph1-2
192.168.1.202   ceph2-1
192.168.1.203   ceph2-2
192.168.1.204   ceph3-1
192.168.1.205   ceph3-2

# Ceph Cluster Network
192.168.4.100   ceph1-1-cluster
192.168.4.101   ceph1-2-cluster
192.168.4.102   ceph2-1-cluster
192.168.4.103   ceph2-2-cluster
192.168.4.104   ceph3-1-cluster
192.168.4.105   ceph3-2-cluster

1.2 시스템 업데이트 및 패키지 설치

sudo apt update && sudo apt upgrade -y
sudo apt install -y chrony python3 python3-pip lvm2 podman

1.3 시간 동기화 설정

Ceph 클러스터는 노드 간 시간 동기화가 필수입니다.

# Chrony 서비스 활성화
sudo systemctl enable chrony.service
sudo systemctl start chrony.service

# 시간 동기화 상태 확인
chronyc tracking

/etc/chrony.conf 파일에 NTP 서버를 추가합니다.

server 1.kr.pool.ntp.org
server 0.asia.pool.ntp.org
server 2.asia.pool.ntp.org

2. 스토리지 디바이스 준비 (모든 노드)

2.1 사용 가능한 디바이스 확인

# 디바이스 목록 확인
lsblk -f

# 파티션 정보 확인
sudo fdisk -l

2.2 OSD 디바이스 요구사항

OSD로 사용하려는 디바이스는 다음 조건을 만족해야 합니다.

  • 파티션이 없어야 합니다.
  • LVM 상태가 없어야 합니다.
  • 마운트되지 않아야 합니다.
  • 파일시스템이 없어야 합니다.
  • Ceph BlueStore OSD가 없어야 합니다.
  • 5GB 이상의 크기여야 합니다.

2.3 디바이스 초기화

기존 데이터가 있는 디바이스는 초기화합니다.

sudo wipefs -a /dev/<디바이스명>
sudo sgdisk --zap-all /dev/<디바이스명>

3. Cephadm 설치 (Ceph1-1)

첫 번째 노드에서 Cephadm을 설치합니다.

sudo apt update
sudo apt install -y cephadm

4. 관리 계정 설정 (모든 노드)

4.1 계정 생성

모든 노드에서 동일한 관리 계정을 생성합니다.

sudo adduser cephadmin
sudo usermod -aG sudo cephadmin

4.2 무비밀번호 sudo 권한 부여

echo "cephadmin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
sudo chmod 440 /etc/sudoers.d/cephadmin

4.3 SSH 키 생성 (Ceph1-1)

관리 노드에서 SSH 키를 생성합니다.

ssh-keygen -t rsa -b 4096 -C "cephadmin@ceph"

4.4 SSH 키 배포

생성한 공개키를 각 노드의 cephadmin 계정에 전달합니다.

ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

4.5 SSH 접속 확인

ssh cephadmin@<노드IP>

5. Ceph 클러스터 부트스트랩 (Ceph1-1)

5.1 초기 설정 파일 준비

cat <<EOF > /tmp/initial-ceph.conf
[global]
# 3노드 클러스터용 CRUSH 규칙
osd_pool_default_size = 3
osd_pool_default_min_size = 2
osd_crush_chooseleaf_type = 1

# 네트워크 설정
cluster_network = 192.168.4.0/24
public_network = 192.168.1.0/24
EOF

5.2 부트스트랩 실행

sudo cephadm bootstrap \
  --mon-ip 192.168.1.200 \
  --cluster-network 192.168.4.0/24 \
  --config /tmp/initial-ceph.conf \
  --ssh-user cephadmin

5.3 부트스트랩 완료 확인

부트스트랩이 완료되면 Dashboard URL과 초기 비밀번호가 출력됩니다.

Ceph Dashboard is now available at:
             URL: https://ceph1-1:8443/
            User: admin
        Password: 7emp6x0vu8

생성된 설정 파일을 확인합니다.

ls -la /etc/ceph/
# ceph.conf                  - Ceph 설정 파일
# ceph.client.admin.keyring  - Admin 키링
# ceph.pub                   - SSH 공개 키

5.4 Ceph CLI 설정

방법 1: Cephadm Shell 사용 (권장)

sudo cephadm shell
ceph -s
ceph health
exit

방법 2: ceph-common 패키지 설치

sudo cephadm add-repo --release squid
sudo cephadm install ceph-common
ceph -v
ceph -s

6. 추가 노드 등록

6.1 SSH 키 복사 (Ceph1-1)

ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]

6.2 호스트 추가

sudo cephadm shell

ceph orch host add ceph1-2 192.168.1.201
ceph orch host add ceph2-1 192.168.1.202
ceph orch host add ceph2-2 192.168.1.203
ceph orch host add ceph3-1 192.168.1.204
ceph orch host add ceph3-2 192.168.1.205

# 호스트 목록 확인
ceph orch host ls

6.3 Admin 레이블 추가

모든 노드에서 Ceph CLI를 사용하려면 admin 레이블을 추가합니다.

ceph orch host label add ceph1-2 _admin
ceph orch host label add ceph2-1 _admin
ceph orch host label add ceph2-2 _admin
ceph orch host label add ceph3-1 _admin
ceph orch host label add ceph3-2 _admin

7. Monitor 배포

3노드 클러스터에서는 각 물리 노드당 1개씩 총 3개의 Monitor를 배포합니다.

# Monitor 배포
ceph orch apply mon --placement="3 ceph1-1 ceph2-1 ceph3-1"

# Monitor 상태 확인
ceph mon stat
ceph orch ps --daemon-type mon

Monitor 쿼럼 상태를 확인합니다.

ceph quorum_status --format json-pretty
ceph -s

8. Manager 배포

MON과 MGR 데몬은 같은 노드에 배포하는 것이 성능에 유리합니다.

ceph orch apply mgr --placement="ceph1-1 ceph2-1 ceph3-1"

# Manager 상태 확인
ceph orch ps --daemon-type mgr
ceph mgr stat

9. OSD 배포

9.1 사용 가능한 디바이스 확인

# 모든 호스트의 디바이스 목록
ceph orch device ls

# 상세 정보 포함
ceph orch device ls --wide --refresh

9.2 OSD 배포 방법

방법 1: 자동 배포 (소규모 클러스터 권장)

# 모든 사용 가능한 디바이스에 자동 배포
ceph orch apply osd --all-available-devices

# 한 번만 배포하고 자동 감지 비활성화
ceph orch apply osd --all-available-devices --unmanaged=true

방법 2: 수동 배포

ceph orch daemon add osd host01:/dev/sdb
ceph orch daemon add osd host01:/dev/sdc
ceph orch daemon add osd host02:/dev/sdb
ceph orch daemon add osd host02:/dev/sdc
ceph orch daemon add osd host03:/dev/sdb
ceph orch daemon add osd host03:/dev/sdc

9.3 OSD 배포 확인

ceph osd stat
ceph osd tree
ceph orch ps --daemon-type osd
ceph osd df

10. 클러스터 상태 확인

# 전체 상태
ceph -s

# Health 체크
ceph health detail

# 버전 정보
ceph versions

정상 상태 출력 예시:

  cluster:
    id:     a1b2c3d4-e5f6-7890-1234-567890abcdef
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum host01,host02,host03
    mgr: host01.abcdef(active), standbys: host02.ghijkl
    osd: 6 osds: 6 up, 6 in

  data:
    pools:   1 pools, 32 pgs
    objects: 0 objects, 0 B
    usage:   60 GiB used, 5.4 TiB / 5.5 TiB avail
    pgs:     32 active+clean

11. 스토리지 설정

11.1 RBD 풀 생성

# RBD 블록 스토리지용 풀 생성
ceph osd pool create rbd-pool 128 128
rbd pool init rbd-pool
ceph osd pool application enable rbd-pool rbd

# 풀 정보 확인
ceph osd pool ls detail
ceph df

11.2 PG 자동 조정 활성화

ceph pg stat
ceph config set global osd_pool_default_pg_autoscale_mode on

11.3 CephFS 설정

# CephFS용 풀 생성
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 64

# CephFS 생성
ceph fs new cephfs cephfs_metadata cephfs_data

# CephFS 상태 확인
ceph fs ls
ceph fs status cephfs

# MDS 배포 (MON/MGR과 다른 VM에 배포)
ceph orch apply mds cephfs --placement="ceph1-2 ceph2-2 ceph3-2"

11.4 RGW(S3) 설정

# RGW 서비스 배포
ceph orch apply rgw myrgw --placement="ceph1-2 ceph2-2 ceph3-2" --port=8080

# RGW 서비스 확인
ceph orch ls | grep rgw

11.5 S3 사용자 생성

radosgw-admin user create --uid=s3user --display-name="S3 User"
# 출력에서 access_key와 secret_key를 저장합니다.

마무리

이번 글에서는 Cephadm을 사용하여 Ceph 클러스터를 구축하고, 기본적인 스토리지 풀과 서비스를 설정합니다. 다음 글에서는 클러스터 운영 및 모니터링 방법을 다룹니다.