ceph_osd_node_제거

Ceph OSD node 제거

  • Ceph 3 (Luminous v12.x)
  • 제거 작업전에 반드시 클러스터 여유 공간을 확인해야 한다.
  • 제거되는 노드의 용량만큼 받아줄수 있는지 확인한다.
[root@monitor ~]# ceph df
[root@monitor ~]# rados df
[root@monitor ~]# ceph osd df
[root@monitor ~]# ceph osd set noscrub
[root@monitor ~]# ceph osd set nodeep-scrub
[root@monitor ~]# ceph daemon osd.0 config show

"osd_max_backfills": "1"
"osd_recovery_max_active": "3"
"osd_recovery_op_priority": "3"

[root@monitor ~]# ceph tell osd.* injectargs --osd-max-backfills 1 --osd-recovery-max-active 1 --osd-recovery-op-priority 1

참조 : https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html-single/configuration_guide/index#setting_a_specific_configuration_setting_at_runtime

OSD제거 시 OSD한개를 제거 한 후 클러스터 상태가 active+clean 이 된 이후에 다음 OSD제거 작업을 수행하도록 한다.

OSD 노드를 줄이기 위해 ansible을 이용하는 경우 shrink-osd.yml 이나 shrink-osd-ceph-disk.yml 파일을 사용합니다.
만약 osd_scenariocollocatednon-collocated 인 경우, shrink-osd-ceph-disk.yml 을 사용합니다.
osd_scenariolvm 인 경우, shrink-osd.yml 을 사용합니다.
admin keyring 을 제거할 노드에도 복사해둬야 합니다.

1) ceph-ansible 디렉토리로 이동

[user@admin ~]$ cd /usr/share/ceph-ansible

2) 위에서 알려준대로 설치된 형식에 따라 적절한 yaml 파일 복사

[root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-osd.yml .
또는
[root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-osd-ceph-disk.yml .

3) 베어메탈 또는 컨테이너 배포인경우 해당되는 플레이북 실행

ansible-playbook shrink-osd.yml -e osd_to_kill=$ID -u $ANSIBLE_USER
ansible-playbook shrink-osd-ceph-disk.yml -e osd_to_kill=$ID -u $ANSIBLE_USER
  • $ID : 제거할 OSD 번호. 여러개인경우 컴마로 구분해서 나열
  • $ANSIBLE_USER : ansible 실행 계정
[user@admin ceph-ansible]$ ansible-playbook shrink-osd.yml -e osd_to_kill=1 -u user
또는
[user@admin ceph-ansible]$ ansible-playbook shrink-osd-ceph-disk.yml -e osd_to_kill=1 -u user

4) OSD 제거 완료 확인

[root@mon ~]# ceph osd tree

일단 해당 노드에 root 로그인 하여 작업하도록 한다. 클러스터에 여유공간을 확인해야 한다. near full 상태 인 경우 작업불가능

1) 클러스터에서 OSD 제거

[root@osd ~]# ceph osd out 4

OSD가 제거되면 active+clean 상태로 전환된 이후 다음 OSD제거 작업을 진행하도록 한다.

2) 해당 OSD서비스 중지

[root@osd ~]# systemctl disable ceph-osd@4
[root@osd ~]# systemctl stop ceph-osd@4

3) CRUSH map에서 해당 OSD제거

[root@osd ~]# ceph osd crush remove osd.4

4) 인증키 삭제

[root@osd ~]# ceph auth del osd.4

5) OSD 제거

[root@osd ~]# ceph osd rm 4

6) 만약 클러스터 설정파일 /etc/ceph.conf 에 따로 해당 OSD 설정내용이 존재하면 삭제처리

[osd.4]
host = $HOST_NAME

7) /etc/fstab 에서 해당 OSD 파티션 설정 제거

8) 변경된 /etc/ceph 아래 파일들을 다른 모든 노드에 복사

[root@osd ~]# scp /etc/ceph/ceph.conf root@node4:/etc/ceph/

모든 OSD가 제거 되면 크러시 맵에서 해당 호스트 버킷을 제거한다.

[root@monitor ~]# ceph osd crush rm <노드명>

모든 작업이 완료되고 클러스터 상태가 정상인것이 확인되면 작업을 위해 변경한 값들을 원복한다.

[root@monitor ~]# ceph daemon osd.0 config show
[root@monitor ~]# ceph tell osd.* injectargs --osd-max-backfills 1 --osd-recovery-max-active 3 --osd-recovery-op-priority 3

[root@monitor ~]# ceph osd unset noscrub
[root@monitor ~]# ceph osd unset nodeep-scrub
로그인하면 댓글을 남길 수 있습니다.
  • ceph_osd_node_제거.txt
  • 마지막으로 수정됨: 2021/02/18 11:02
  • 저자 koov