Rocky Linux 8 에서 Ceph 17 (Quincy) 설치하기

리눅스/Ceph|2023. 5. 15. 17:02
반응형

여기에서는 Rocky Linux 8 환경에서 Ceph 17.x (Quincy) 버전을 설치하는 방법을 기술하였습니다.

Ceph 는 역할에 따라 MON, OSD, MDS 서버 등 여러대로 나뉘어 운영되므로, 각각의 역할이 이해 된다면 프로젝트에 맞는 적절한 구성을 직접 구현하는것이 좋습니다. 서비스에 적용하실 분은 데이터 망실 방지 또는 무정지 시스템 구축을 목적으로 반드시 이중화 구성을 권장합니다.

 

- MON (Ceph monitor) : 클러스터의 모든 노드 상태를 추적하는 클러스터 모니터 서버입니다.
- OSD (Object Storage Device) : 데이터를 저장하고 클라이언트 요청을 처리하는 서버입니다.
- MDS (Metadata Server Daemon) : 메타데이터 서버입니다. CephFS 파일 시스템 작동에 사용됩니다.

 

 

[테스트 환경]

- H/W : CPU 2 Core & 메모리 4GB

- OS : Rocky Linux 8

- 추가 Disk : 50GB

* 이 구성으로 서버 3대를 준비하였습니다.

 

 

1. 설치

 

1) 환경 업데이트

(모든 서버에서)

# dnf -y update

# dnf -y upgrade

 

2) 호스트명 설정

서버에서 사용할 호스트명을 설정해줍니다.

(모든 서버에서)

# vi /etc/hosts

127.0.0.1 localhost
10.101.0.8 ceph-1
10.101.0.12 ceph-2
10.101.0.22 ceph-3

 

# hostnamectl set-hostname ceph-1    // ceph-1 서버에서

# hostnamectl set-hostname ceph-2    // ceph-2 서버에서

# hostnamectl set-hostname ceph-3    // ceph-3 서버에서

 

3) SSH key copy

(ceph-1 서버에서)

# ssh-keygen    // 패스워드 없이 생성

# ssh-copy-id ceph-1

# ssh-copy-id ceph-2

# ssh-copy-id ceph-3

 

4) chrony 설치

(모든 서버에서)

# dnf -y install chrony

# systemctl enable --now chronyd

 

5) Python 설치

(모든 서버에서)

# dnf -y install python39
# python3 --version

Python 3.9.16

 

6) Podman 설치

(모든 서버에서)

# dnf -y install podman
# podman -v

podman version 4.4.1

 

7) cephadm 설치
클러스터를 생성하고 구성하는데 사용할 cephadm 도구를 설치합니다.

(모든 서버에서)
# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
# chmod +x cephadm
# ./cephadm add-repo --release quincy
# ./cephadm install

Ceph 클러스터를 만들기 위해 cephadm 부트스트랩이 사용됩니다.

이 명령어는 지정된 노드에서 Ceph 서비스와 첫 번째 모니터를 시작하고 클러스터를 만들고 키, 구성 파일 등을 생성합니다.

 

모니터 데몬을 생성합니다. 명령 실행시 모니터 데몬이 생성될 서버의 IP 를 기입해줍니다.

만약, OSD 간 복제 트래픽을 위해 별도의 네트워크를 사용하고자 하는 경우 아래와 같은 옵션을 같이 사용하시기 바랍니다.

--cluster-network 192.168.1.0/24

(ceph-1 서버에서)

# cephadm bootstrap --mon-ip 10.101.0.8

...

Ceph Dashboard is now available at:
      URL: https://ceph-1:8443/
      User: admin
      Password: vqyeyu0il6

...

 

설치가 완료되면 위와 같이 Ceph 대시보드 접속 정보가 출력됩니다.

웹브라우저를 이용하여 접속, 로그인을 하면 관리 페이지가 잘 출력되는 것을 확인할 수 있습니다.

처음 로그인시 패스워드를 변경하는 절차가 있고, 로그인을 다시 하면 대시보드에 접속 됩니다.

대시보드가 설치 되었지만 앞으로의 설정과 사용 방법은 CLI 환경에서 이어 나가도록 하겠습니다.

 

8) ceph-common 설치

