강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스서버 NFS와 NIS실무활용 1편- NFS편

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

       1. 리눅스와 NFS 활용 개론

       2. NFS서버와 NFS클라이언트의 설치와 필요한 데몬들  

       3. NFS서버와 클라이언트의 데몬 ()실행 및 종료  

       4. NFS관련 데몬들의 실행점검 

       5. NFS의 설정파일 : /etc/exports 

       6. NFS마운트하는 방법과 실제 예

       7. NFS를 활용한 리눅스 분산시스템 구축 실무

       8. 부팅시 NFS 자동마운트 설정하기



1. 리눅스와 NFS 활용 개론

 

NFS는 파일시스템(Network Filesystem)공유와 서버 자원공유를 위해서 1980년대 후반에 SUN사에서 NIS와 함께 개발한 일종의 프로토콜(Protocol)입니다. 즉 네트웍으로 통신이 가능한 곳이면 (대부분 로컬네트웍에서 사용됨) LINUX UNIX, Solaris등의 운영체제등에서 NFS를 이용하여 파일시스템공유가 가능합니다. 즉 인터넷방송이나 스트리밍, 교육사이트, 또는 호스팅서버등의 규모있는 인터넷서비스를 할 경우에 파일시스템공유나 부하분산을 위한 도구로 활용이 될 수 있습니다.

 

이런 용도로 사용되는 또다른 솔루션으로는 흔히 삼바(samba)를 얘기합니다. NFS가 아직까지는 윈도우 파일시스템과는 연동이 어려운 반면 삼바(samba)는 윈도우파일시스템과도 연동이 가능한 훌륭한 솔루션입니다. 하지만 보안적인 면과 용도 및 성능적인 면을 고려해 볼 경우에 SAMBA보다는 NFS를 활용하는 것이 효과적이라고 생각합니다. 즉 파일시스템공유자체의 목적외에도 서버군을 형성하여 부하분산이나 백업(Backup)서버 및 스토리지(Storage)서버를 구축할 용도라면 당연히 NFS를 활용하는 것이 좋을 것 같습니다. 간단히 정리해 보자면 NFS는 처음부터 UNIX계열의 운영체제를 위한 파일시스템공유를 위해서 개발된 반면 SAMBA UNIX계열의 운영체제와 윈도우계열의 운영체제간의 파일공유를 위해서 개발되었다고 할 수 있습니다. 또한 NFS는 디스크없이 단지 네트웍으로 파일을 공유(Diskless)하여 NFS Server의 디스크를 NFS Client가 마치 자기자신의 디스크인것 처럼 사용할 수 있습니다. NFS Client는 디스크없이 부팅과 사용이 가능하다는 의미가 됩니다.

 

 

 

2. NFS서버와 NFS클라이언트의 설치와 필요한 데몬들

 

NFS서버는 다른서버에서 NFS서버에 있는 특정한 파티션이나 디렉토리의 mount를 허용하는 서버가 되며 NFS서버로 설치되는 서버에는 특정한 데몬들이 설치가 되어 있어야합니다.

, NFS서버에는 반드시 다음과 같은 데몬들과 설정파일들이 설정되어 있어야합니다 .

 

             - rpc.nfsd                       : NFS데몬

             - rpc.mountd                  : rpc mount 데몬

             - portmap                       : portmapper 서버데몬

             - /etc/exports                : 마운트를 허용한 디렉토리와 사용옵션 nfs 설정파일

 

rpc.nfsd라는 것은 NFS데몬으로서 실제로 NFS로 연결된 파일시스템의 공유를 가능하게 해주는 데몬입니다.

 

rpc.mountd라는 데몬은 RPC(Remote Procedure Call)기반하에서 NFS사용을 위한 마운트(mount)를 가능하게하는 데몬입니다.

 

portmap이라는 것은 NFS가 원래 RPC(Remote Procedure Call)기반하에서 작동되는 것이기 때문에 rpcbind를 필요로 하며, rpcbind의 매핑(RPC program number mapper)을 위해 필요한 데몬이 portmap입니다.

 

그리고 /etc/exports라는 것은 NFS클라이언트에서 NFS서버로 마운트를 허용할 디렉토리들과 허용옵션들을 설정하는 NFS서버의 설정파일입니다.

 

이런 데몬들을 설치하려면 nfs-utils-0.3.1-13.i386.rpm라는 패키지를 설치하시면 됩니다.

이 패키지를 설치하시면 다음과 NFS서버에 필요한 다음과 같은 파일들과 데몬들이 설치가 됩니다 .

 

- /usr/sbin/rpc.mountd

- /usr/sbin/rpc.nfsd

- /usr/sbin/showmount

- /usr/sbin/exportfs

- /usr/sbin/nfsstat

- /usr/sbin/nhfsstone

- /etc/rc.d/init.d/nfs

