
안녕하세요. 잼니크입니다.
이번 글에서는 Ceph 설치 방법 중 cephadm을 이용한 방법을 진행해 보려고 합니다.
Ceph는 오픈소스 Software Defined Storage 입니다. (또 다시 나온 Software Defined인가요?) 이렇게 설명하면 애매모호해서... 다른말로 설명드리면... 소프트웨어를 이용하여 분산 스토리지 클러스터라고 구체적으로 설명할 수 있을 것 같습니다.
여기서 말하는 스토리지는 단순하게 SSD나 HDD 같은 저장장치라기 보다는 스토리지 서버 같은 장비로 이해해야 합니다. 서버에서는 여러개의 SSD와 HDD를 가지고 있는 스토리지 장비를 통해 서버에 공간을 제공하는데, Ceph는 스토리지가 아닌 일반적인 서버 하드웨어를 이용하여 peta byte 급의 대규모 스토리지를 제공을 목표로 합니다.
Ceph는 클라우드 플랫폼인 OpenStack이나 Kubernetes, OpenShift 등에서도 사용되고 있습니다.
Ceph는 설치 방법이 여러가지가 있는데 그중, 이 글에서는 cephadm을 통해 설치를 진행하겠습니다.
Cephadm은 Ceph를 설치하기 위한 자동화 툴입니다. Cephadm을 사용하기 위해서는 몇가지 요구사항이 있어서 먼저 이 사항들을 확인하면서 준비를 시작해 보겠습니다.
1. Ceph의 컴포넌트 설명
먼저, 사전 준비사항을 들어가기앞서 Ceph의 기본적인 구성 요소를 설명하고 넘어가겠습니다. 메뉴얼이 일단 Ceph의 컴포넌트를 줄임말로 후다닥 넘어가버리기 때문에 평상시와는 다르게(?) 용어 정리를 후다닥 하고 넘어가겠습니다.
(시작부터 좀 지치지만... 용어만 알고 넘어가셔도 메뉴얼 읽는데 큰 무리가 없을실겁니다!)
RADOS(Reliable Autonomus Distributed Object Store): Ceph의 가장 근간이 되는 데이터 저장하는 하는 부분입니다. 이름에서도 알 수 있겠지만... 오브젝트 스토리지 형태로 데이터가 저장됩니다.
CephFS(Ceph File System): Ceph에서 사용하는 분산 파일 시스템입니다. RADOS를 기반으로 POSIX 호환으로 FUSE 등을 사용해서 마운트 할 수 있습니다.
RBD(Rados Block Device): Ceph를 이용해서 OpenStack 같은 플랫폼에서 블록스토리지로서 사용하기 위한 백엔드 입니다.
MDS(CephFS Metadata Servers): CephFS를 사용하기 위해 파일시스템의 메타데이터를 관리하는
OSD(Object Storage Daemon): 오브젝트 스토리지로서 사용하기 위한 백엔드 입니다.
MGR(Manager daemon): Ceph관리를 위한 서비스 입니다.
2. 사전 준비사항
먼저 Ceph 문서에 나온 요구사항 먼처 확인 해 보겠습니다.
최소 요구사항은 있으나 사실 특별하게 성능요구치가 없으면 특별하게 맞출 요구사항도 없습니다.
다만, 성능 요구치가 있을 경우 한번 찬찬히 읽어보고 진행하는 것을 추천 합니다.
최소 요구사항은 OSD, MON, MDS로 나눠서 설명하고 있습니다만... 공통적으로 최소 2코어 이상, 최소 2GB 이상인 것 부터 5GB 이상인 것 까지 있고, 디스크는 SSD, 100기가 이상, 1Gbps 이상의 NIC 1개 이상 입니다.
저희는 테스트를 위해 설치해 보는거니까...
VirtualBox를 써서 가상머신 3개를 만들고 적당히 4코어, 8GB 램을 넉넉한 자원을 넣어놓고 시작하겠습니다.
DISK는 OS 설치를 위해 10GB를 할당하고, OS 설치를 완료한 다음, Ceph를 위해 20GB를 추가 했습니다.
NIC은 외부 접속을 위한 Bridged NIC 하나는 192.168.100.0/16 대역의 IP를 사용하고 Ceph들 간의 통신을 위한 NIC 하나는 10.0.0.0/16 대역의 IP를 사용합니다. OS는 Rocky 9.3을 사용했습니다.
이제 Ceph 설치를 진행해 보겠습니다.
3. Cephadm 설지 준비 작업
Cephadm을 설치하기 위해 먼저 사전 작업을 시작하겠습니다.
먼저 Ceph노드를 DNS 서버에 모두 등록합니다.
만약 이 기회에 DNS 서버를 구축하고 싶으시다면 이전에 제가 DNS를 구축한 글을 참고하실수 있습니다.
링크: 네임서버 구축하기
DNS 서버 구축없이 단순히 hosts 파일을 편집하는 방법도 있습니다.
ceph 노드 3개 모두에서 적용한 다음 ping으로 잘 적용이 되었는지 테스트를 진행합니다.
vi /etc/hosts
# 아래 내용을 노드 3개 모두 추가하기
10.0.0.1 ceph1
10.0.0.2 ceph2
10.0.0.3 ceph3
# 테스트
ping ceph1
ping ceph2
ping ceph3