설치된 cephadm 파일로 ceph-common 패키지 설치를 이어갑니다.

(모든 서버에서)

# cephadm install ceph-common

 

설치된 버전을 확인합니다.

# ceph -v
ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)

 

관리 작업에 첫 번째 노드를 사용하므로 SSH 키를 설치하고 나머지 노드의 /etc/ceph 에 배치해야 합니다.

(ceph-1 서버에서)
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-2
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-3

 

Ceph 클러스터에 호스트를 추가 합니다.
# ceph orch host add ceph-2

Added host 'ceph-2' with addr '10.101.0.12'
# ceph orch host add ceph-3

Added host 'ceph-3' with addr '10.101.0.22'

 

호스트 목록을 확인합니다.
# ceph orch host ls

HOST    ADDR         LABELS  STATUS  
ceph-1  10.101.0.8   _admin          
ceph-2  10.101.0.12                  
ceph-3  10.101.0.22                  
3 hosts in cluster

 

Ceph Monitor 데몬은 클러스터 구성원 자격, 구성 및 상태에 대한 매우 안정적이고 지속적인 저장을 제공하기 위하여 모든 노드에 MON 역할을 부여합니다.

# ceph orch apply mon --placement="ceph-1,ceph-2,ceph-3"

 

Ceph Manager 데몬은 모니터 데몬과 함께 실행되어 외부 모니터링 및 관리 시스템에 추가적인 모니터링 및 인터페이스를 제공합니다.

역시 모든 노드에 MGR 역할을 부여합니다.

# ceph orch apply mgr --placement="ceph-1,ceph-2,ceph-3"

 

CephRBD 뿐 아니라 CephFS 도 사용하기 위해 MDS 를 생성합니다. 미리 모든 노드에 MDS 역할을 부여 합니다.

여기에서는 파일시스템을 식별하기 위해 myfs 라는 이름으로 생성 하였습니다.

# ceph orch apply mds myfs --placement="ceph-1,ceph-2,ceph-3"

 

OSD 저장소를 추가 합니다. Ceph 저장에 사용할 수 있는 디스크를 하나씩 추가해 줍니다.

형식) # ceph orch daemon add osd {호스트명}:{디스크},{디스크},...

# ceph orch daemon add osd ceph-1:/dev/vdb
# ceph orch daemon add osd ceph-2:/dev/vdb
# ceph orch daemon add osd ceph-3:/dev/vdb

 

Ceph 및 OSD 상태를 확인합니다.

# ceph -s

  cluster:
    id:     17bddd2a-5b78-11ee-b774-fa163ed3a133
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-1,ceph-3,ceph-2 (age 14h)
    mgr: ceph-1.ieznfl(active, since 14h), standbys: ceph-3.hfrlpp, ceph-2.vgyqhd
    osd: 3 osds: 3 up (since 13h), 3 in (since 13h)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   63 MiB used, 150 GiB / 150 GiB avail
    pgs:     1 active+clean

 

# ceph osd tree

ID  CLASS  WEIGHT   TYPE NAME        STATUS  REWEIGHT  PRI-AFF
-1         0.14639  root default                              
-3         0.04880      host ceph-1                           
 0    hdd  0.04880          osd.0        up   1.00000  1.00000
-5         0.04880      host ceph-2                           
 1    hdd  0.04880          osd.1        up   1.00000  1.00000
-7         0.04880      host ceph-3                           
 2    hdd  0.04880          osd.2        up   1.00000  1.00000

 

9) 라벨링

호스트에 라벨 할당하는 것을 지원합니다. 라벨은 자유 형식이며 그 자체로는 특별한 의미가 없습니다.

각 호스트는 여러 개의 라벨을 가질 수 있으므로 데몬의 배치를 기록해 두는데 사용하면 편리합니다.
# ceph orch host label add ceph-1 osd
# ceph orch host label add ceph-2 osd
# ceph orch host label add ceph-3 osd
# ceph orch host label add ceph-1 mon
# ceph orch host label add ceph-2 mon
# ceph orch host label add ceph-3 mon
# ceph orch host label add ceph-1 mgr
# ceph orch host label add ceph-2 mgr
# ceph orch host label add ceph-3 mgr

 

* 참고 : 라벨 삭제는 add 대신 rm 옵션 사용

 

