1. 목표

http 서버에 NFS mount를 해보자

2. 네트워크 설정

192.168.10.30/24 로 설정

3. NFS 서버 설정

nfs 설정을 위한 패키지 설치

dnf install nfs-utils

nfs 서비스 활성화

systemctl enable --now nfs-server.service
vim /etc/exports


nfs 서버 내에서 공유할 디렉토리와 공유받을 IP, 옵션 설정
rw을 통해서 읽기 쓰기, sync를 통해서 동기화

/webserver 디렉토리를 생성하고
chmod 를 통해서 others 권한으로도 쓰기 가능하도록 수정

export 설정을 refresh 하여 적용

exportfs -r

방화벽 설정

firewall-cmd --add-service=nfs
firewall-cmd --add-service=nfs --permanent

4. NFS 클라이언트 설정

nfs 서버와 동일한 패키지 설치

dnf install nfs-utils

nfs 서비스 활성화

systemctl enable --now nfs-server.service
systemctl enable --now nfs-client.target

nfs mount 명령

# mount -t nfs -o [rw,sync] [ip]:[dir] [mount-dir] 형태
mount -t nfs -o rw,sync 192.168.10.30:/webserver /var/www/html/

mount 확인
nfs 서버에서 /webserver/index.php 파일을 생성하고, 웹서버의 /var/www/html/ 디렉토리를 확인하면 똑같이 생성된 모습

5. SELinux 설정

하지만 설정 curl 호출 시, 원하는 페이지가 나오지 않는다

이는 NFS 사용 시, fcontext 때문에 발생하는 문제로 SELinux 설정을 통해 이를 해결할 수 있다

NFS 클라이언트 서버 (현재는 http 웹서버) httpd_use_nfs 값을 ON으로 수정

curl 요청 시 nfs 내부 파일 내용이 보이는 모습

5. 영구 Mount

여기까지만 진행할 경우, 클라이언트 서버가 꺼졌다 다시 켜지면 mount가 해제된다.
webserver1을 reboot 한 후, curl 요청을 하면 원래 php 파일이 실행되는 것을 볼 수 있다.

영구 마운트를 위해 /etc/fstab 파일을 수정

mount -a를 통해 fstab 설정대로 mount 시도

시키는대로 daemon-reload도 해준다

reboot 후 curl 요청을 해본다

mount가 되지 않은 모습을 확인할 수 있었다.
local 디스크에선 정상 작동하는데, NFS는 되지 않는다!

그 외에도 fstab에서 mount 옵션을 다양하게 줘봐도, 부팅 시 마운트는 되지 않았다.

가설 1

SELinux 설정 문제일 수 있다는 생각에 log를 확인해봐도 error 메세지는 없었고, SELinux를 Disabled 해도 작동하지 않았다.

가설 2

Linux 서버가 부팅하면서 네트워크 연결보다 mount 시도를 먼저 해서, mount에 실패하는 현상을 해결하면 될 것이라고 생각했다.
fstab 파일에서 _netdev, nofail, x-systemd.automount등의 mount 옵션을 줘서 해결을 시도했지만, 전부 통하지 않았다.

6. 결과

시니어 분께 여쭤본 결과, 일단 Linux 부팅 시 mount 후 네트워크 연결을 하면서 생기는 현상이라고 하셨다. 과거에는 가능했지만, 현재(Rocky9 버전) 부팅 시에 nfs를 mount하고 싶다면, autofs 밖에 방법이 없다고 하셨다.
그래서 다음엔 autofs를 활용한 mount 하는 법을 포스팅할 예정이다.

0개의 댓글