- /etc/rc.d/init.d/nfslock

- /sbin/rpc.lockd

- /sbin/rpc.statd

- /sbin/rpcdebug

 

리눅스서버를 NFS서버로 사용하시면 다음과 같이 nfs-utils-0.3.1-13.i386.rpm 패키지를 설치해야합니다. 여러분의 리눅스서버에 이 패키지가 설치여부를 확인하시려면 다음과 같이 하시면 됩니다 


15cde9d4f7ddca3e8f605d34da1176c6_1643255757_6367.png


위의 결과 현재 이 서버에는 nfs-utils-0.3.1-13이라는 NFS서버 패키지가 설치되어 있습니다. 만약 이런 메시지가 없다면 설치되어 있지않은 것이므로 다음과 같이 설치해 주시면 됩니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643255780_6873.png


그리고 NFS서버와 클라이언트에 동일하게 설치되어야하는 데몬으로는 portmap데몬이 있습니다 . portmap데몬을 설치하려면 portmap-4.0-38.i386.rpm 패키지를 설치하시면 됩니다. 이 패키지를 설치하시면 다음과 같은 파일들과 데몬들이 설치가 됩니다.

 

/sbin/portmap

/usr/sbin/pmap_dump

/usr/sbin/pmap_set

 

대부분의 리눅스에는 portmap이 설치되어 있을 것입니다. 만약 설치되어 있지않다면  다음과 같이 portmap 패키지를 설치하시기 바랍니다.

 

먼저 portmap의 설치여부는 다음과 같이 확인할 수 있습니다. 


15cde9d4f7ddca3e8f605d34da1176c6_1643255805_377.png
 


만약 여러분의 NFS서버와 클라이언트에 portmap데몬이 설치되어 있지않다면 다음과 같이 설치를 해주십시오. 다음의 예는 portmap 데몬이 설치되어 있을 경우에 이미 설치되어 있다는 메시지입니다. 아시겠지만 rpm-Uvh옵션은 설치되어 있을 경우에는 확인만 하고 설치되어 있지않다면 설치를 해주는 옵션입니다


15cde9d4f7ddca3e8f605d34da1176c6_1643255831_945.png
 



이와 같이 설치가 종료되었다면 이제 NFS데몬과 portmap데몬을 실행하면 NFS로 마운트하여 파일시스템공유가 가능하게 됩니다.

 

 

 

3. NFS서버와 클라이언트의 데몬 ()실행 및 종료

 

이제 설치되어있는 NFS 데몬들의 실행을 해보도록 하겠습니다.  NFS데몬과 Portmap데몬을 실행하는 스크립트는 다음과 같습니다 .

 

             - NFS데몬 실행 : /etc/rc.d/init.d/nfs start (stop | restart)

             - Portmap 데몬 실행 : /etc/rc.d/init.d/portmap start (stop | restart)

 

실행하려면 start옵션을 사용하시면 되고, 종료하시려면 stop 그리고 재시작을 하시려면 start 옵션대신에 restart를 하시면 됩니다 .

 

다음은 nfs데몬의 시작과 종료 그리고 재시작한 예입니다.


NFS
데몬의 실행


15cde9d4f7ddca3e8f605d34da1176c6_1643255877_1196.png
 

위의 예와 같이 NFS데몬을 실행하실 때에는 /etc/rc.d/init.d/nfs start라고 하시면 됩니다.


NFS
데몬의 종료


15cde9d4f7ddca3e8f605d34da1176c6_1643255901_1154.png
 

위의 예와 같이 NFS데몬을 종료하실 때에는 /etc/rc.d/init.d/nfs stop라고 하시면 됩니다.


NFS
데몬의 재실행


15cde9d4f7ddca3e8f605d34da1176c6_1643255929_9378.png
 


위의 예와 같이 NFS데몬을 재실행하실 때에는 /etc/rc.d/init.d/nfs restart라고 하시면 됩니다.

 

다음은 portmap의 시작과 종료 그리고 재시작한 예입니다.

portmap
데몬의 실행


15cde9d4f7ddca3e8f605d34da1176c6_1643255953_9937.png
 

위의 예와 같이 portmap데몬을 실행하실 때에는 /etc/rc.d/init.d/portmap start라고 하시면 됩니다.

 

portmap데몬의 종료


15cde9d4f7ddca3e8f605d34da1176c6_1643255975_9134.png
 



위의 예와 같이 portmap데몬을 종료하실 때에는 /etc/rc.d/init.d/portmap stop이라고 하시면 됩니다.

 

portmap데몬의 재실행


15cde9d4f7ddca3e8f605d34da1176c6_1643256002_2179.png
 

위의 예와 같이 portmap데몬을 재실행하실 때에는 /etc/rc.d/init.d/portmap restart라고 하시면 됩니다.


4. NFS관련 데몬들의 실행점검

 

