Centos-7 NFS (네트워크 파일 시스템)

NFS 를 사용하여 원격지에 있는 자원(Disk, DVD-ROM등)을 마치 로컬에 있는 자원처럼 마운트하여 사용할 수 있다. 리눅스나 유닉스에서 사용하는 소류자, 권한 등을 완벽하게 사용할 수 있어 스토리지 공유등의 다양한 분야에 사용된다. 
NFS는 지속적인 발전을 거듭하여 왔다. 현재 NFS v4.1까지 있으며 CentOS7은 v3, v4, v4.1 을 지원한다. v3에서 여러 가지 기능을 제공해 왔으며, v4는 복잡한 인터넷 환경을 고려하여 가변포트를 사용하지 않고 , 보안요소가 많이 고려되었다. v3까지는 UDP 포트를 사용하여 데이터를 전송하였다. 이는 신뢰성이 뛰어난 네트워크에서는 효율적이지만, 인터넷 환경에는 적합하지 않다. v4는 tcp 만 사용하므로 보다 신뢰성 있는 전송이 가능하다. v4.1은 pNFS를 제공한다. 이는 클라우드 컴퓨팅 환경을 고려하여 대량의 데이터를 분산 저장하기 위해 메타서버, 데이터서버를 분리하여 제공하는 방식이다. CentOS7은 다양한 버전의 NFS를 사용할 수 있다. NFS는 Pnfs-utils-1.3.0-0.48.el7_4.x86_RPC(Remote  Procedure Calls)를 사용한다. RPC를 이용하여 mount, read 등의 명령을 전달한다. NFS 클라이언트는 NFS서버로부터 파일핸들을 받아 이 핸들을 사용하여 파일에 접근한다.

[주요 서비스 설명]

서비스
설명
nfs
NFS 메인 서빗, RPC 콜이 있으면 작동
nfslock
NFS 클라이언트가 서버의 파일을 잠글 때 필요한 데몬
rpcbind
RPC요청에 의해 포트를 결정하기 위한 데몬.(예전 portmap 역할)

[관련 프로그램]

프로그램
설명
NFS v4
rpc.mountd
NFS 클라이언트로부터 마운트 요청을 받았아 검증 및 마운트 진행
불필요
rpc.nfsd
NFS 프로그램
필요
rpc.lockd
클라이언트 요청으로 파일을 잠그는 기능 NLM(Network Lock Manager)구현
불필요
rpc.statd
NFS 상태를 전달. NSM(Network  Status  Monitor)의 구현
불필요
rpc.rquotad
사용자 쿼타 정보를 제공하는 데몬
필요
rpc.idmapd
NFSv4의 이름을 제공하는 데몬
필요
NFS 동작 구조



NFS 서버는 RPC(Remote Procedure Calls)를 사용하여 동작한다. 먼저 NFS 클라이언트가  NFS 서버의 특정 디렉토리를 마운트 하기 위해서는 다음 과정을 거치게 된다.

1. NFS서버의 rpcbind에  접속하여 get_port 라는 RPC 요청을 하고 NFS서버는 마운트포트번호를
    NFS클라이언트에게 전달한다.

2. NFS클라이언트는 마운트 포트번호를 통하여 prc.mountd에 접속하고 RPC마운트 요청한다.
    NFS서버는 클라이언트를 확인하고, /etc/exports 파일을 참조하여 파일시스템의 파일핸들을 
    NFS클라이언트에게 전달한다. NFS클라이언트는 이 파일핸들을 마운트한다.

위와 같은 과정으로 마운트를 하였다면, 파일을 읽을 때는 마운트 된 최상위 디렉토리부터 속성을 읽어 오고, 하위 디렉토리를 찾고, 속성을 읽어오고, 피일을 팢아 읽는 과정을 거치게 된다. 모든 과정에서는 RPC를 사용하게 된다. 위 과정에서 rpc.nfsd 와 접속하게 된다.

NFS 상태, 쿼타정보를 알기 위해서는 rpc.stated와 rpc.rquotad 등을 사용한다.

NOTE.
 NFS를 사용하기 위해서는 NFS 클라이언트 IP에 대해서 UDP, TCP 모든 포트를 오픈 하여야 원활하게 NFS를 사용할 수 있다.

NFSv4 동작 구조

NFSv4는 이전 버전과 다르게 , PORT는 TCP 2049포트만 사용한다. rpcbind의 도움을 받지도 않으며, nfslockd 및 nfsstatd 등의 프로그램 또한 필요하지 않다. NFSv4를 사용한다면, 방화벽의 모든 포트를 오픈 할 필요 없이 2049 포트만을 오픈하면 된다.

NFS 서버 설치

본 가이드에서는  CentOS7을 기준으로 설명하겠다.

# yum  -y  install nfs-utils
NFS 서버 시작 및 종료
# systemctl  start  nfs-server
# systemctl  restart  nfs-server
# systemctl  stop  nfs-server

위와 같은 systemctl 명령를 사용하여 nfs-server 를 시작, 재시작, 종료한 결과이다. 위와 같은 방법으로 NFS 서버를 제어할 수 있다.

NOTE.
NFS는 여러 버전이 있으며 일반적으로 많이 사용한 NFSv3은 rpcbind를 사용한다. 그렇기 때문에 NFS를 사용하려면 위 nfs-server 서비스만 시작하는 것이 아닌, rpcbind 서비스도 함께 시작하여야 정상 작동한다.
NFS클라이언트에도 rpcbind 서비스를 시작해야 정상적으로 NFS마운트가 가능하다. NFSv4 의 경우는 서버에는 rpcbind이 필요 없으나, 클라이언트에는 rpcbind 서비스가 실행되어 있어야 정상적으로 작동한다.

# systemctl  enable  rpcbind
# systemctl  start  rpcbind
# systemctl  stop  rpcbind


NFS 서버 설정

NFS 서버를 사용하려면 다음과 같은 설정이 필요하다.
NFS 서버의 설절파일인  /etc/exports 파일에는 다음과 같이 작성한다. 처음 설정한다면 /etc/exports 파일이 없을 것이다.

# vim   /etc/exports

/home/vmail         192.168.0.11(rw,sync,no_root_squash)

위 설정은 "/home/vmail" 디렉토리를 공유하며, 192.168.0.11 NFS 클라이언트에서 접속이 가능하며, 옵션들은 다음과 같다.

*  rw  :  일기 / 쓰기를 허용
* sync :  요청시 쓰기 작업을 동기화
* no_root_squash : 원격 루트 사용자를 로컬 루트로 취급
NFS 클라이언트
1. NFS 마운트

NFS  클라이언트에서 NFS 서버에 접속한다. NFS 클라이언트에도 rpcbind 서비스가 가동중이여야 정상적으로 NFS  마운트가 된다. NFS  클라이언트는 다음과 같은 방법으로 마운트 한다.

( 클라이언트의 마운트 디렉토리는 기존에 존재하는 폴더를 지정하여야 한다.)

# mount  -t  nfs  NFS서버:대상DIR   마운트DIR

     


+ Recent posts