2.16. 네임스페이스를 NFS-Ganesha로 내보내기
Red Hat Ceph Storage 3 이상에서는 Ceph Object Gateway에서 프로덕션 시스템에 NFS 버전 3 및 NFS 버전 4.1을 사용하여 S3 개체 네임스페이스를 내보낼 수 있는 기능을 제공합니다.
NFS Ganesha 기능은 일반 용도가 아니라 S3 클라우드로만 마이그레이션하는 데만 사용됩니다.
Red Hat Ceph Storage는 NFS 내보내기 버전의 버킷을 지원하지 않습니다.
구현은 UNIX 스타일의 경로 이름을 S3 버킷 및 개체에 매핑하는 AWS(Amazon Web Services) 계층적 네임스페이스 규칙을 준수합니다. NFSv4 의사 루트에 종속되는 연결된 네임스페이스의 최상위 수준은 Ceph Object Gateway S3 버킷으로 구성됩니다. 이 버킷은 NFS 디렉터리로 표시됩니다. 버킷 내의 오브젝트는 S3 규칙에 따라 NFS 파일 및 디렉토리 계층 구조로 제공됩니다. 파일과 디렉토리를 생성하는 작업이 지원됩니다.
하드 또는 소프트 링크 생성 또는 삭제는 지원되지 않습니다. 버킷 또는 디렉토리에서 이름 변경 작업을 수행하는 작업은 NFS를 통해 지원되지 않지만 디렉토리 내에서 또는 파일 시스템과 NFS 마운트 간에 파일 이름 변경이 지원됩니다. NFS를 통해 수행할 때 파일 이름 변경 작업은 대상 디렉터리를 변경하고 일반적으로 전체 readdir
을 새로 고치도록 강제 적용하므로 비용이 더 많이 듭니다.
NFS 마운트를 통해 파일 편집은 지원되지 않습니다.
Ceph 개체 게이트웨이를 사용하려면 애플리케이션이 파일 끝에 0을 순차적으로 기록해야 합니다. 순서가 잘못되면 업로드 작업이 실패합니다. 이 문제를 해결하려면 NFS 공간으로 파일을 복사할 때 cp
,cat
또는 rsync
와 같은 유틸리티를 사용하십시오. 항상 동기화
옵션을 사용하여 마운트합니다.
NFS가 포함된 Ceph Object Gateway는 NFS-Ganesha NFS 서버의 프로세스 내 라이브러리 패키징과 NFS-Ganesha NFS 서버의 파일 시스템 추상화 계층(FSAL) 네임스페이스 드라이버를 기반으로 합니다. 런타임 시 NFS가 포함된 Ceph Object Gateway 데몬의 인스턴스는 Civetweb HTTP 서비스가 없는 경우에도 전체 Ceph Object Gateway 데몬을 단일 프로세스로 NFS-Ganesha 인스턴스와 결합합니다. 이 기능을 사용하려면 NFS-Ganesha 버전 2.3.2 이상을 배포합니다.
NFS-Ganesha(nfs-ganesha-
rgw ) 인스턴스를 포함할 호스트에서 NFS-Ganesha 인스턴스 시작하기 및 구성의 단계를 수행합니다.
여러 NFS 게이트웨이 실행
각 NFS-Ganesha 인스턴스는 전체 게이트웨이 엔드포인트 역할을 하며, 현재 NFS-Ganesha 인스턴스를 HTTP 서비스를 내보내도록 구성할 수 없는 제한 사항이 있습니다. 일반 게이트웨이 인스턴스와 마찬가지로 여러 NFS-Ganesha 인스턴스를 시작하여 클러스터에서 동일하거나 다른 리소스를 내보낼 수 있습니다. 이렇게 하면 NFS-Ganesha 인스턴스의 클러스터링이 가능합니다. 그러나 고가용성을 의미하는 것은 아닙니다.
일반 게이트웨이 인스턴스와 NFS-Ganesha 인스턴스가 동일한 데이터 리소스가 겹치면 표준 S3 API와 내보낸 NFS-Ganesha 인스턴스를 통해 액세스할 수 있습니다. 동일한 호스트에 Ceph Object Gateway 인스턴스를 사용하여 NFS-Ganesha 인스턴스를 공동 배치할 수 있습니다.
시작하기 전
- NFS-Ganesha 실행을 시도하기 전에 NFS-Ganesha를 실행할 모든 호스트에서 실행 중인 커널 NFS 서비스 인스턴스를 비활성화합니다. 다른 NFS 인스턴스가 실행 중인 경우 NFS-Ganesha가 시작되지 않습니다.
root
로 Red Hat Ceph Storage Tools 리포지토리를 활성화합니다.Red Hat Enterprise Linux 7
# subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms
Red Hat Enterprise Linux 8
# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
rpcbind
서비스가 실행 중인지 확인합니다.# systemctl start rpcbind
참고rpcbind
를 제공하는rpcbind
패키지는 일반적으로 기본적으로 설치됩니다. 그렇지 않은 경우 패키지를 먼저 설치합니다.NFS에서
rpcbind
를 사용하는 방법에 대한 자세한 내용은 Red Hat Enterprise Linux 7용 스토리지 관리 가이드의 필수 서비스 섹션을 참조하십시오.nfs-service
서비스가 실행 중인 경우 이를 중지하고 비활성화합니다.# systemctl stop nfs-server.service # systemctl disable nfs-server.service
NFS-Ganesha 인스턴스 구성
nfs-ganesha-rgw
패키지를 설치합니다.# yum install nfs-ganesha-rgw
Ceph Monitor 노드에서 NFS-Ganesha 호스트의
/etc/ceph/
디렉터리에 있는 Ceph 구성 파일을 복사하고 필요에 따라 편집합니다.# scp <mon-host>:/etc/ceph/ceph.conf <nfs-ganesha-rgw-host>:/etc/ceph
참고Ceph 구성 파일에는 유효한
[client.rgw.{instance-name}]
섹션과 rgw_data,
와 같은 다양한 필수 게이트웨이 구성 변수에 대한 해당 매개 변수가 포함되어야 합니다. 유효한 S3 버킷 명명 요구 사항을 준수하지 않는 Swift 컨테이너를 내보내는 경우 Ceph 구성 파일의keyring
또는rgw_
frontends[client.rg
를w] 섹션에 rgw
_relaxed_s3_bucket_namestrue
로 설정합니다. 예를 들어 Swift 컨테이너 이름에 밑줄이 포함된 경우 유효한 S3 버킷 이름이 아니며rgw_relaxed_s3_bucket_names
가true
로 설정되지 않는 한 동기화되지 않습니다. NFS 외부에 개체 및 버킷을 추가하면 해당 오브젝트가rgw_nfs_namespace_expire_secs
로 설정된 시간에 NFS 네임스페이스에 표시됩니다. 이 시간은 기본적으로 약 5분입니다. Ceph 구성 파일에서rgw_nfs_namespace_expire_secs
의 기본값을 재정의하여 새로 고침 속도를 변경합니다.NFS-Ganesha 구성 파일을 엽니다.
# vim /etc/ganesha/ganesha.conf
FSAL
(File System Abstraction Layer) 블록을 사용하여EXPORT
섹션을 구성합니다. ID, S3 사용자 ID, S3 액세스 키 및 시크릿을 제공합니다. NFSv4의 경우 다음과 같이 표시됩니다.EXPORT { Export_ID={numeric-id}; Path = "/"; Pseudo = "/"; Access_Type = RW; SecType = "sys"; NFS_Protocols = 4; Transport_Protocols = TCP; Squash = No_Root_Squash; FSAL { Name = RGW; User_Id = {s3-user-id}; Access_Key_Id ="{s3-access-key}"; Secret_Access_Key = "{s3-secret}"; } }
Path(경로
) 옵션은 Ganesha에 내보내기를 찾을 위치를 지시합니다. VFS FSAL의 경우 서버 네임스페이스 내의 위치입니다. 다른 FSAL의 경우 해당 FSAL 네임스페이스에서 관리하는 파일 시스템 내의 위치일 수 있습니다. 예를 들어 Ceph FSAL을 사용하여 전체 CephFS 볼륨을 내보내는 경우Path
는/
입니다.Pseudo
옵션은 NFS v4의 의사 파일 시스템 네임스페이스에 내보내기를 배치할 위치를 Ganesha에 지시합니다. NFS v4는 서버가 내보내기의 실제 위치에 일치하지 않을 수 있는 의사 네임스페이스를 구성하고 해당 의사 파일 시스템의 일부는 NFS 서버 영역 내에만 존재할 수 있으며 실제 디렉터리에 해당하지 않을 수 있음을 지정합니다. 또한 NFS v4 서버는 모든 내보내기를 단일 네임스페이스에 배치합니다. 단일 내보내기를 의사 파일 시스템 루트로 내보낼 수 있지만, 의사 파일 시스템에 여러 개의 공유디렉토리를 배치하는 것이 훨씬 일반적입니다. 기존 VFS에서는 종종Pseudo
위치가경로
위치와 동일합니다./
를Path
(경로)로 사용하고, 여러 공유디렉토리가 필요한 경우 내보내기에는Pseudo
옵션과 같은 CephFS 내보내기 예제로 돌아갑니다. 예를 들면/ceph
입니다.NFSv3를 지원해야 하는 모든
EXPORT
블록에는NFS_Protocols
설정에 버전 3이 포함되어야 합니다. 또한 NFSv3는 UDP 전송을 지원하는 마지막 주요 버전입니다. 초기 버전의 표준에는 UDP가 포함되어 있지만 RFC 7530은 사용을 금지합니다. UDP를 활성화하려면Transport_Protocols
설정에 포함합니다. 예를 들면 다음과 같습니다.EXPORT { ... NFS_Protocols = 3,4; Transport_Protocols = UDP,TCP; ... }
SecType = sys;
를 설정하면 Kerberos 인증 없이 클라이언트를 연결할 수 있습니다.Squash = No_Root_Squash;
를 설정하면 사용자가 NFS 마운트에서 디렉터리 소유권을 변경할 수 있습니다.기존 OS 네이티브 NFS 4.1 클라이언트를 사용하는 NFS 클라이언트는 일반적으로 대상 서버의
pseudofs
루트에서 정의한 내보낸 파일 시스템의 연결된 네임스페이스를 확인합니다. Ceph Object Gateway 내보내기가 있을 수 있습니다.각 공유디렉토리에는
이름
,User_Id
,Access_Key
및Secret_Access_Key
라는 자체 표시가 있으며 지정된 사용자에게 표시되는 오브젝트 네임스페이스의 프록시를 생성합니다.내보내기 in
ganesha.conf
에는NFSV4
블록도 포함할 수 있습니다. Red Hat Ceph Storage는idmapper
프로그램을 설정하는 대신Allow_Numeric
매개변수를 지원합니다._Owners
및 Only_Numberic_OwnersNFSV4 { Allow_Numeric_Owners = true; Only_Numeric_Owners = true; }
NFS_CORE_PARAM
블록 구성.NFS_CORE_PARAM{ mount_path_pseudo = true; }
mount_path_pseudo
구성 설정이true
로 설정되면 NFS v3 및 NFS v4.x 마운트에서 동일한 서버 측 경로를 사용하여 내보내기에 도달하게 됩니다. 예를 들면 다음과 같습니다.mount -o vers=3 <IP ADDRESS>:/export /mnt mount -o vers=4 <IP ADDRESS>:/export /mnt
Path Pseudo Tag Mechanism Mount /export/test1 /export/test1 test1 v3 Pseudo mount -o vers=3 server:/export/test1 /export/test1 /export/test1 test1 v3 Tag mount -o vers=3 server:test1 /export/test1 /export/test1 test1 v4 Pseudo mount -o vers=4 server:/export/test1 / /export/ceph1 ceph1 v3 Pseudo mount -o vers=3 server:/export/ceph1 / /export/ceph1 ceph1 v3 Tag mount -o vers=3 server:ceph1 / /export/ceph1 ceph1 v4 Pseudo mount -o vers=4 server:/export/ceph1 / /export/ceph2 ceph2 v3 Pseudo mount -o vers=3 server:/export/ceph2 / /export/ceph2 ceph2 v3 Tag mount -o vers=3 server:ceph2 / /export/ceph2 ceph2 v4 Pseudo mount -o vers=4
mount_path_pseudo
구성 설정이false
로 설정되면 NFS v3 마운트는Path
옵션을 사용하고 NFS v4.x 마운트는Pseudo
옵션을 사용합니다.Path Pseudo Tag Mechanism Mount /export/test1 /export/test1 test1 v3 Path mount -o vers=3 server:/export/test1 /export/test1 /export/test1 test1 v3 Tag mount -o vers=3 server:test1 /export/test1 /export/test1 test1 v4 Pseudo mount -o vers=4 server:/export/test1 / /export/ceph1 ceph1 v3 Path mount -o vers=3 server:/ / /export/ceph1 ceph1 v3 Tag mount -o vers=3 server:ceph1 / /export/ceph1 ceph1 v4 Pseudo mount -o vers=4 server:/export/ceph1 / /export/ceph2 ceph2 v3 Path not accessible / /export/ceph2 ceph2 v3 Tag mount -o vers=3 server:ceph2 / /export/ceph2 ceph2 v4 Pseudo mount -o vers=4 server:/export/ceph2
RGW
섹션을 구성합니다. 인스턴스 이름을 지정하고, Ceph 구성 파일의 경로를 제공하고, 초기화 인수를 지정합니다.RGW { name = "client.rgw.{instance-name}"; ceph_conf = "/etc/ceph/ceph.conf"; init_args = "--{arg}={arg-value}"; }
-
/etc/ganesha/ganesha.conf
구성 파일을 저장합니다. nfs-ganesha
서비스를 활성화하고 시작합니다.# systemctl enable nfs-ganesha # systemctl start nfs-ganesha
매우 큰 의사 디렉터리의 경우
ceph.conf 파일에서 구성 가능한 매개변수
rgw_nfs_s3_fast_attrs
를true
로 설정하여 네임스페이스를 변경 불가능하고 가속화합니다.rgw_nfs_s3_fast_attrs= true
각 게이트웨이 노드에서 Ceph Object Gateway 서비스를 다시 시작합니다.
# systemctl restart ceph-radosgw.target
NFSv4 클라이언트 구성
네임스페이스에 액세스하려면 구성된 NFS-Ganesha 내보내기를 로컬 POSIX 네임스페이스의 원하는 위치에 마운트합니다. 앞에서 설명했듯이 이 구현에는 다음과 같은 몇 가지 제한 사항이 있습니다.
- NFS 4.1 이상 프로토콜 플레이버만 지원됩니다.
-
쓰기 순서를 적용하려면
sync
마운트 옵션을 사용합니다.
NFS-Ganesha 내보내기를 마운트하려면 클라이언트 호스트의 /etc/fstab
파일에 다음 항목을 추가합니다.
<ganesha-host-name>:/ <mount-point> nfs noauto,soft,nfsvers=4.1,sync,proto=tcp 0 0
NFS-Ganesha 호스트 이름과 클라이언트의 마운트 지점의 경로를 지정합니다.
NFS-Ganesha 내보내기를 성공적으로 마운트하려면 클라이언트에 /sbin/mount.nfs
파일이 있어야 합니다. nfs-tools
패키지는 이 파일을 제공합니다. 대부분의 경우 패키지는 기본적으로 설치됩니다. 그러나 nfs-tools
패키지가 클라이언트에 설치되어 있는지 확인하고 그렇지 않은 경우 설치합니다.
NFS에 대한 자세한 내용은 Red Hat Enterprise Linux 7용 스토리지 관리 가이드의 NFS(Network File System) 장을 참조하십시오.
NFSv3 클라이언트 구성
NFSvers =3
및 noacl
을 마운트 옵션으로 제공하여 NFSv3로 마운트하도록 Linux 클라이언트를 구성할 수 있습니다. UDP를 전송으로 사용하려면 proto=udp
를 마운트 옵션에 추가합니다. 그러나 TCP는 기본 프로토콜입니다.
<ganesha-host-name>:/ <mount-point> nfs noauto,noacl,soft,nfsvers=3,sync,proto=tcp 0 0
마운트가 UDP에서 버전 3을 사용하는 경우 버전 3과 UDP를 사용하여 Transports
설정을 사용하여 NFS Ganesha EXPORT
블록 프로토콜
설정을 구성합니다.
NFSv3에서는 클라이언트 OPEN 및 CLOSE 작업을 파일 서버에 통신하지 않으므로 RGW NFS는 이러한 작업을 사용하여 파일 업로드 트랜잭션의 시작과 끝을 표시할 수 없습니다. 대신 RGW NFS는 첫 번째 쓰기가 오프셋 0의 파일로 전송될 때 새 업로드를 시작하려고 시도하고 일정 기간 동안 파일에 대한 새 쓰기가 표시되지 않은 경우 업로드를 완료합니다.기본적으로 10초. 이 값을 변경하려면 Ceph 구성 파일의 RGW 섹션에서 rgw_nfs_write_completion_interval_s
값을 설정합니다.