Ceph OSD node 제거
환경
- Ceph 3 (Luminous v12.x)
작업절차
- 제거 작업전에 반드시 클러스터 여유 공간을 확인해야 한다.
- 제거되는 노드의 용량만큼 받아줄수 있는지 확인한다.
클러스터 용량 확인
[root@monitor ~]# ceph df [root@monitor ~]# rados df [root@monitor ~]# ceph osd df
스크러빙 비활성화 (I/O 부하 방지)
[root@monitor ~]# ceph osd set noscrub [root@monitor ~]# ceph osd set nodeep-scrub
백필 복구 기능 제한설정 (해당 OSD노드에서)
[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
OSD 노드 제거
OSD제거 시 OSD한개를 제거 한 후 클러스터 상태가 active+clean
이 된 이후에 다음 OSD제거 작업을 수행하도록 한다.
Ansible 을 이용하는 방법
OSD 노드를 줄이기 위해 ansible을 이용하는 경우 shrink-osd.yml
이나 shrink-osd-ceph-disk.yml
파일을 사용합니다.
만약 osd_scenario
가 collocated
나 non-collocated
인 경우, shrink-osd-ceph-disk.yml
을 사용합니다.
osd_scenario
가 lvm
인 경우, 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
CLI를 이용하여 수동으로 제거하는 방법
일단 해당 노드에 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