6.7. RADOS
두 개의 사이트 확장 클러스터를 사용하여 DR 테스트를 수행하면 더 이상 Ceph가 응답하지 않음
이전 버전에서는 두 개의 사이트 stretch-cluster를 사용하여 DR 테스트를 수행할 때 클러스터에 새 모니터를 제거하고 추가하면 ConnectionTracker
클래스에서 잘못된 순위가 발생했습니다. 이로 인해 모니터가 peer_tracker
복사에서 자신을 식별하지 못하고 올바른 필드를 업데이트하지 않아 선택 프로세스의 교착 상태가 발생하여 Ceph가 응답하지 않습니다.
이번 수정을 통해 다음과 같은 수정 사항이 적용됩니다.
-
함수
notify_rank_removed()
에 어설션을 추가하여Monmap
에서 제공하는 예상 순위를 온전성 검사로 수동으로 조정하는 순위와 비교했습니다. -
모든
Monmap
업데이트에서removed_ranks
변수를 지웁니다. -
각 모니터에 대해
ceph 연결 점수 재설정 - 명령을 실행할 때
는 작업이 추가되었습니다.peer_tracker.rank
를 수동으로 재설정하peer_tracker.rank
는 모니터의 현재 순위와 일치합니다. -
Elector
및ConnectionTracker
클래스에서 모니터 부팅을 포함하여 모니터를 업그레이드할 때 클린peer_tracker
를 확인하는 기능이 추가되었습니다. 정리되지 않은 경우peer_tracker
가 지워집니다. -
Red Hat Ceph Storage에서 사용자는 모니터를 종료하기 전에 모니터 순위를 수동으로 제거하도록 선택할 수 있으므로
Monmap
에서 불일치가 발생합니다. 따라서Monitor::notify_new_monmap()
에서는 함수가Monmap
에 존재하지 않는 순위 또는 순위를 제거하지 못하도록 합니다.
이제 클러스터가 예상대로 작동하고 안전하지 않은 다운타임이 발생하지 않습니다. 두 개의 사이트 확장 클러스터로 DR 테스트를 수행할 때 클러스터가 더 이상 응답하지 않습니다.
순위가 live_pinging
및 dead_pinging
세트에서 제거되어 일관성 없는 연결 점수 문제를 완화합니다.
이전 버전에서는 두 개의 모니터를 연속적으로 제거할 때 순위 크기가 Paxos의 크기와 동일한 경우 모니터가 조건에 직면하여 dead_pinging
세트에서 순위를 제거하지 않았습니다. 이로 인해 순위는 스트레치 클러스터 모드가 활성화된 경우 일관성 없는 연결 점수와 같은 문제가 발생하는 dead_pinging
세트에 남아 있었습니다.
이번 수정을 통해 가장 높은 순위의 모니터가 제거되는 경우, 즉 순위가 Paxos 크기와 동일할 때 live_pinging
및 dead_pinging
세트에서 순위를 제거합니다. 모니터는 깔끔한 live_pinging
및 dead_pinging
세트로 정상 유지됩니다.
이제 요청할 때마다 Prometheus 지표가 모든 Ceph 모니터에 대한 올바른 Ceph 버전을 반영합니다.
이전에는 모니터가 업그레이드될 때 Prometheus 지표에서 Ceph Monitor의 Ceph 버전이 일치하지 않는 것으로 보고되었습니다. 결과적으로 이 불일치를 해결하려면 활성 Ceph Manager 데몬을 다시 시작해야 했습니다.
이번 수정으로 Ceph Monitor는 MON 선택이 끝날 때 mon
메타데이터를 사용하여 mgr
으로 메타데이터 업데이트 요청을 명시적으로 보냅니다.
ceph daemon heap status
명령은 힙 상태를 표시합니다.
이전 버전에서는 ceph daemon 명령을 통해 힙 정보를 가져오지 못했기 때문에
명령에서 Ceph 데몬의 현재 힙 사용량을 반환하는 대신 빈 출력을 반환했습니다. ceph daemon
heap statsceph::osd_cmds::heap()
가 stderr
및 stdout
개념에 혼동되어 출력의 차이가 발생하기 때문입니다.
이번 수정으로 ceph daemon heap stats
명령은 ceph tell
명령을 사용하여 얻은 것과 유사한 Ceph 데몬의 힙 사용 정보를 반환합니다.
ceph orch apply mon <num> 명령을 사용할 때 Ceph 모니터가
더 이상 충돌하지 않음
이전에는 ceph orch apply mon <num
> 명령을 사용하여 클러스터의 모니터를 줄일 때 ceph-adm
에서 종료되기 전에 모니터가 제거되어 모니터가 충돌했습니다.
이번 수정을 통해 피어 순위가 모니터 맵의 순위보다 크거나 같은지 확인하는 모든 코드 경로에 sanity 검사가 추가됩니다. 조건이 충족되면 모니터 충돌로 이어지는 특정 작업을 건너뜁니다. 피어 순위는 결국 다음 버전의 모니터 맵에서 확인됩니다. 종료하기 전에 모니터 맵에서 제거되면 모니터가 더 이상 충돌하지 않습니다.
이제 최종 사용자가 Ceph 클러스터 로그에서 scrub 또는 deep-scrub 시작
메시지를 볼 수 있습니다.
이전 버전에서는 scrub 또는 deep-scrub가 Ceph 클러스터 로그에 누락된 메시지를 시작했기 때문에 최종 사용자는 Ceph 클러스터 로그에서 PG 스크럽이 시작되었는지 여부를 알 수 없었습니다.
이번 수정으로 scrub 또는 deep-scrub 시작
메시지가 다시 소개됩니다. 이제 스크러브 또는 딥-스크루브 프로세스의 상태가 될 때마다 PG에 대한 메시지가 Ceph 클러스터 로그에 표시됩니다.
Ceph Manager 장애 조치 중 어설션 없음
이전에는 Ceph Manager를 활성화할 때 이전에 활성 관리자가 보낸 여러 service_map
버전이 수신되었습니다. 이 잘못된 검사로 인해 새로 활성화된 관리자가 이전에 활성 관리자가 보낸 더 높은 버전의 맵을 수신했을 때 어설션 실패가 발생합니다.
이번 수정을 통해 초기 서비스 맵을 처리하는 관리자의 검사가 완화되고 Ceph Manager 장애 조치 중에 어설션이 없습니다.
사용자가 클러스터를 업그레이드한 후 복제된 오브젝트를 제거할 수 있습니다.
이전 버전에서는 Red Hat Ceph Storage 4에서 Red Hat Ceph Storage 5로 클러스터를 업그레이드한 후 이전 버전에서 생성된 오브젝트의 스냅샷을 제거하면 복제본이 제거되지 않았습니다. 이는 SnapMapper
키가 잘못 변환되었기 때문입니다.
이번 수정으로 SnapMapper
의 레거시 대화가 새 키 형식과 일치하도록 업데이트됩니다. 이제 이전 버전의 Ceph에서 복제된 오브젝트를 업그레이드 후 쉽게 제거할 수 있습니다.
작은 쓰기에서는 rocksdb 오류가 발생하지 않습니다.
BlueStore는 HDD에 대한 작은 쓰기를 지연하고 데이터를 RocksDB에 저장하는 전략을 사용합니다. RocksDB에서 지연된 데이터를 정리하는 것은 BlueFS와 동기화되지 않는 백그라운드 프로세스입니다.
이번 수정으로 지연된 재생은 더 이상 BlueFS 데이터를 덮어쓰지 않으며 다음과 같이 일부 RocksDB 오류가 발생하지 않습니다.
-
osd_superblock
손상 - CURRENT는 newline으로 끝나지 않습니다.
-
.SST
파일 체크섬 오류.
쓰기 위치에 적절한 개체를 포함하거나 비어 있을 수 있으므로 지연된 데이터를 작성하지 마십시오. 이러한 방식으로 오브젝트 데이터를 손상할 수 없습니다. BlueFS는 이 공간을 할당할 수 있는 유일한 엔티티입니다.
PG 로그의 손상된 dups 항목은 오프라인 및 온라인 트리밍으로 제거할 수 있습니다.
이전 버전에서는 PG 로그 dups 항목의 트리밍을 방지할 수 있었습니다. 낮은 수준의 PG 분할 작업에서는 작업자가 훨씬 더 높은 빈도를 가진 PG 자동 스케일러에 의해 사용됩니다. 트리밍을 중단하면 PG 로그 메모리가 크게 증가하여 메모리가 부족할 때 OSD 충돌이 발생했습니다. OSD를 다시 시작해도 PG 로그가 디스크에 저장되고 시작 시 RAM에 다시 로드되므로 문제가 해결되지 않았습니다.
이번 수정을 통해 ceph-objectstore-tool
명령 및 OSD 내에서 온라인을 사용하여 오프라인에서 모두 트리밍 작업을 중단하고 메모리 증가를 담당하는 PG 로그의 손상된 dups 항목을 제거할 수 있습니다. 향후 조사를 돕기 위해 OSD 로그에 dups 항목 수를 출력하는 디버그 개선이 구현됩니다.