시리즈 소개
이 시리즈는 물리 노드 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 클러스터를 구축하고, 기본적인 스토리지 풀과 서비스를 설정합니다. 다음 글에서는 클러스터 운영 및 모니터링 방법을 다룹니다.