AWS Cloud School 8기/네트워크

18일차) 2025-01-21 (NFS)

eitherwho 2025. 1. 21. 12:26

NFS(Network File System)

    • 원격지에 존재하는 파일을 마치 내 로컬 파일인것처럼 사용 가능
    • 기본포트 TCP 2049 포트, 추가적으로 RPC 111번 포트
    • 추가적으로 데이터를 송수신할 때 랜덤하게 포트가 부여

VM: 리소스(CPU, RAM)는 많이 필요함
        잘 동작하다가 문제가 생기면 가용영역 내 다른 곳으로 이주를 시킴(마이그레이션)

HA(고가용성): 높은 확률로 사용이 가능하다

  • 내 스토리지와 관련된 정보 확인
[root@www ~]# df -h
# df(disk free) -h : 휴먼이 읽기편하게.

# mount: 최상위 디렉토리를 통해 특정 장치에 연결

  • 윈도우: CentOS ISO file을 지워도 자동으로 E Drive에 mount (자동으로 마운트)
    Plug & Play를 통해, 장치를 연결하기만 하면, 그 장치에 접근하기 위한 논리적인 경로가 자동으로 생성되어 매칭
  • 리눅스: 하나씩 직접 추가해줘야 함 (수동으로 마운트), 가상메모리 = 스왑

NFS 구축


초기설정

1. 방화벽 off

[root@srv3 ~]# systemctl stop firewalld
[root@srv3~]# systemctl disable firewalld

 

2. selinux off

# SELINUX=enforcing을 찾아서 SELINUX=disabled로 바꾸고 싶다.

[root@srv3~]# sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
[root@srv3~]# reboot
[root@web ~]# vi /etc/selinux/config
# 여기서 enforcing을 disabled로 수정하는 것이 편하지만, 파일에 들어가야 함

sed 명령어

문자열을 검색해서 치환하는 명령어

# -i: 영구적으로, s: 대체, g: 모두

# 구분자: 다른 특수문자(@,#,$ 등으로 대체 가능)

 

3. 레포

cat <<EOF > /etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=https://vault.centos.org/7.9.2009/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=https://vault.centos.org/7.9.2009/updates/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=https://vault.centos.org/7.9.2009/extras/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=https://vault.centos.org/7.9.2009/centosplus/x86_64/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
baseurl=https://vault.centos.org/7.9.2009/contrib/x86_64/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

EOF

[root@srv3 ~]# systemctl restart network
[root@srv3 ~]# reboot

NFS server 구축

- SRV3

  • nfs 클라이언트 역할 패키지 설치
[root@srv3 ~]# yum install -y nfs-utils

 

  • 디렉토리 생성
[root@srv3 ~]# mkdir /shared

 

  • 권한 확인
[root@srv3 ~]# ls -al / | grep shared
# drwxr-xr-x임을 확인 가능

 

  • 권한 수정
[root@srv3 ~]# chmod -R 777 /shared

# 권한 변경된 것 확인 가능

 

  • nfs로 공유할 대상을 설정하는 파일 수정
[root@srv3 ~]# vi /etc/exports
# 아래 내용 추가(/shared 뒤에 tab 두 번)
/shared 211.183.3.*(rw)

# /shared라는 디렉토리를 NFS로 공유를 하겠다. 대상은 211.183.3.0 /24 이고, 읽고 쓸수 있는(rw) 권한을 주겠다

 

  • 설정값 반영
[root@srv3 ~]# exportfs -r
  • nfs 서버 동작
[root@srv3 ~]# systemctl restart nfs-server
[root@srv3 ~]# systemctl enable nfs-server
  • 공유 여부 확인
[root@srv3 ~]# showmount -e

NFS client 구축

- SRV1

  • 초기설정

# 방화벽, 셀리눅스 off, 재부팅

 

  • nfs 클라이언트 역할 패키지 설치
[root@srv1 ~]# yum install -y nfs-utils

# nfs 서버의 주소를 통해 확인

  • 디렉토리 생성
[root@srv1 ~]# mkdir /remote

 

  • 마운팅
[root@srv1 ~]# mount -t nfs 211.183.3.30:/shared /remote

  • 테스트 파일 생성 후 내용물 삽입