전체 라벨을 확인합니다.

# ceph orch host ls
HOST    ADDR         LABELS              STATUS  
ceph-1  10.101.0.8   _admin osd mon mgr          
ceph-2  10.101.0.12  osd mon mgr                 
ceph-3  10.101.0.22  osd mon mgr                 
3 hosts in cluster

 

 

2. 설정

 

1) Pool 생성

Pool 은 데이터를 저장하고 관리하는 논리적인 저장 공간을 나타내며, Pool 안에 여러개의 블록 레벨 스토리지 이미지를 생성할 수 있으므로 그룹이라고 생각해도 좋습니다. Pool 생성 및 삭제에 관한 기본 명령은 아래와 같습니다.

- 생성 : ceph osd pool create {pool-name} {pg-num} {pgp-num}

- 확인 : ceph osd lspools

- 데이터 복사 : rados cppool {old-pool-name} {new-pool-name}    // 새로운 Pool 생성 후 데이터 복사 가능

- 삭제 : ceph osd pool delete {pool-name} {pool-name} --yes-i-really-really-mean-it    // 하단 선행작업 필요

- 이름 변경 : ceph osd pool rename {old-pool-name} {new-pool-name}

- 제한 : ceph osd pool set-quota {pool-name} max_bytes {limit-size}    // 예 : 10G (제한 해제값 : 0)

- 제한 확인 : ceph osd pool get-quota {pool-name}

 

* 삭제시 선행작업

pool 삭제시 그 안에 생성한 여러 volume 들은 함께 삭제가 됩니다.

이와 같이 실수로 삭제하는것을 방지하기 위하여 pool 이름을 두 번 쓰고, 명령을 인지하고 있다는 옵션 (문장) 도 적어줘야 합니다. 그리고 사전 작업으로 아래 옵션을 적용하고 삭제 명령을 실행해야 합니다.

# ceph config set mon mon_allow_pool_delete true

삭제 이후에는 다른 실수가 없도록 다시 delete 명령을 비활성화 합니다.

# ceph config set mon mon_allow_pool_delete false

 

Pool 생성시 기본 pg_num 을 정하는 기준은 아래를 권장합니다.

(참고 : 2016년도에 기록한 내용으로 사용)
- OSD 가 5개 미만일 경우 pg_num 128
- 5~10 개는 pg_num 512
- 10~50 개는 pg_num 4096 이 적절 합니다.
- 50개 이상은 pgcalc 계산을 참조하여 설정하면 됩니다.

Pool 이름은 sysdocu 로 하고, 준비된 OSD 개수가 3개 였으므로, pg_num 을 128 로 설정하여 진행할 것입니다.

pgp-num 은 생략하겠습니다.
# ceph osd pool create sysdocu 128
pool 'sysdocu' created

 

2) CephRBD 이미지 생성

블록 레벨 스토리지 이미지를 생성합니다.

# rbd create sysdocu/volume01 --size 1G --image-feature layering

 

생성된 볼륨 리스트를 확인합니다.

# rbd ls sysdocu
volume01

 

하나의 볼륨 정보를 확인하는 방법은 아래와 같습니다.

# rbd info sysdocu/volume01
rbd image 'volume01':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 5e94b120cbea
block_name_prefix: rbd_data.5e94b120cbea
format: 2
features: layering
op_features: 
flags: 
create_timestamp: Tue Sep 26 07:40:53 2023
access_timestamp: Tue Sep 26 07:40:53 2023
modify_timestamp: Tue Sep 26 07:40:53 2023

 

참고로, 아래는 볼륨 삭제하는 명령 형식입니다.

# rbd rm {pool-name}/{volume-name}

 

3) CephFS 생성

파일시스템으로 사용 가능한 CephFS 를 생성합니다.

아래와 같이 실행시 자동으로 MDS 가 구동됩니다.

# ceph fs volume create myfs

* MDS 상태 확인
# ceph -s
또는
# ceph orch ls

* CephFS 리스트 확인
# ceph fs ls
name: myfs, metadata pool: cephfs.myfs.meta, data pools: [cephfs.myfs.data ]
또는
# ceph mds stat
myfs:1 {0=myfs.ceph-2.bmzpdd=up:active} 1 up:standby

 

반응형

댓글()