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 |
'배워서 남주자 > Service 구성' 카테고리의 다른 글
[php & oracle] php에서 오라클 연동 (PDO + OCI8 설치) (0) | 2018.04.20 |
---|---|
[Roundcube] Nginx + Php-fpm + MariaDB + Postfix + Dovecot + Roundcobe + Certbot (3) | 2018.03.29 |
[squid] proxy 서버 설정 - 옛날 자료 (0) | 2018.03.23 |
[ Mail-SPF] 메일서버등록 (0) | 2018.03.23 |
[SMB 설정] samba- 4.4.4 (1) | 2018.03.23 |