이제 위의 NFS데몬들이 정상적으로 실행이 되었는가를 확인해 보는 방법에 대해서 알아보겠습니다. rpcinfo라는 것을 이용하면 NFS서버에 필요한 데몬들(rpc.mountd, rpc.nfsd)이 정상적으로 실행이 되고 있는가를 확인할 수 있습니다.


15cde9d4f7ddca3e8f605d34da1176c6_1643256034_4453.png
 

 

위의 예에서 보시는 바와 같이 rpcinfo -p라고 하시면 현재 NFS서버에서 구동중인 NFS관련 데몬들을 점검해 보실 수 있습니다주의 깊게 보셔야하는 것은 nfs라는 데몬과 mountd라는 데몬 그리고 portmapper라는 데몬입니다. 이 세개의 데몬들의 역할에 대해서를 앞서 설명하였으므로 참고하시기 바랍니다.

 

다음 예와 같이 rpcinfo -p 호스트명 또는 rpcinfo -IP주소라고 하시면 특정 서버에 존재하는 NFS관련 데몬들을 확인해 보실 수 있습니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643256056_2711.png


위의 예는 192.168.0.102 NFS관련 데몬들이 정상적으로 구동이 되었는가를 확인한 것입니다.

 

 

 

5. NFS의 설정파일 : /etc/exports

 

이 파일은 NFS서버에 존재하는 파일로서 마운트를 허용할 위치와 NFS마운트 옵션을 설정하기 위한 파일입니다


설정형식 : [마운트할 디렉토리]             [허용할 NFS클라이언트] (설정옵션들)

 

구체적인 설정방법의 설명은 다음 예를 통해서 하도록 하겠습니다.

 

NFS서버에서의 /etc/exports파일 설정예


/web_data       192.168.0.101(rw)

이 설정은 192.168.0.101이라는 NFS클라이언트에서 NFS서버에 존재하는 /web_data로의 NFS마운트를 허용한다는 의미입니다. 뒤에서 설명되는 실제 구축예에서 다시 설명드리겠지만 이는 웹사이트 데이터 저장을 위한 NFS 마운트를 허용하게 됩니다. 옵션부분의 rw NFS클라이언트에서 read write가 가능하도록 설정한 것입니다.


/db_data          192.168.0.101(rw)
이 설정은 192.168.0.101이라는 NFS클라이언트에서 NFS서버에 존재하는 /db_data로의 NFS마운트를 허용한다는 의미입니다. 뒤에서 설명되는 실제 구축예에서 다시 설명드리겠지만 이는 db데이터를 저장을 위한 NFS 마운트를 허용하게 됩니다. 옵션부분의 rw NFS클라이언트에서 read write가 가능하도록 설정한 것입니다.

/data    192.168.0.109(ro)

위의 설정은 NFS서버의 /data라는 디렉토리에 NFS클라이언트에서의 마운트를 허용하며 read만 가능하도록 설정한 예입니다.

 

/home             192.168.0.109(rw)

/home/sspark   192.168.0.109(noaccess)

이 설정은 NFS서버의 /home이라는 디렉토리 전체를 NFS클라이언트에서의 마운트를 허용하게 됩니다. 하지만 두번째 설정으로 인하여 /home/sspark만은 NFS마운트를 허용하지않습니다.  noaccess라는 옵션은 지정한 디렉토리로의 NFS마운트를 허용하지않도록 설정하게됩니다.

 

/var/log           192.168.0.109(rw, root_squash)

이 설정의 의미는 이해가 매우 중요합니다. NFS서버와 NFS클라이언트의 root에 대한 보안 조치에 속합니다. NFS클라이언트에서 NFS서버로 root권한으로 마운트를 할 경우에 NFS서버에서 root권한을 부여하는 것이 아니라 nfsnobody권한을 부여하게 된다는 의미입니다. 만약 다음 예와 같이 NFS클라이언트에서 NFS서버의 마운트시에 root를 일치시키려고 한다면 no_root_squash라는 옵션을 사용하시면 됩니다. root에 있어서는 옵션이 지정되지 않을 경우의 기본값은 root_squash가 됩니다.

 

/var/log           192.168.0.109(rw, no_root_squash)

이 옵션의 no_root_squash옵션에 의해 NFS클라이언트의 root NFS의 서버로 마운트를 했을 경우에 NFS서버에서의 root사용자와 일치되게 됩니다하지만 가능한 이 설정은 보안을 위해서사용하지 않는 것이 좋습니다.

 

/home             192.168.0.109(rw, all_squash)

