Open Source Software

Ceph 노드 제거 및 추가 방법(mon/mgr/osd)

Somaz 2022. 9. 21. 19:50
728x90
반응형

Overview

오늘은 Ceph 클러스터에서 노드를 제거하고 새 노드를 추가하는 방법에 대해 학습하였다.

 

Ceph는 분산 스토리지 시스템으로, 클러스터 내에 다양한 역할을 가진 노드들이 구성된다. 운영 중 노드를 제거하거나 추가하는 작업은 데이터 무결성과 클러스터 안정성을 위해 매우 신중하게 접근해야 하며, 특히 OSD 제거 시 여유 스토리지 용량 확인, 스크러빙 비활성화, 클러스터 재조정 상태 확인 등의 사전 준비가 필수적이다.

 

이번 실습에서는 ceph osd, mgr, mon 등을 안전하게 제거하고, 이후 ansible을 이용하여 신규 노드를 클러스터에 구성하는 전체 절차를 수행하였다.

 

 

📅 관련 글

2022.07.29 - [Open Source Software] - Ceph 란?

2024.02.20 - [Open Source Software] - Cephadm-ansible이란?

2024.02.20 - [Open Source Software] - Rook-Ceph란?

 

 

 

 


 

 

 

 

작업전 확인사항

  • 제거 작업전에 반드시 클러스터 여유 공간을 확인한다.
  • 제거되는 노드의 용량만큼 받아줄수 있는지 확인한다.

 

 

1. Ceph 노드 제거

 

1.) 클러스터 상태 및 용량 확인

 
$ sudo ceph -s
$ sudo ceph osd df

 

2.) 스크러빙 비활성화 (I/O 부하 방지)

$ sudo ceph osd set noscrub
$ sudo ceph osd set nodeep-scrub

 

3.) Ceph OSD 제거

해당하는 ceph node의 osd를 제거해준다.(ex. ceph2 node osd 제거)

$ sudo ceph osd tree
ID CLASS WEIGHT  TYPE NAME            STATUS REWEIGHT PRI-AFF
-1       0.78119 root default
-3       0.39059     host ceph1
 1   hdd 0.19530         osd.1            up  1.00000 1.00000
 2   hdd 0.19530         osd.2            up  1.00000 1.00000
-5       0.39059     host ceph2
 0   hdd 0.19530         osd.0            up  1.00000 1.00000
 3   hdd 0.19530         osd.3            up  1.00000 1.00000

$ sudo ceph osd out osd.0
marked out osd.0.
$ sudo ceph osd down osd.0
marked down osd.0.
$ sudo ceph osd rm osd.0
removed osd.0
$ sudo ceph osd crush remove osd.0
removed item id 0 name 'osd.0' from crush map


$ sudo ceph osd out osd.3
marked out osd.3.
$ sudo ceph osd down osd.3
marked down osd.3.
$ sudo ceph osd rm osd.3
removed osd.3
$ sudo ceph osd crush remove osd.3
removed item id 3 name 'osd.3' from crush map

$ sudo ceph osd crush remove ceph2
removed item id -5 name 'ceph2' from crush map

$ sudo ceph osd tree
ID CLASS WEIGHT  TYPE NAME            STATUS REWEIGHT PRI-AFF
-1       0.39059 root default
-3       0.39059     host ceph1
 1   hdd 0.19530         osd.1            up  1.00000 1.00000
 2   hdd 0.19530         osd.2            up  1.00000 1.00000
  • osd를 제거할 때 down하고 rm을 바로 눌러줘야 한다. 이유는 바로 up으로 살아나기 때문이다.

 

ceph osd 인증 리스트 삭제

$ sudo ceph auth list
installed auth entries:

osd.0
        key: AQDkfipjW6P1ERAAcCdTZJ6lATN7i8wxwh7j3Q==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQDkfipjud7XFhAAqEEuJJtSofEOnHH5isz63w==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.2
        key: AQDxfipjjTSxARAAk0TLZHmJNMpjba5cpCgoNQ==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.3
        key: AQDxfipjEzNFCBAAqyOYJpLfbJQwAHr7kQg8hA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
...
mgr.ceph1
        key: AQCIfipjAAAAABAAaZo/gviQ+VODxFJfPDrpkQ==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
mgr.ceph2
        key: AQCKfipjAAAAABAAlxEFB8o0btVev+Rcky0FOw==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *

$ sudo ceph auth del osd.0
updated

$ sudo ceph auth del osd.2
updated

$ sudo ceph auth del mgr.ceph2
updated

$ sudo ceph auth list
installed auth entries:

osd.1
        key: AQDkfipjud7XFhAAqEEuJJtSofEOnHH5isz63w==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.3
        key: AQDxfipjEzNFCBAAqyOYJpLfbJQwAHr7kQg8hA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
...
mgr.ceph1
        key: AQCIfipjAAAAABAAaZo/gviQ+VODxFJfPDrpkQ==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *

 

