7.4. 클러스터링
클러스터 스토리지는 클러스터에 있는 모든 서버에 걸쳐 일관된 파일 시스템 이미지를 제공하여 서버가 단일 공유 파일 시스템에 읽기/쓰기를 가능하게 합니다. 이는 애플리케이션의 설치 및 패칭 같은 작업을 하나의 파일 시스템으로 제한함으로써 스토리지 관리를 단순화합니다. 전체 클러스터 파일 시스템은 애플리케이션 데이터의 중복 사본의 필요성을 제거하고 백업 및 장애 복구를 단순화합니다.
Red Hat의 고가용성 애드온은 Red Hat Global File System 2 (장애 복구형 스토리지 애드온의 일부)와 함께 클러스터 스토리지를 제공합니다.
7.4.1. GFS 2 (Global File System 2)
Global File System 2 (GFS2)는 기본 파일 시스템으로 Linux 커널 파일 시스템과 직접 상호 작용합니다. 이는 여러 컴퓨터 (노드)가 동시에 클러스터에서 동일한 스토리지 장치를 공유할 수 있게 합니다. GFS2 파일 시스템은 대부분 자체 튜닝을 하지만 수동 튜닝도 가능합니다. 다음 부분에서는 수동으로 성능을 튜닝을 할 때 성능 고려 사항에 대해 설명합니다.
Red Hat Enterprise Linux 6.4에서는 GFS2로 파일 조각화 관리를 개선할 수 있게 되었습니다. Red Hat Enterprise Linux 6.3 및 이전 버전에 의해 생성된 파일은 하나 이상의 프로세스에서 동시에 여러 파일이 작성된 경우, 파일의 조각화가 일어나는 경향이 있었습니다. 이러한 조각화로 인해 특히 큰 파일과 관련된 워크로드의 경우 속도가 느려졌습니다. Red Hat Enterprise Linux 6.4에서 동시 쓰기를 하면 파일 조각화가 줄어들기 때문에 이러한 워크로드의 성능이 향상됩니다.
Red Hat Enterprise Linux에서는 GFS2 용 조각 모음 도구가 없는 반면 filefrag 도구로 파일을 식별하여 이를 임시 파일에 복사하고 이 임시 파일의 이름을 변경한 후 원래 파일로 대체하여 개별 파일을 조각 모음할 수 있습니다. (이 절차는 쓰기가 지속적으로 이루어지고 있는 한 6.4 이전 버전에서도 실행할 수 있습니다.)
GFS2는 클러스터 노드 간의 통신을 필요로 하는 글로벌 잠금 메커니즘을 사용하기 때문에 시스템이 이러한 노드 간의 파일 및 디렉토리 경합을 방지하도록 설계되어 있는 경우 최상의 성능을 얻을 수 있습니다. 경합을 방지하는 방법 중 일부는 다음과 같습니다:
- 가능한 경우
fallocate
로 파일 및 디렉토리를 사전할당하여 할당 프로세스를 최적화하고 소스 페이지를 잠금할 필요가 없도록 합니다. - 여러 노드 간에 공유되는 파일 시스템의 영역을 최소화하고 노드간 캐시 무효화를 최소화하며 성능을 향상시킵니다. 예를 들어 여러 노드가 동일한 파일 시스템을 마운트해서 다른 서브 디렉토리에 액세스하면 서브 디렉토리를 다른 파일 시스템으로 이동하여 성능을 향상시킬 가능성이 높아집니다.
- 최적의 리소스 그룹 크기와 수를 선택합니다. 이는 전형적인 파일 크기와 시스템에서 사용 가능한 여유 공간에 따라 다르며 여러 노드가 리소스 그룹을 동시에 사용하려고 시도할 가능성에 영향을 미칩니다. 리소스 그룹이 너무 많으면 할당 공간이 배치되는 동안 블록 할당이 느려집니다. 반면 리소스 그룹이 너무 적으면 할당 해제 동안 잠금 경합을 일으킬 수 있습니다. 일반적으로 여러 설정을 테스트하고 워크로드에 가장 적합한 것을 지정하는 것이 가장 좋습니다.
하지만 경합은 GFS2 파일 시스템 성능에 영향을 미치는 유일한 문제가 아닙니다. 전반적인 성능을 개선하기 위한 기타 모범 사례는 다음과 같습니다:
- 클러스터 노드에서 예측되는 I/O 패턴 및 파일 시스템의 성능 요구 사항에 따라 스토리지 하드웨어를 선택합니다.
- 가능한 솔리드 스테이트 스토리지를 사용하여 검색 시간을 줄입니다.
- 워크로드에 적합한 크기의 파일 시스템을 생성하고 파일 시스템이 용량의 80%를 초과하지 않도록 합니다. 작은 파일 시스템은 크기에 비례하여 짧은 백업 시간을 가지며 파일 시스템 검사에 필요한 시간과 메모리가 적지만 워크로드에 대해 너무 작을 경우 높은 조각화가 진행될 수 있습니다.
- 메타데이터 집약적인 워크로드의 경우 또는 저널링 데이터가 사용되고 있는 경우 저널 크기를 크게 설정합니다. 이것이 더 많은 메모리를 사용하더라도 쓰기가 필요하기 전에 데이터를 저장하기 위해 더 많은 저널링 공간을 사용할 수 있으므로 성능이 향상됩니다.
- GFS2 노드에 있는 클럭이 네트워크 애플리케이션 문제를 방지하도록 동기화되어 있는지 확인합니다. NTP (Network Time Protocol) 사용을 권장합니다.
- 애플리케이션 작업에서 파일이나 디렉토리 액세스 시간이 중요하지 않은 경우 파일 시스템을
noatime
및nodiratime
마운트 옵션으로 마운트합니다.참고
Red Hat은 GFS2에서noatime
옵션을 사용할 것을 권장합니다. - 할당량을 사용할 필요가 있는 경우 쿼터 동기화 트랜잭션의 빈도를 낮추거나 fuzzy 쿼터 동기화를 사용하여 지속적인 쿼터 파일 업데이트에서 발생하는 성능 문제를 방지합니다.
참고
Fuzzy 쿼터 계산은 사용자 및 그룹이 쿼터 제한을 약간 초과하는 것을 허용합니다. 이 문제를 최소화하기 위해 사용자 또는 그룹이 쿼터 제한에 도달하면 GFS2는 동기화 주기를 동적으로 감소시킵니다.
GFS2 성능 튜닝의 각 측면에 대한 보다 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/에 있는 Global File System 2 가이드에서 참조하십시오.