본문 바로가기
인프라

NFS를 이용해 로깅 파일을 관리하기

by 알린이 2021. 10. 27.

NFS

Network File System

NFS란?

한줄로 요약하면, 유닉스 시스템에서의 저장공간 공유를 위한 프로토콜입니다.

A라는 인스턴스에 unluckyJung이라는 디렉토리를 만들어두면
B, C라는 인스턴스에서도 A의 unluckyJung 디렉토리에 접근할수 있게 해주는 분산 파일시스템 프로토콜을 이야기합니다.

사용한 이유

Scale Out 작업을 수행하면서 Babble 인프라내 WAS가 N개로 늘어나게 되었습니다.

  • 각 WAS별로 찍히는 로그를 CloudWatch를 통해서 확인하려면 WAS의 개수에 맞춰 N개의 추가 설정이 필요했습니다.
    • 즉 WAS가 100개가 된다면, CloudWatch로 추적되는 화면이 100개가 되겠죠.
  • 이것은 로그 추적에 있어서도 불편함을 야기하게 되었고, NFS를 이용해 한개의 서버(A서버)에서 LOG 파일을 관리하고 다른 WAS들은, A서버에 접근해서 LOG 파일을 수정 하도록 하게 구성하였습니다.

image

  • 어떤 WAS에서 발생하는 에러인지는 Docker의 Container ID로 구분이 가능했습니다.
docker service logs babble-was

설치

서버(매니저 측)

sudo apt-get update
sudo apt install nfs-kernel-server
  • nfs server를 설치합니다.
sudo mkdir -p {공유할 폴더 경로}
sudo mkdir -p /mnt/sharedfolder
  • 공유할 폴더를 만듭니다.
sudo chown nobody:nogroup /mnt/sharedfolder
sudo chmod 777 /mnt/sharedfolder
  • 폴더 접근, 수정권한을 열어줍니다.
sudo vi /etc/exports

// vi 창

/mnt/공유할폴더명 클라이언트IP(rw,sync,no_subtree_check)

실제로 보이는 vi 창 예시

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/mnt/sharedfolder 192.168.0.0/16(rw,sync,no_subtree_check)
  • 클라이언트에 호스트에 접근 할 수 있는 권한을 열어줍니다.
  • 중간에 띄어쓰기가 들어가지 않게 조심해야 합니다.
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
  • 설정을 마무리합니다.

설치

클라이언트쪽

sudo apt-get update
sudo apt-get install nfs-common
  • nfs 접속 클라이언트를 설치합니다.
sudo mkdir -p /mnt/sharedfolder_client

sudo mount 호스트서버IP:호스트서버공유폴더 클라이언트공유폴더
sudo mount 192.168.100.5:/mnt/sharedfolder /mnt/sharedfolder_client
  • 클라이언트쪽에서 호스트의 공유폴더에 접근할 폴더를 만듭니다.
  • 공유폴더를 마운트합니다.
  • 이후 클라이언트에서 호스트서버의 폴더에 접근할 수 있게됩니다.
    • client : /mnt/sharedfolder_client
    • host server : /mnt/sharedfolder

Reference


구동

docker service create \
--name babble-was --replicas=3 \
--mount type=bind,source=/home/ubuntu/was-logs,target=/was-logs \
--publish mode=host,target=8080,published=8080 \
-e PROFILES_ACTIVE=prod -e DATASOURCE_PASSWORD=password -e  -e REDIS_PASSWORD=password \
2021babble/babble-was:latest

상태체크

nfsstat -s // 서버 상태 확인
nfsstat --version // nfs 버전확인

삭제

sudo apt-get remove nfs-kernel-server
sudo apt-get remove --auto-remove nfs-kernel-server
sudo apt-get purge nfs-kernel-server
sudo apt-get purge --auto-remove nfs-kernel-server
  • 이부분 까지만 진행하면 nfsstat -s 를 할경우에도 계속 nfs 서버가 살아있는것이 확인되었습니다.
sudo apt-get --purge remove nfs-kernel-server nfs-common portmap
  • 위의 명령어를 추가적으로 더 입력해줍니다.

Reference


Conclustion

imageimageimage

  • 각각의 WAS에서 공유 디렉토리를 이용해 같은 파일에 읽고, 쓰기가 가능해졌습니다.

트러블 슈팅

  • NFS 가 V3 - V4를 왔다갔다 하는 현상 발생. 2021-10-26
  • 한개의 인스턴스에서 Host와 Client를 동시에 두었을때 Docker Run 과정에서 문제가 발생했었다.
    • Host용 인스턴스를 분리해서 해결했다. (WAS-MANAGER를 완전히 분리)

 

https://unluckyjung.github.io/infra/2021/10/27/NFS/#

'인프라' 카테고리의 다른 글

(구구만 고생하신) SonarCloud 적용기  (0) 2021.09.23
NGINX 다중 서버 upstream 설정  (0) 2021.08.25
Github-actions 작업간 독립성  (0) 2021.08.23
소나큐브 설치하기  (0) 2021.08.23
도커, 스프링부트 타임 존 설정  (0) 2021.08.21

댓글