root사용자와는 반대로 일반사용자의 경우에는 no_all_squash가 기본값이 됩니다. NFS클라이언트에서 NFS서버로 마운트를 할 경우에 동일사용자가 존재한다면 root를 제외한 일반사용자는 동일한사용자로 매핑이 됩니다. 즉 동일한 사용자가 존재할 경우에는 그 사용자의 권한으로 NFS서버에서도 사용이 허락이 된다는 의미입니다. 즉 일반사용자의 경우에는 no_all_squash가 기본값이 됩니다하지만 이번 예에서는 all_squash라는 옵션을 사용했기 때문에 일반사용자의 경우에도 모두 nfsnobody로 매핑이 되어 버립니다. 만약 동일한 사용자로 매핑해서 사용하시려면 옵션을 지정하지 않거나 no_all_squash라는 옵션을 지정하시면 됩니다.


위의 내용을 간단히 정리하면 다음과 같습니다.

  

일 반 사 용 자

root

 

 

 

no_all_squash
일반사용자의 경우에는 자기자신의 ID와 동일하게 마운트하는 것이 기본이며 no_all_squash옵션은 동일한 ID로 마운트를 하도록 합니다.

root_squash
root
사용자의 경우에는 nfsnobody로 마운트되도록 하는 것이 기본입니다. 따라서 root_squash옵션은 root사용자가 원격마운트를 하였을 경우에 nfsnobody로 마운트되도록 합니다. (보안조치)

 

 

특수한
경우

all_squash
일반사용자의 경우라도 nfsnobody로 마운트를 해야할 경우가 있습니다. 따라서 all_squash옵션은 일반사용자를 nfsnobody로 마운트되도록 합니다.

no_root_ squash
root
사용자의 경우에 꼭 root로 마운트를 해야할 경우가 있습니다. 따라서  no_root_squash옵션은 root root로 마운트하도록 합니다.

 

이부분의 이해를 정확하게 하셔야만 NFS를 활용할 수 있습니다. 설명과 정리된 표로써 정확한 개념을 이해하시기 바랍니다.

 

 

6. NFS마운트하는 방법과 실제 예

 

자 이제 실제로 NFS클라이언트에서 NFS서버로의 마운트를 해보도록 하겠습니다.

마운트하는 방법은 다음과 같습니다 .

mount  -t  nfs  NFS서버IP주소또는호스트명:/NFS서버마운트포인트  /NFS클라이언트마운트포인트

 

좀 쉽게 표현해 보고자 위와 같이 좀 풀어서 적어 보았습니다

 

-t nfs라는 것은 설명드린 바와 같이 파일시스템타입이며 이는 반드시 nfs로 지정해주셔야합니다. 즉 네트웍파일시스템(NFS : Network FileSystem)을 사용할 것이기 때문입니다.

 

NFS서버IP주소또는호스트명 NFS서버의 IP주소나 호스트명을 적어주시면 됩니다 .

 

/NFS서버마운트포인트 NFS서버에서 NFS클라이언트의 마운트가 허용되어 있는(NFS서버의 /etc/exports에 설정되어 있어야함)위치를 지정하시면 됩니다.

 

/NFS클라이언트마운트포인트는 마운트명령어를 사용하고 있는 NFS클라이언트의 마운트포인트를 적어주시면 됩니다.

 

처음 보시면 헷갈리지만 다음과 같이 마운트를 한번 해보시면 일반적인 마운트명령어와 거의 유사함을 알 수 있을 것입니다.

 

다음은 바로 뒤에서 설명되는 NFS서버구축에서 사용한 실제 마운트예를 보인 것입니다 . 


15cde9d4f7ddca3e8f605d34da1176c6_1643256088_5912.png
 

이 마운트명령어는 현재 mount명령어를 사용하고 있는 NFS클라이언트의 /web_data  실제로 192.168.0.102라는 NFS서버의 /web_data를 사용하기위한 NFS 마운트입니다.

이렇게 마운트가 성공적으로 된 후에는 NFS클라이언트에서 사용하는 /web_data라는 디렉토리의 실제 사용위치는 NFS서버(192.168.0.102) /web_data가 됩니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643256112_7057.png


이 마운트명령어는 현재 mount명령어를 사용하고 있는 NFS클라이언트의 /db_data  실제로 192.168.0.103이라는 NFS서버의 /db_data를 사용하기위한 NFS 마운트입니다. 이렇게 마운트가 성공적으로 된 후에는 NFS클라이언트에서 사용하는 /db_data라는 디렉토리의 실제 사용위치는 NFS서버(192.168.0.103) /db_data가 됩니다.

 

 

 

7. NFS를 활용한 리눅스 분산시스템 구축 실무

 

NFS의 웹서버솔루션 개념과 구성도

 

