10.2. 컨테이너화된 환경의 Ceph 오브젝트 문제 해결
OSD 컨테이너는 복구/유지 관리 모드로 시작하여 OSD 노드에 Ceph 패키지를 설치하지 않고도 Red Hat Ceph Storage 4에서 OSD를 복구할 수 있습니다.
ceph-bluestore-tool 을 사용하여 fsck 명령으로 일관성 검사를 실행하거나 복구 명령으로 일관성 검사를 실행하고 오류를 복구할 수 있습니다.
이 절차는 컨테이너화된 배포에만 적용됩니다. 베어 메탈 배포에는 이 섹션 건너뛰기
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- Ceph OSD 노드에 대한 루트 수준 액세스.
-
ceph-osd데몬 중지.
절차
클러스터에
noout플래그를 설정합니다.예제
ceph osd set noout
[root@mon ~]# ceph osd set nooutCopy to Clipboard Copied! Toggle word wrap Toggle overflow - OSD 컨테이너를 호스팅하는 노드에 로그인합니다.
/etc/systemd/system/ceph-osd@.service장치 파일을/root디렉토리로 백업합니다.예제
cp /etc/systemd/system/ceph-osd@.service /root/ceph-osd@.service.backup
[root@osd ~]# cp /etc/systemd/system/ceph-osd@.service /root/ceph-osd@.service.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow /run/ceph-osd@OSD_ID.service-cid파일을/root로 이동합니다.예제
mv /run/ceph-osd@0.service-cid /root
[root@osd ~]# mv /run/ceph-osd@0.service-cid /rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/systemd/system/ceph-osd@.service장치 파일을 편집하고 podman 명령에-it --entrypoint /bin/bash옵션을 추가합니다.예제
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd관리자 구성을 다시 로드합니다.예제
systemctl daemon-reload
[root@osd ~]# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID와 연결된 OSD 서비스를 다시 시작합니다.구문
systemctl restart ceph-osd@OSD_ID.service
systemctl restart ceph-osd@OSD_ID.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID를 OSD의 ID로 바꿉니다.예제
systemctl restart ceph-osd@0.service
[root@osd ~]# systemctl restart ceph-osd@0.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID와 연결된 컨테이너에 로그인합니다.구문
podman exec -it ceph-osd-OSD_ID /bin/bash
podman exec -it ceph-osd-OSD_ID /bin/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
podman exec -it ceph-osd-0 /bin/bash
[root@osd ~]# podman exec -it ceph-osd-0 /bin/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow osd fsid를 가져오고 OSD를 활성화하여 OSD의 논리 볼륨(LV)을 마운트합니다.구문
ceph-volume lvm list |grep -A15 "osd\.OSD_ID"|grep "osd fsid" ceph-volume lvm activate --bluestore OSD_ID OSD_FSID
ceph-volume lvm list |grep -A15 "osd\.OSD_ID"|grep "osd fsid" ceph-volume lvm activate --bluestore OSD_ID OSD_FSIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
Copy to Clipboard Copied! Toggle word wrap Toggle overflow fsck를 실행하고복구명령을 실행합니다.구문
ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-OSD_ID ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-OSD_ID
ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-OSD_ID ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-OSD_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-0
[root@osd ~]# ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-0 fsck successCopy to Clipboard Copied! Toggle word wrap Toggle overflow ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-0
[root@osd ~]# ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-0 repair successCopy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너를 종료한 후
/root디렉터리에서/etc/systemd/system/ceph-osd@.service장치 파일을 복사합니다.예제
cp /etc/systemd/system/ceph-osd@.service /root/ceph-osd@.service.modified cp /root/ceph-osd@.service.backup /etc/systemd/system/ceph-osd@.service
[root@osd ~]# cp /etc/systemd/system/ceph-osd@.service /root/ceph-osd@.service.modified [root@osd ~]# cp /root/ceph-osd@.service.backup /etc/systemd/system/ceph-osd@.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemd관리자 구성을 다시 로드합니다.예제
systemctl daemon-reload
[root@osd ~]# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow /run/ceph-osd@OSD_ID.service-cid파일을/tmp로 이동합니다.예제
mv /run/ceph-osd@0.service-cid /tmp
[root@osd ~]# mv /run/ceph-osd@0.service-cid /tmpCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID와 연결된 OSD 서비스를 다시 시작합니다.구문
systemctl restart ceph-osd@OSD_ID.service
[root@osd ~]# systemctl restart ceph-osd@OSD_ID.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
systemctl restart ceph-osd@0.service
[root@osd ~]# systemctl restart ceph-osd@0.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow