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
- 초기설정

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

- 디렉토리 생성
[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)

[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


실습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
- GW: 10.10.2.2
- dns 서버: 10.10.2.3
- 웹 서버: 10.10.2.4
- NFS 서버: 10.10.2.5
- 클라이언트: 10.10.2.10





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