필자는 이 책에서 NFS의 개념과 설정방법 그리고 NFS를 실무에 활용하도록 하기위해 NFS를 이용한 웹서버군을 구축하는 간단한 실제 예를 설명하도록 하겠습니다이제껏 설명한 내용을 이해하셨다면 여기서 설명드리는 내용은 별 어려움없이 이해할 수 있을 것입니다. 지금껏 설명드린 내용이 개념과 이론적인 것이라면 이를 바탕으로 해서 실무에서 활용할 수 있는 단적인 예를 보인 것입니다분명히 말씀드릴 것은 NFS를 활용한 굉장한 서버군들이 많이 존재하며 또한 NFS를 이용하여 원격백업서버도 구축이 가능합니다. 하지만 여기서는 가장 많은 활용을 하고 있는 웹서버에서의 NFS사용을 간단한 예로서 구축한 것임을 알려드립니다. 또한 이 예를 이해하고 구축하실 수 있다면 NFS의 다른 활용은 무리없이 하실 수 있을 것이라 확신합니다.

 

그리고 다음에 설명되는 NFS서버와 NFS클라이언트의 구현에 있어 필요한 NFS데몬들은 이미 앞에서 설명하였으므로 여기서는 NFS관련 데몬들이 이미 설치가 되어있다는 것을 전제로 하겠습니다. 만약 설치가 되어 있지않다면 앞의 NFS데몬설치 부분의 설명을 참고하시기 바랍니다.

 

, 그럼 우선 필자가 예로든 NFS의 구성도를 보겠습니다 


15cde9d4f7ddca3e8f605d34da1176c6_1643256150_0783.png
 

위의 구성도는 가장 간단하고 가장 보편적인 네트웍구성도에서 NFS 데몬을 설치하였다는 의미로 이해하시기 바랍니다. WebServer라는 것이 NFS의 클라이언트가 되면 오른쪽에 있는 Web DATA DB DATA NFS서버가 됩니다. 다음은 NFS 실제활용의 이해를 돕기 위하여 간단한 표로서 위의 구성도를 나타낸 것입니다 .

 

  

   

Web 데이터서버

DB 데이터서버

할당 IP

192.168.0.101

192.168.0.102

192.168.0.103

 

설치데몬

 

portmap

 

rpc.mountd
rpc.nfsd
portmap

rpc.mountd
rpc.nfsd
portmap

소프트웨어

Apache, Mysql

 

 

NFS개념

NFS Client

NFS Server

NFS Server

 

용도

Apache Mysql이 설치되어있는 웹서버.

웹데이터들이 저장됨.
웹서버에서 /web_data를 마운트하여 사용함.

Mysql DB데이터들이 저장됨. 웹서버에서 /db_data를 마운트하여 사용함.

 

WebServer에서 아파치와 Mysql이 설치되어 있지만 아파치와 Mysql의 데이터는 실제로 각각 Web DATA DB DATA에 저장이 됩니다3개의 서버가 따로 존재하지만 하나의 서버라고 생각하시면 됩니다.

 

WebServer의 홈페이지데이터 디렉토리는 /web_data이며 실제위치는 Web DATA서버에 존재하게 된다는 것이며 WebServer DB Mysql의 데이터가 저장되는 위치는 /db_data이며 실제로 존재하는 위치는 DB DATA서버의 /db_data가 되는 것입니다 .

 

 

웹서버에서 NFS사용을 위한 실제 작업내용과 NFS 마운트하기

 

웹서버는 NFS개념으로 볼때에는 NFS클라이언트가 됩니다. 이 웹서버에는 apache가 설치되어 있으며 설치시의 configure단계에서 하든 설치후에 httpd.conf파일내에서 설정하는 홈페이지의 디렉토리위치를 /web_data로 해야한다는 것입니다.

 

만약 아파치 설치시의 configure단계에서 설정하신 다면 configure의 옵션을 다음과 같이 하십시오.

 

./configure --prefix=/usr/local/apache --datadir=/web_data

 

여기서 중요한 것은 --datadir=/web_data옵션입니다. 이 옵션은 아파치의 홈페이지위치를 지정한 것입니다. 만약 여러분께서 웹홈디렉토리위치를 다른 곳으로 사용하고자 한다면 /web_data를 그곳으로 지정하시면 됩니다. 일반적인 홈페이지디렉토리의 위치는 /usr/local/apache/htdocs입니다.

 

만약 아파치 설치시에 홈페이지위치를 지정하지 않으셨다면 설치후에 httpd.conf 파일내에 있는 DocumentRoot옵션에 다음과 같이 설정되어 있어야합니다 .

 

DocumentRoot "/web_data"

 

마찬가지로 만약 여러분께서 홈페이지디렉토리 위치를 다른곳으로 지정하고자 하신다면 이 위치를 여기서 변경해주시고 아파치를 재시작하시면 됩니다.

 

그리고 이번에는 Mysql의 데이터위치를 지정하셔야하는데 Mysql은 설치시의 configure단계에서 데이터저장위치를 지정해주셔야합니다. , Mysql의 데이터저장의 기본위치는 /usr/local/mysql/data이지만 여기서는 NFS를 사용하여 마운트할 것이므로 /db_data Mysql의 데이터저장위치로 사용할 것입니다. 다음은 이 설정을 위한 Mysql의 설치시의 configure옵션입니다.

 