4.) Ceph MON 제거

해당하는 ceph node의 Mon을 제거해준다.

$ sudo ceph mon stat
e1: 2 mons at {ceph1=[v2:10.3.2.206:3300/0,v1:10.3.2.206:6789/0],ceph2=[v2:10.3.2.207:3300/0,v1:10.3.2.207:6789/0]}, election epoch 4, leader 0 ceph1, quorum 0,1 ceph1,ceph2

$ sudo ceph mon remove ceph2
removing mon.ceph2 at [v2:10.3.2.207:3300/0,v1:10.3.2.207:6789/0], there will be 1 monitors

$ sudo ceph -s
  cluster:
    id:     14675ee4-b9dd-440b-9e73-e4c00a62eab1
    health: HEALTH_WARN
            noscrub,nodeep-scrub flag(s) set

  services:
    mon: 1 daemons, quorum ceph1 (age 4s)

 

5.) Ceph MGR 제거

해당하는 ceph node를 stanbys로 만들어준다.

$ sudo ceph -s
  cluster:
    id:     14675ee4-b9dd-440b-9e73-e4c00a62eab1
    health: HEALTH_WARN
            noscrub,nodeep-scrub flag(s) set

  services:
    mon: 1 daemons, quorum ceph1 (age 6m)
    mgr: ceph2(active, since 4w), standbys: ceph1
     
$ sudo ceph mgr fail ceph2

$ sudo ceph -s
  cluster:
    id:     14675ee4-b9dd-440b-9e73-e4c00a62eab1
    health: HEALTH_WARN
            noscrub,nodeep-scrub flag(s) set

  services:
    mon: 1 daemons, quorum ceph1 (age 7m)
    mgr: ceph1(active, since 3s), standbys: ceph2

 

그리고 해당하는 ceph node로 가서 Mgr을 제거해준다.

$ ssh [해당되는 Ceph node]

$ sudo systemctl status ceph-mgr@ceph2
● ceph-mgr@ceph2.service - Ceph cluster manager daemon
   Loaded: loaded (/usr/lib/systemd/system/ceph-mgr@.service; enabled; vendor preset: disabled)
   Active: active (running) since 화 2022-08-16 17:34:45 KST; 1 months 4 days ago
...

$ sudo systemctl stop ceph-mgr@ceph2

$ sudo systemctl status ceph-mgr@ceph2
● ceph-mgr@ceph2.service - Ceph cluster manager daemon
   Loaded: loaded (/usr/lib/systemd/system/ceph-mgr@.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 화 2022-09-20 16:43:21 KST; 11s ago
...
$ sudo ceph -s
  cluster:
    id:     14675ee4-b9dd-440b-9e73-e4c00a62eab1
    health: HEALTH_WARN
            noscrub,nodeep-scrub flag(s) set

  services:
    mon: 1 daemons, quorum ceph1 (age 99m)
    mgr: ceph1(active, since 91m)
    osd: 2 osds: 2 up (since 2h), 2 in (since 2h)
    rgw: 3 daemons active (master1.rgw0, master2.rgw0, master3.rgw0)

 

6.) 스크러빙 활성화

$ sudo ceph osd unset nodeep-scrub
nodeep-scrub is unset

$ sudo ceph osd unset noscrub
noscrub is unset
 

7.) Ceph 상태 확인

$ sudo ceph -s
  cluster:
    id:     14675ee4-b9dd-440b-9e73-e4c00a62eab1
    health: HEALTH_WARN

  services:
    mon: 1 daemons, quorum ceph1 (age 99m)
    mgr: ceph1(active, since 91m)
    osd: 2 osds: 2 up (since 2h), 2 in (since 2h)
    rgw: 3 daemons active (master1.rgw0, master2.rgw0, master3.rgw0)

  task status:

  data:
    pools:   11 pools, 228 pgs
    objects: 4.41k objects, 15 GiB
    usage:   32 GiB used, 368 GiB / 400 GiB avail
    pgs:     228 active+clean

  io:
    client:   2.7 KiB/s wr, 0 op/s rd, 0 op/s wr
  • Ceph node 를 제거했기 때문에 HEALTH_WARN이 발생할 것입니다.
  • 노드 추가하면 정상적으로 돌아옵니다.

 

 

 

 


 

 

 

 

2. Ceph 노드 추가

 

1.) 추가할 ceph osd 노드를 구성

기존 ceph 노드와 같은 OS를 설치 후 IP를 할당한다.

 

2.) ssh key 교환

새로운 노드에 접근할 수 있도록 ssh 공개키를 교환한다.

 
$ ssh-copy-id [해당되는 Ceph node]

 

3.) 시간 동기화

$ ssh [해당되는 Ceph node]
$ sudo vi /etc/chrony.conf
server [해당되는 Control node] iburst

$ sudo systemctl restart chronyd
$ chronyc sources
210 Number of sources = 1
MS Name/IP address                   Stratum Poll Reach LastRx Last sample
===========================================================================================
^* [해당되는 Control node]                 3   6   377    36   +489us[+1186us] +/-   40ms

 

 