[root@srv1 ~]# ls /remote
[root@srv1 ~]# touch /remote/test.txt
[root@srv1 ~]# echo 'testfile' > /remote/test.txt

 

  • srv3의 /shared에 아까 만든 파일이 보임!
[root@srv3 ~]# cat /shared/test.txt
testfile

# 마운트가 잘 되어있는걸 확인 가능

  • 재부팅
[root@srv1 ~]# init 6

# 재부팅 후에 마운트가 풀린걸 확인 가능

 

  • 재부팅시에도 마운트가 유지되도록 하는 설정파일
[root@srv1 ~]# vi /etc/fstab
# 아래 내용 추가
211.183.3.30:/shared /remote nfs defaults 0 0

# 앞에 3개의 항목만 중요하고, 뒤에 3개는 통상적으로 써줌

  • 언마운트

# 마운트를 해제하면 풀린걸 확인 가능


실습1) 

srv2에서도 /remote를 통해 srv3의 /shared에 접근 가능하도록 설정해보세요.
재부팅시에도 마운트가 유지되게 하세요!
[root@srv2 ~]# yum install -y nfs-utils
[root@srv2 ~]# mkdir /remote
[root@srv2 ~]# mount -t nfs 211.183.3.30:/shared /remote
[root@srv2 ~]# vi /etc/fstab
# 내용 추가
211.183.3.30:/shared /remote nfs defaults 0 0


실습2)

srv3의 /min 이라는 폴더를 만들어서 srv1과 srv2의 /chan으로 접근 가능하게 해보세요.
재부팅시에도 마운트가 유지되게 하세요!
  • srv3
[root@srv3 ~]# mkdir /min
[root@srv3 ~]# vi /etc/exports
# 내용 추가
/min                        *(rw)

# /min 에는 모두 접근 가능하도록

[root@srv3 ~]# chmod -R 777 /min
[root@srv3 ~]# exportfs -r
[root@srv3 ~]# showmount -e
Export list for srv3:
/min    211.183.3.*
/shared 211.183.3.*
  • srv1
[root@srv1 ~]# mkdir /chan
[root@srv1 ~]# mount -t nfs 211.183.3.30:/min /chan

[root@srv1 ~]# vi /etc/fstab
# 내용 추가
211.183.3.30:/shared /remote nfs defaults 0 0
  • srv2
[root@srv2 ~]# mkdir /chan
[root@srv2 ~]# mount -t nfs 211.183.3.30:/min /chan

[root@srv2 ~]# vi /etc/fstab
# 내용 추가
211.183.3.30:/shared /remote nfs defaults 0 0
  • 결과 확인
[root@srv1 ~]# df -h
[root@srv2 ~]# df -h

# srv1, srv2


실습3)

우리 회사는 지금 rapa.com 도메인을 갖고 있다.
회사 내부 서버실에는 www.rapa.com 으로 접속 가능한 웹서버,
nfs.rapa.com 으로 접속 가능한 nfs 서버, 이를 위한 dns.rapa.com 도 갖고 있다.

1. client가 /remotestg 경로를 통해 nfs 서버에 접근하여 /originstg의 파일에 접근 가능하도록 구성하시오.
2. nfs-server의 /web 이라는 경로에 있는 index.html을 웹서버에 배포하고 싶다.
    www.rapa.com으로 접속했을때 간단한 index.html 파일이 뜨도록 구성하세요.

index.html 파일의 내용은 ‘aws8 파이팅!’ 로 하세요! nfs-server의 /web이라는 경로에 있는 파일인 index.html 파일은 언제든지 변경가능하고, 실시간으로 변경사항이 웹서버에 적용되어야 한다.

마운트할 때, 다 영문주소로 접근하셔야 합니다.
ex) [root@web ~]# mount -t nfs nfs.rapa.com:/originstg /remotestg
  1. GW: 10.10.2.2
  2. dns 서버: 10.10.2.3
  3. 웹 서버: 10.10.2.4
  4. NFS 서버: 10.10.2.5
  5. 클라이언트: 10.10.2.10

 

 

client server는 ㄱㅊ은데 web server는 왜 영문주소로 안될까....

으이그 DNS 서버 주소로 바꿔야지... client는 똑바로 바꾸고, web은 왜 nfs로 바꿨니...