./configure --prefix=/usr/local/mysql --localstatedir=/db_data --with-charset=euc_kr

 

여기서 중요한 내용은 --localstatedir=/db_data 입니다. 즉 이 의미는 Mysql의 데이터가 저장될 위치가 /db_data라는 것입니다.

 

위의 설명들은 실제로 필자가 설치한 예를 보인 것이며 Apache의 설치와 Mysql의 실제 설치과정을 여기서 설명한다는 것은 NFS설명 과정단계에서 불필요한 것이므로 설치과정은 생략하고 설치시 주의사항만을 설명드린 것입니다.  Apache Mysql의 설치에 관한 내용과 자세한 설명은 이책의 12 "리눅스와 APM, 그리고 어플리케이션 연동하기"편을 참고하시기 바랍니다.

 

이제 NFS클라이언트인 웹서버에서 마운트를 하겠습니다. 먼저 Web DATA서버의 /web_data디렉토리를 홈페이지디렉토리로 사용하기 위한 마운트는 다음과 같습니다 


15cde9d4f7ddca3e8f605d34da1176c6_1643256184_0764.png
 


앞서도 설명드렸지만 NFS의 클라이언트인 192.168.0.101 WebServer에 존재하는 /web_data디렉토리는 NFS의 서버인 192.168.0.102서버의 /web_data디렉토리로 마운트가 된 것입니다.

 

다음은 마운트가 된 후에 /web_data디렉토리를 확인한 것이며 여기서 보이는 index.html파일은 실제로 NFS의 서버인 192.168.0.102 Web DATA서버의 /web_data에 존재하는 파일입니다.


15cde9d4f7ddca3e8f605d34da1176c6_1643256212_7321.png


그리고 다음과 같이 mount라는 명령어로 마운된 내용을 확인한 것입니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643256236_1808.png


위의 결과중 맨 아래행을 보시면 방금 마운트한 내용을 확인하실 수 있을 것입니다.

 

이번에는 db_data를 마운트 해보도록 하겠습니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643256263_9772.png


NFS의 클라이언트인 192.168.0.101 WebServer에 존재하는 /db_data디렉토리는 NFS의 서버인 192.168.0.103서버의 /db_data디렉토리로 마운트가 된 것입니다.

 

다음은 마운트가 된 후에 /db_data디렉토리를 확인한 것이며 여기서 보이는 mysql test라는 디렉토리는 실제로 NFS의 서버인 192.168.0.103 DB DATA서버의 /db_data에 존재하는 디렉토리입니다


15cde9d4f7ddca3e8f605d34da1176c6_1643256288_9499.png


그리고 다음과 같이 마운트가 되고 난 후에 맨 아래행을 보시면 좀 전에 마운트한 /db_data의 내용을 보실 수 있을 것입니다.



15cde9d4f7ddca3e8f605d34da1176c6_1643256312_7997.png


이로서 Web Server의 실제 작업내용이 마무리 되었습니다참고로 Apache Mysql의 설치를 하기전에 위와 같은 NFS마운트가 되어 있지않다면 에러가 발생하게 됩니다. , Mysql의 경우에 설치마무리 단계에서 ./mysql_install_db를 하게되면 Mysql의 데이터저장 디렉토리 mysql이라는  Mysql관리 데이터베이스와 test라는 데이터베이스를 생성하여 저장하게 되는데 이때에 NFS 마운트가 정확하게 되어있지 않거나 마운트가 되어 있어도 write할 권한이 없을 경우에는 에러가 발생하게 됩니다. 이부분의 주의사항은 다음에 이어지는 설명을 참고하시면 해결하실 수 있을 것입니다.

 

 

Web DATA서버에서의 실제 작업내용

 

, 이번에는 Web DATA서버에서의 작업내용을 확인해 보도록 하겠습니다.

 

WebDATA서버는 NFS의 서버가 되며, WebServer라는 NFS클라이언트에서 /web_data를 마운트할 것이므로 이를 허용하기 위하여 /etc/exports라는 파일에 다음과 같은 설정을 하였습니다.


15cde9d4f7ddca3e8f605d34da1176c6_1643256395_9778.png
 

이 설정은 WebServer NFS클라이언트(192.168.0.101)에서 /web_data라는 디렉토리를 홈페이지 디렉토리로 사용하기위해 rw라는 옵션을 주어서 설정한 것입니다.

 

여기서 중요한 것은 /web_data 디렉토리의 소유자 설정문제 입니다. /web_data 디렉토리는 NFS클라이언트인 WebServer에서 읽고 쓸 수있는 권한이 있어야하므로 /web_data의 소유자을 다음과 같이 chown이라는 명령어로 nfsnobody로 설정을 하였습니다설정 후에 /web_data 디렉토리의 소유자를 확인한 내용은 다음과 같습니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643256432_8549.png