4.) inventory (hosts.ini, extra-vars) 수정

 

hosts.ini 수정

$ ZONE_NAME={해당 ZONE]

$ cd ~/somaz

$ cp inventory/$ZONE_NAME/hosts.ini ~/somaz/inventory/$Z
ONE_NAME/hosts.ini.ceph-add

$ vi inventory/$ZONE_NAME/hosts.ini.ceph-add
...
+ [추가 node name] ip=[추가 node ip]
...
# Ceph cluster
# we need empty mons group or clients role fails
[mons]
# [기존 ceph node]    # 주석처리
+ [추가 node name]

[mgrs]
# [기존 ceph node]    # 주석처리
+ [추가 ceph node]

[osds]
# [기존 ceph node]  # 주석처리
+ [추가 node name]
...
  • 추가할 mon,mgrs,osds에 각각 추가해준다. 

 

 extra-vars 수정

$ cp inventory/$ZONE_NAME/extra-vars.yml inventory/$ZONE_NAME/extra-vars.yml.ceph-add

$ vi inventory/$ZONE_NAME/extra-vars.yml.ceph-add
...
## ceph osd
osd_objectstore: bluestore
lvm_volumes:
  - data: /dev/sdb
  - data: /dev/sdc
...
 
  • extra-vars는 osd에 변화가 있다면 추가해준다. 동일한 개수의 osd라면 그대로 진행하면 된다.

 

5.) ansible playbook 실행 site.yml (setup-os, ceph tag)

$ ansible-playbook -b -u clex \
-i inventory/$ZONE_NAME/hosts.ini.ceph-add \
--extra-vars=@inventory/$ZONE_NAME/extra-vars.yml.ceph-add \
site.yml --tags=setup-os,ceph

 

6.) osd 추가확인

$ sudo ceph -s
  cluster:
    id:     9893a83c-63e2-41b6-a538-f72008e15a01
    health: HEALTH_OK

  services:
    mon: 2 daemons, quorum ceph1,ceph2 (age 32m)
    mgr: ceph1(active, since 3h), standbys: ceph2
    osd: 4 osds: 4 up (since 6m), 4 in (since 6m)
    rgw: 3 daemons active (master1.rgw0, master2.rgw0, master3.rgw0)

  task status:

  data:
    pools:   11 pools, 228 pgs
    objects: 200 objects, 4.7 KiB
    usage:   4.1 GiB used, 796 GiB / 800 GiB avail
    pgs:     228 active+clean

$ sudo ceph osd tree
ID CLASS WEIGHT  TYPE NAME            STATUS REWEIGHT PRI-AFF
-1       0.78119 root default
-3       0.39059     host ceph1
 1   hdd 0.19530         osd.1            up  1.00000 1.00000
 3   hdd 0.19530         osd.3            up  1.00000 1.00000
-5       0.39059     host ceph2
 0   hdd 0.19530         osd.0            up  1.00000 1.00000
 2   hdd 0.19530         osd.2            up  1.00000 1.00000

 

 

 

 

 


 

 

 

마무리

Ceph 클러스터에서의 노드 관리 작업은 단순히 노드를 붙이고 떼는 것 이상으로, 다양한 시스템 컴포넌트와 연동되어 있어 정확한 순서와 명령어 실행이 중요하다.

 

이번 학습을 통해 Ceph 노드 제거 시 OSD → MON → MGR 순으로 제거하는 원칙과, 스크러빙 비활성화 → 인증 삭제 → 서비스 중지 → 재확인 등의 일련의 작업 플로우를 익힐 수 있었다. 또한 신규 노드를 Ansible을 활용해 빠르게 자동화 배포하는 실전 노하우도 함께 습득했다.

 

실무 환경에서는 Ceph 구성 변경 전 반드시 백업 및 재해 복구 시나리오, 그리고 여유 용량과 클러스터 상태를 먼저 점검하고, 문제가 발생하더라도 빠르게 대응할 수 있도록 로그 및 상태 확인 명령어 숙지가 필요하다.

 

이번 학습을 통해 Ceph 클러스터 운영의 자신감이 한층 더 높아졌으며, 이후 CephFS, RGW, 블록 디바이스 구성 등 다양한 고급 운영 주제도 차근차근 다뤄보고자 한다.

"변화가 잦은 인프라 환경일수록, 안전하고 자동화된 클러스터 관리가 핵심이다."

 

 

 

 

 


 

Reference

https://docs.ceph.com/en/quincy/

728x90
반응형

'Open Source Software' 카테고리의 다른 글

Cephadm-ansible이란?  (3) 2024.02.29
Rook-Ceph란?  (0) 2024.02.20
Redis(Remote Dictionary Server)란?  (0) 2022.09.26
RabbitMQ란?  (0) 2022.08.01
Ceph 란?  (0) 2022.07.29