http 서버에 NFS mount를 해보자
192.168.10.30/24 로 설정
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
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/
디렉토리를 확인하면 똑같이 생성된 모습
하지만 설정 curl 호출 시, 원하는 페이지가 나오지 않는다
이는 NFS 사용 시, fcontext 때문에 발생하는 문제로 SELinux 설정을 통해 이를 해결할 수 있다
NFS 클라이언트 서버 (현재는 http 웹서버)
httpd_use_nfs
값을 ON으로 수정
curl 요청 시 nfs 내부 파일 내용이 보이는 모습
여기까지만 진행할 경우, 클라이언트 서버가 꺼졌다 다시 켜지면 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 옵션을 줘서 해결을 시도했지만, 전부 통하지 않았다.
시니어 분께 여쭤본 결과, 일단 Linux 부팅 시 mount 후 네트워크 연결을 하면서 생기는 현상이라고 하셨다. 과거에는 가능했지만, 현재(Rocky9 버전) 부팅 시에 nfs를 mount하고 싶다면,
autofs
밖에 방법이 없다고 하셨다.
그래서 다음엔autofs
를 활용한 mount 하는 법을 포스팅할 예정이다.