그 다음, 모든 ceph노드에서 패키지 업데이트를 수행합니다.
# 패키지 업데이트, 모든 ceph 노드에서 실행
dnf update
패키지 업데이트가 끝나면 모든 노드에서 시간동기화를 위한 Chrony를 설치하고 활성화하고, cephadm을 위한 python 인터프리터, ceph를 위한 podman을 설치 합니다.
# Chrony 가 없을 경우 설치 및 활성화
dnf -y install chrony
systemctl enable --now chronyd
# python3 확인 없을 경우 설치
dnf -y install python3
python3 --version
# Podman 설치 및 확인
dnf -y install podman
podman -v
ceph1노드에서 root 사용자로 다음 작업을 진행합니다.
다음 작업은 cephadm을 위해 다른 노드에 접근할 수 있는 키를 생성하고 복사합니다.
# SSH 키 생성
ssh-keygen
# SSH 키 복사
ssh-copy-id ceph1
ssh-copy-id ceph2
ssh-copy-id ceph3
# 테스트, 만약 키 복사가 잘 되었으면 암호 없이 로그인됨.
ssh root@ceph1
ssh root@ceph2
ssh root@ceph3
마지막으로 cephadm을 준비합니다.
모든 ceph노드에서 실행합니다.
# cephadm 실행파일 다운로드
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
chmod +x cephadm
# Ceph reef release로 설정
./cephadm add-repo --release reef
# Cephadm 설치
./cephadm install

여기까지 위 그림과 같이 진행 되었다면 이제 다음단계로 넘어가 Ceph로 설치합니다.
4. Cephadm을 이용한 Ceph 설치
먼저 Cephadm을 이용해서 Ceph bootstrap을 시작하겠습니다.
# Cephadm을 이용한 Ceph bootstrap
# --mon-ip는 bootstrap을 수행하는 곳의 주소
# --cluster-network는 내부 클러스터 트래픽의 서브넷 주소
cephadm bootstrap --mon-ip 192.168.100.101 --cluster-network 10.0.0.0/16
# 만약 Error: hostname is a fully qualified domain name 이라는 메시지가 나올 경우
# 각 노드에서 아래 명령을 실행한 다음 뒤 명령을 다시 실행
# ceph1 노드에서 실행
sudo hostname ceph1
# ceph2 노드에서 실행
sudo hostname ceph2
# ceph3 노드에서 실행
sudo hostname ceph3
정상적으로 끝난다면 다음과 같이 Ceph dashboad 접속을 위한정보와 마지막에 Bootstrap complete 라는 메시지가 나옵니다.

그다음, Ceph관련 도구를 설치합니다.
# ceph관련도구 설치
# 모든 ceph 노드에서 실행
cephadm install ceph-common
그 다음, Ceph1 노드에서 Ceph2와 Ceph3노드를 추가시킵니다.
추가시키기 위해 Ceph에서 사용할 키도 추가하고 진행합니다.
# Ceph1 서버에서 root 계정으로 실행
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph3
# Ceph2와 Ceph3 추가
ceph orch host add ceph2
ceph orch host add ceph3
# Ceph2와 Ceph3이 추가되었는지 확인
ceph orch host ls

추가가 되었다면 3개의 노드가 보이게 됩니다.
3개의 노드를 모두 Ceph에 등록 했으니 이제 Mgr과 Mds역할을 부여하겠습니다.
목적이 테스트기 때문에 3노드에 모두 다 같은 역할을 주겠습니다.
# 노드에 Mon 역할 부여
ceph orch apply mon --placement="ceph1,ceph2,ceph3"
# 노드에 Mgr 역할 부여
ceph orch apply mgr --placement="ceph1,ceph2,ceph3"
# 노드에 Mds 역할 부여 및 파일시스템 이름(myfs) 부여
ceph orch apply mds myfs --placement="ceph1,ceph2,ceph3"
그 다음은 Ceph에 저장 공간을 추가하겠습니다.
먼저, 추가할 저장소의 장치 이름을 확인하겠습니다.
# 디스크 장치 이름 확인
fdisk -l

확인해 보니 새로 추가한 디스크가 /dev/sdb로 잡혀 있습니다.
각 노드에 20GB 씩 추가 할 수 있도록 준비 했습니다.
Ceph1에서만 확인 했지만, 다른노드들도 동일합니다.
저장장치를 추가하겠습니다.
# Ceph1노드에서 실행
ceph orch daemon add osd ceph1:/dev/sdb
ceph orch daemon add osd ceph2:/dev/sdb
ceph orch daemon add osd ceph3:/dev/sdb
# 확인
ceph -s

결과를 보니 상태가 HEALTH_OK 상태고, 3개의 노드가 각노드당 20GB 해서 총 60GB 추가 된 것도 보입니다.
여기까지 진행이 되면 Ceph의 구성이 완료 되었습니다.
마지막으로 아까 들어가지 않았던 Ceph dashboard 에 접근하는것 까지 하겠습니다.
아까 Ceph bootstrap이 끝난 다음, 나온 주소를 웹 브라우저에서 접속합니다.
최초 로그인 할 때 적인 암호를 입력하면 암호를 바꾸도록 유도하는데, 암호를 바꾼 다음 바꾼 암호로 다시 로그인하면 Ceph dashboard에 접근할 수 있습니다.
궁금한 점이나 진행이 잘 안된다면 댓글 부탁드립니다.
감사합니다!
참고문서
- Ceph 문서: https://docs.ceph.com/en/latest/