그런 다음 아래와 같이 그 내용을 확인한 것입니다


15cde9d4f7ddca3e8f605d34da1176c6_1643256469_5667.png


물론, nfsnobody가 아닌 다른 소유자로 설정을 할 수도 있습니다. 예를 들어 nfsnobody가 아닌 webadmin이라는 특정계정을 만들어서 /web_data의 소유자를 webadmin으로 설정하고자 한다면 /etc/exports에서 설정 해야하는 all_squash라는 옵션은 기본옵션이므로 따로 설정할 필요가 없지만 NFS서버와 NFS클라이언트의 동일한 사용자가 존재해야 합니다.

 

 

DB DATA서버에서의 실제 작업내용(nfsnobody권한사용)

 

, 이번에는 DB DATA서버에서의 작업내용을 확인해 보도록 하겠습니다.

 

DB DATA서버 또한 WebDATA서버와 마찬가지로 NFS의 서버가 되며, WebServer라는 NFS클라이언트에서 /db_data를 마운트할 것이므로 이를 허용하기 위하여 /etc/exports라는 파일에 다음과 같은 설정을 하였습니다.


15cde9d4f7ddca3e8f605d34da1176c6_1643256502_7197.png
 


이 설정은 WebServer NFS클라이언트(192.168.0.101)에서 /db_data라는 디렉토리를 홈페이지디렉토리로 사용하기위해 rw라는 옵션을 주어서 설정입니다.

 

여기서 중요한 것은 WebDATA서버의 설명과 마찬가지로 /db_data 디렉토리의 소유자 설정문제입니다. /db_data디렉토리는 NFS클라이언트인 WebServer에서 읽고 쓸 수는 권한이 있어야하므로 /db_data의 소유자을 다음과 같이 chown이라는 명령어로 nfsnobody로 설정을 하였습니다설정 후에 /db_data디렉토리의 소유자를 확인한 내용은 다음과 같습니다.



15cde9d4f7ddca3e8f605d34da1176c6_1643256542_2575.png
 


그런 다음 아래와 같이 그 내용을 확인한 것입니다.


15cde9d4f7ddca3e8f605d34da1176c6_1643256577_8319.png
 

물론, nfsnobody가 아닌 다른 소유자로 설정을 할 수도 있습니다. 예를 들어 nfsnobody가 아닌 webadmin이라는 특정계정을 만들어서 /db_data의 소유자를 webadmin으로 설정하고자 한다면 /etc/exports에서 설정 해야하는 all_squash라는 옵션은 기본옵션이므로 따로 설정할 필요가 없지만 NFS서버와 NFS클라이언트의 동일한 사용자가 존재해야 합니다.

 

 

DB DATA서버에서의 실제 작업내용(특정사용자, webadmin권한사용)

 

이번에는 보다 직접적인 실무로의 접근을 위하여 방금 위에서 설정했던 방법과는 조금 다르게 nfsnobody의 권한이 아닌 특정 사용자의 권한으로 mount를 하여 사용하는 설정에 대해서 설명을 드리겠습니다.

 

nfsnobody 소유자로 마운트하여 사용해도 사용에는 큰 문제가 없지만 보안에 취약한 단점이 있습니다. 따라서 이 부분을 보완하기 위하여 nfsnobody대신에 webadmin이라는 웹관리자의 계정을 생성하여 이 계정소유자로 마운트를 하도록 하겠습니다.

 

먼저 WebServer WEB DATA서버, 그리고 DB DATA서버에 각각 webadmin이라는 계정을 다음과 같이 생성 해야합니다.

 

WebServer에서 webadmin계정생성


15cde9d4f7ddca3e8f605d34da1176c6_1643256631_4021.png


WEBDATA서버에서 webadmin계정생성


15cde9d4f7ddca3e8f605d34da1176c6_1643256656_6595.png


DBDATA서버에서 webadmin계정생성

15cde9d4f7ddca3e8f605d34da1176c6_1643256682_1819.png


그런다음 이번에는 NFS서버인 WEB DATA서버와 DB DATA서버에 다음과 같이 /etc/exports 파일을 변경해주셔야합니다.

 

WEBDATA서버에서의 /etc/exports 파일 설정


15cde9d4f7ddca3e8f605d34da1176c6_1643256705_8134.png
 


DBDATA서버에서의 /etc/exports 파일 설정


15cde9d4f7ddca3e8f605d34da1176c6_1643256726_9284.png


위의 설정에서 앞의 설정과 바뀐 부분은 anonuid=501,anongid=501의 추가입니다. 즉 새로 생성한 webadmin이라는 사용자의 UID 501이므로 이 사용자의 권한으로 마운트가 가능하도록 하고 /web_data /db_data UID 501번인 webadmin사용자에게 그 권한을 부여하기 위한 설정입니다.

 

