Traffic Control

골덕·2024년 11월 26일
  • 읽기 요청이 많은 디렉토리(예: 많은 파일 열림)는 여러 노드에 선택적으로 복제하여 부하를 분산합니다.

    • 특정 MDS가 과부하 상태에 도달하면, Ceph는 메타데이터를 동적으로 다른 MDS로 이동하거나 복제.
  • 크기가 크고 쓰기 요청이 많은 디렉토리(예: 많은 파일 생성)는 디렉토리의 locality(위치적 근접성)를 희생하면서, 파일 이름을 기준으로 해싱하여 클러스터 전체에 내용을 분산해 부하를 균형 있게 분배합니다.

  • 모든 MDS 응답은 클라이언트에게 해당 inode의 권한을 가진 노드(Primary)와 복제본(Secondary) 및 조상 노드(ancestors)에 대한 정보를 제공합니다.

  • 클라이언트가 특정 경로에서 작업을 수행할 때, 요청 경로에 가까운 조상 노드들의 실시간 상태와 위치를 학습할 수 있음.

    • MDS 맵은 클러스터 전체의 MDS 배치와 분할 상태를 전반적으로 설명하지만, 클라이언트가 상호작용하는 경로에 대한 세부적인 정보는 포함하지 않습니다.
  • 이후의 메타데이터 작업은 경로의 가장 깊이 알려진 접두사를 기준으로(동적 트리 구조와 일관성 유지), 업데이트 작업은 Primary 노드로, 읽기 작업은 무작위 복제본으로 전달됩니다.

  • 클라이언트가 /dir3/dir4/dir5/file.txt를 요청하는 경우:

    • 클라이언트가 /dir5에 대한 정보를 알고 있다면 바로 해당 MDS로 요청 가능.
    • 클라이언트가 /dir3까지만 알고 있다면, /dir3의 MDS에 요청을 보내 경로를 탐색해야 함.
  • 쓰기 요청

    • 업데이트(쓰기)는 항상 해당 prefix를 관리하는 권한 있는 MDS(authority)로 전달.
    • 예: /dir5에 파일을 추가하려면, MDS3에 요청.
  • 읽기 요청

    • 읽기는 성능 최적화를 위해 해당 prefix의 복제본(replica) 중 하나에 요청.
    • 예: /dir5/file.txt를 읽는 요청은 MDS3 또는 해당 메타데이터를 복제한 다른 MDS로 분산.
  • 일반적으로 클라이언트는 잘 알려지지 않은(복제되지 않은) 메타데이터의 위치를 학습하고, 적절한 MDS에 직접 접근할 수 있습니다.

  • 그러나 인기 있는 메타데이터를 접근하는 경우, 클라이언트는 해당 메타데이터가 여러 MDS에 분산되어 있거나 다른 MDS에 위치한다고 안내받음

    • 클라이언트가 MDS Map 또는 내부 로직을 기반으로 랜덤하게 복제본 중 하나에 요청.
profile
다시 시작하는 개발자

0개의 댓글