그리고 NFS서버인 WEB DATA DB DATA서버의 /web_data db_data를 각각 webadmin의 소유로 설정을 해야합니다

 

WEBDATA서버의 /web_data디렉토리를 webadmin 소유로 설정함.


15cde9d4f7ddca3e8f605d34da1176c6_1643256752_6209.png


DBDATA서버의 /db_data디렉토리를 webadmin소유로 설정함.


15cde9d4f7ddca3e8f605d34da1176c6_1643256773_6441.png


이제 설정은 모두 끝났으며 다시 NFS 클라이언트에서 마운트 작업만 다시 해주시면 됩니다.

 

다음은 NFS클라이언트인 WebServer에서 다시 마운트를 한 것입니다 .


15cde9d4f7ddca3e8f605d34da1176c6_1643256799_9308.png



이번에 한 마운트작업은 nfsnobody로 되는 것이 아니라 webadmin으로 매핑이 되어 마운트가 된 것임을 분명히 이해하셔야 합니다.

 

이제 마운트된 상황에서 NFS클라이언트인 WebServer에서 확인을 해보도록 하겠습니다. 먼저 /web_data디렉토리로 이동하여 임의의파일을 생성해 보십시오.


15cde9d4f7ddca3e8f605d34da1176c6_1643256824_0685.png


그런다음 파일이 webadmin의 소유로 생성이 되고 있음을 확인하실 수 있을 것입니다.

 

이번에는 NFS로 마운트된 /db_data디렉토리에서 임의의 파일을 하나 생성하였습니다.


 15cde9d4f7ddca3e8f605d34da1176c6_1643256847_044.png



역시 앞의 예 처럼 webadmin의 소유로 파일이 생성이 되는 것을 확인하시기 바랍니다.

 

NFS NIS와 함께 사용이 될 경우에도 훌륭한 솔루션이 됩니다. NIS NFS SUN사의 Solaris에서 뿐아니라 LINUX에서도 얼마든지 사용이 가능합니다. 리눅스의 이식성과 파워를 함께 느낄 수 있는 부분이 아닌가 생각합니다.




8. 부팅시 NFS 자동마운트 설정하기

 

만약 여러분들의 시스템이 NFS로 구축되어 있다면 리눅스서버가 부팅하면서 매번 NFS마운트를 해줘야만 지속적으로 NFS환경을 사용할 수 있을 것입니다. 따라서 리눅스 서버가 부팅하면서 자동으로 NFS마운트 하도록 설정해 두셔야합니다. 지금까지 배웠던 내용을 충분히 이해한다면 어렵지 않게 설정할 수 있습니다. 먼저 간단한 예를 보도록 하겠습니다.

192.168.1.100:/home/bible     /bible     nfs    timeo=10,intr

 
/etc/fstab
파일에 위의 행을 추가하게 되면 리눅스 서버가 부팅하면서 192.168.1.100서버의 /home/bible와 현재서버(로컬서버) /bible를 마운트하게 됩니다. 위에서 사용한 옵션들의 의미는 다음과 같습니다다음은 /etc/fstab파일에서 사용가능한 NFS마운트 옵션들에 대한 설명입니다.

 

         

rsize=n

지정된 NFS서버로부터 읽어오는 바이트수를 지정. 기본값은 1024

wsize=n

지정된 NFS서버로에 쓰기를 할 때 사용하는 바이트 수 지정. 기본값은 1024

timeo=n

RPC타임아웃이 발생되고나서 첫번째 재전송요구를 보낼 때 사용되는 시간

retrans=n

timeout발생시 재전송시도 횟수를 제한한 것임. 기본값은 3

port=n

지정된 NFS서버와 연결할 때의 포트번호 지정

fg

첫번째 마운트시도하여 timeout되면 바로 중단됨. default

intr

timeout발생시 신호를 보내는 NFS호출을 인터럽트함.

hard

timeout이 발생하면 server not responding이라는 메시지를 출력한 후에 계속 재시도 함.

soft

timeout이 발생하면 I/O에러가 발생하였음을 알려줌.

 

, 위와 같이 /etc/fstab파일에 로컬마운트를 하는 것과 마찬가지로 NFS마운트도 설정하시기 바랍니다.

 

이상으로 NFS의 모든 설명을 모두 마치겠습니다.  NFS는 활용 여하에 따라서 굉장한 솔루션이 될 수 있습니다. 예전에 필자는 모벤쳐기업의 의뢰를 받고서 웹호스팅서버를 구축한 경험이 있습니다. 이때 NFS를 이용하여 위의 예처럼 웹데이터와 DB데이터, 그리고 DNS와 백업서버까지 모두 분리하여 구축을 한 예가 있었습니다.


 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,157 명
  • 현재 강좌수 :  36,516 개
  • 현재 접속자 :  355 명