NFS
NFS란?
- Network File System
- 네트워크에 파일을 저장하는 메커니즘.
사용자가 원격 컴퓨터에 있는 파일 및 다렉토리에 접근 할 수 있고 해당 파일 및 디렉토리가 로컬에 있는 것처럼 처리하도록 하는 분산 파일 시스템이다.
- 사용자는 운영체제 명령을 사용해 원격 파일 및 디렉토리에 대한 파일 속성을 변경할 수 있다.
동작 구조
- 클라이언트-서버 구조를 이용해 서비스를 제공.
- NFS 클라이언트는 RPC(Remote Procedure Call)를 통해 접속하여 NFS 서버에 접근한다.
- 서버 : 파일 시스템 또는 디렉토리 및 기타 자원의 원격 액세스를 가능하게 만드는 것.
- 클라이언트 : 서버 자원을 사용하는 컴퓨터와 해당 프로세스.
- 반출 : 파일 시스템을 사용 가능하게 만드는 조치.
- 클라이언트가 서버가 반출한 파일 시스템을 마운트한 후 클라이언트는 개별 서버 파일에 접근할 수 있음.
장점과 단점
- 장점
- 공통으로 사용되는 파일이 있으면 각 컴퓨터에 파일을 저장하지 않고 서버 1개에 저장하여 효율적으로 사용한다.
- 단점
- 다른 서버에 있는 디렉토리를 사용하는 것이므로 보안에 취약.
- 네트워크를 이용하는 것이기 때문에 내장 하드, 혹은 DAS보다 속도가 느림.
- NFS를 사용하려면 서버와 클라이언트 모두 커널에서 NFS를 지원할 수 있어야 제대로 사용 가능.
NFS 와 NSA
- NAS(Network Attached Service) : 네트워크로 연결하는 저장 공간. 다수의 사용자가 데이터를 공유할 때 적합한 서비스
네트워크에 연결된 스토리지로 접근 권한이 있는 네트워크 사용자와 여러 클라이언트가 중앙 집중화된 위치의 데이터를 읽고 쓸 수 있게 해주는 스토리지.
- NAS를 사용하기 위해서는 컴퓨터 혹은 서버에서 일반 IP를 기반으로 NAS를 찾아간 후 마운트 해서 파일들을 읽고 쓸 수 있다. NFS는 마운트 할 때 사용하는 파일 시스템 프로토콜을 말함.
- NFS : 리눅스 서버
CIFS : 윈도우 서버
ncloud 이용하기 - NAS 생성
1. NAS 볼륨 설정
- NFS : 리눅스 서버에서 마운트
- CIFS : Windows 서버에서 마운트
2. 접근 제어 설정
- 전체 서버에 있던 서버를 ACL 설정으로 옮겨준다.
3. 볼륨 생성 완료 후 마운트 정보 확인
4. NFS 관련 패키지 설치
5. rpcbind 서비스 시작
systemctl start rpcbind
systemctl enable rpcbind
- NFS 클라이엉ㄴ트에 rpcbind 서비스를 시작해야 정사억으로 NFS 마운트가 가능하다.
6. 마운트 포인트 생성 후 NAS 볼륨 마운트
mkdir /nas
mount -t nfs { 마운트 정보 } /nas
vi /etc/fstab
fstab을 수정해서 마운트 정보를 저장해주자.
df -h
를 사용해서 추가된 것을 확인할 수 있다.
서버를 생성해서 파일 공유되는지 확인
1. 서버 생성
2. 접근 제어 설정
3. 두 개의 서버 NAS 볼륨 마운트
- 새로 생성한 서버에서도 위와 같이 패키지를 설치하고 rpcbind 서비스를 시작해주자.
4. 양 서버가 연결됐는지 확인하기.
- 먼저
test
서버로 돌아가 파일을 두개 생성했다.
만약 두 서버의 nas
폴더가 공유되어 있다면, test2
서버의 nas
폴더에서도 이 두개의 파일을 확인할 수 있어야한다.
- 확인할 수 있다.
- 이것으로
test
test2
서버의 nas
폴더는 연결되어 있는 것을 확인할 수 있다.
한 번 더 실험해보자.
스냅샷과 이벤트
스냅샷
- 스냅샷은 특정 시간, 특정 목표의 상태를 포착해 찍어두는 것으로
특정 시간에 원하는 데이터를 사진으로 찍어서 보관하는 것이다.
- 데이터 백업 등의 수단으로 활용할 수 있다.
이벤트
- NAS 볼륨 사용량 임계치를 설정하고 이벤트 발생 시 통보 받는 것.
- NAS는 결국 공유 폴더.
작업 중에 공유 폴더가 가득 차서 작업에 차질이 빚어지는 일이 생기지 않도록 경고를 전송할 임계치와, 임계치 지속시간을 미리 설정해 두는 것.
리눅스 서버에서 그냥 구축해보기
1. 서버 생성하기
- 서버를 두 개 생성한다. 서버를 서로 연결하는 작업이기 때문.
- 서버와 클라이언트를 지정하자.
test1
를 호스트로, test2
를 클라이언트로 한다.
- 호스트 서버와 클라이언트 서버를 확인해준다.
2. 호스트 서버 접속
- test 1 서버, 호스트 서버에 PuTTY로 접속해준다.
3. NFS 패키지 설치
yum -y install nfs-utils
명령어를 이용해 NFS 패키지를 설치해준다.
rpcbind
패키지가 자동으로 설치되지만, 혹시 안된 경우 따로 설치해줄 수 있다.
# rpm -qa | grep nfs
# rpm -qa | grep rpcbind
명령어를 이용해 패키지가 설치되었는지 확인할 수 있다.
4. 공유할 디렉토리 생성 & 권한
- nfsdir 디렉토리 안에
nfstest
란 파일을 만들고, 파일 내용을 출력해보았다.
- 파일 권한을 주자.
- 모든 사람이 보고 수정할 수 있게 하려면 안에 파일도 권한을 줘야하기 때문에
-R
옵션을 사용.
# chmod -R 777 /nfsdir/
chmod
- 파일 및 폴더 권한 바꾸는 명령어
chmod -help
를 사용해서 더 많은 옵션을 볼 수 있다.
chmod {option} {8진수} {대상}
- 많이 쓰이는 것은
-R(recursive)
로 하위 디렉토리나 파일 모두 chmod 설정을 적용한다는 것이다.
- 8진수는 1, 2, 4의 조합으로 이루어진다.
1은 실행권한 / 2는 쓰기 권한 / 4는 읽기 권한을 나타낸다.
- 대상은 권한을 부여할 폴더나 파일 명을 입력하면 된다.
- 예제
chmod -R 777 filename
폴더 권한을 다음 예제처럼 쓰면 모든 사용자가 쓰기, 읽기, 실행하도록 바꿀 수 있다.
- 여기서 여기서 777은 rwx(user 권한) rwx(group 권한) rwx(other 권한) 으로 r: 읽기권한, w: 쓰기권한 x: 실행권한 이라 부른다.
- 예제처럼 777을 넣으면 user, group, other에게 모든 권한을 전부 준다는 의미이며, user권한(1+2+4), group권한(1+2+4), other권한(1+2+4)을 모두 주는 것이다.
5. 공유 디렉토리 설정
/etc/exports
설정파일을 수정해보자.
# vi /etc/exports
# /nfsdir { 클라이언트 서버 IP }(rw,sync)
입력 후 wq를 사용해서 나와준다.
- 공유할 디렉토리의 경로 작성.
- 허용하고 싶은 클라이언트 IP를 넣어서 작성해주면 된다.
모든 IP를 접속하게 해주고 싶으면 # /nfsdir *(rw,sync)
IP 대역을 접근하게 해주고 싶으면 # /nfsdir 10.~~(rw,sync)
을 입력하면 된다.
- rw는 권한에 있는 것과 같이 r(read), w(write)를 할 수 있는 옵션
sync는 default(기본)으로 NFS가 쓰기 작업 완료하면 디스크를 동기화하는 옵션이다.
6. 방화벽 설정
# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-port=111/tcp
# firewall-cmd --permanent --add-port=111/udp
# firewall-cmd --reload
FirewallD is not running
이라는 에러메시지가 출력되긴 했지만,
systemctl start firewalld
명령어를 입력해서 해결할 수 있다.
7. NFS 서비스 시작
# systemctl start nfs
NFS 서비스 시작
# systemctl enable nfs-server.service
부팅 시 자동으로 NFS 시작
# systemctl status nfs
으로 서비스가 제대로 작동 중인지 확인할 수 있음.
8. exports 설정 적용
NTP
1. 타임 서버란?
- 기준이 되는 시계로부터 실제 시간을 읽어오고, 컴퓨터 네트웤을 이용해 클라이언트에게 이 정보를 전송하는 서버 컴퓨터
인터넷 서버가 될수도, 따로 구축한 로컬 네트워크 타임 서버가 될수도 있다.
- 타임 서버가 사용하는 기준 시간은 인터넷 상의 또다른 타임 서버에서 가져온 시간일수도, 더 정밀도가 높은 시계에서 가져온 시간일수도 있다. 가장 보편적인 실시간 소스는 GPS 또는 GPS master clock.
- 시간 정보 전송과 동기화를 위해 가장 널리 사용되는 프로토콜은 NTP(Network Time Protocol) 이다.
2. NTP란?
- NTP는 네트워크로 연결되어 있는 장비들 간의 시간을 동기화하는데 사용하는 프로토콜이다. 어떤 서버를 기준으로 서버와 연결된 장비 사이에 동일한 시간으로 교환을 할 수 있는 프로토콜으로, 타임 서버와의 시간 정보 교환과 동기화를 위해 가장 널리 사용되는 프로토콜이라 할 수 있다.
장비들 간 시간이 맞지 않으면 어떤 일이 발생할까?
- 서비스 문제가 발생했을 때 시간이 어긋나 있으면 발생한 현상을 시간대 별로 나열할 수 없다.
로그 시간이 틀어져 정확한 원인 파악이 어려워짐.
NTP 통신 방식의 필요성과 단점
필요성
- 데이터 손실 방지
각각의 작업 PC 시간이 다른 상태에서 작업 수정, 저장을 한다면 데이터의 손실이 발생할 수 있다.
- 로그에 대한 분석 효율 상승
로그의 시간이 서버 혹은 PC의 시간과 일치하지 않는다면 신뢰도가 떨어진다. NTP통신을 통한 시간의 동기화는 로그의 신뢰도를 높여 분석의 효율을 향상시킨다.
- 예약 작업의 실행 불가 상황 방지
예약된 작업의 실행은 필수적인 요소이다. 만약 시간이 일치하지 않아 예약된 작업이 실행되지 않는다면 중요한 작업에 문제가 발생할 수 있으며 NTP 통신을 통해 동기화를 한다면 이런 상황을 예방할 수 있다.
단점
- 외부 서버를 통해 시간을 동기화함으로 보안상 취약한 부분 발생
일반적으로 NPT 서버는 외부 NTP 서버를 참조하게 되고, 이런 직접적 연결 과정으로 인해 보안상 취약한 부분이 발생한다.
이런 보안상 문제점을 보완하기 위해 대부분 외부 NTP 서버를 직접 참조하지 않고, 별도의 NTP 서버를 타임서버로 이용하여 시간을 동기화하는 방식을 사용한다.
NTP 계층구조 (Stratum)
- NTP 서버는 1~15단계까지의 계층구조로 되어있다.
- Stratum 0 : 가장 상위 계층. 고정밀 장비를 이용, 정확한 시간 신호를 발생시킨다. NTP 프로토콜과는 상관이 없으며, 직접적인 시간 서비스를 하는 것이 아닌 Stratum 1으로 시간을 전송한다.
- Stratum 1 : 0으로 시간정보를 받아 동기화하고 Stratum 2 서버에 전달하는 역할을 한다. NTP 프로토콜에서 최상위층이라고 보면 된다
- Stratum 2: 1으로부터 시간 정보를 받아 3서버에 전달한다. 일반적인 시간 동기화 요청에 사용하는 최상위 NTP 서버이다.
- 이런식으로 3, 4, ..., n이 쭉 이어져있다. 뒤로 갈수록 시간 정확도가 낮아진다.
- 레벨이 낮을 수록 시간 정보가 정밀하므로 클라이언트가 Stratum 1에서 시간 정보를 가져오면 더 정확한 시간으로 동기화 할 수 있다고 생각할 수 있으나, 일반적으로 NTP 구성의 목적은 정확한 시간보다는 시간 동기화 자체에 있기 때문에 굳이 Stratum 1 타임서버에 연결할 필요가 없다.
- 개인용 PC의 표준 시각 동기는 Stratum 2나 3을 통해 진행되는 것이 추천된다.
NTP 통신 흐름 (UDP)
- NTP 통신은 UDP 기반으로 이루어진다.
- 시간 정보를 제공하는 NTP 서버는
UDP의 123번 포트
에 띄워놓아야한다.
- 클라이언트들은 NTP 서버가 있는 PC의
UDP 123번 포트
로 동기화에 이용할 기준 시간을 요청, 해당 시간으로 PC 시스템 시간을 동기화한다.
- 폐쇄망(사설망)을 사용하지 않는 일반 환경에서는 NTP 서버를 따로 구축할 필요가 없다. 국제적으로 표준 시간을 동기화하기 위한 서버가 이미 구축되어 있기 때문.
NTP 서버 구축하기
1. 타임서버 IP 주소 파악
2. NTP 패키지 설치
- 타임 서버가 될 서버에 ntp 설치.
yum install -y ntp
3. NTP 서버 설정
/etc/ntp.conf
파일을 수정해주자.
1) restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
의 주석을 해제한다. → 현재 클라이언트가 존재하는 네트워크 서버들이 NTP 서버에 시간을 요청할 수 있도록 한다.
2) 우선순위가 높은 타임서버들은 주석처리한다.
4. 보안 설정
- NTP는 UDP 123 포트를 사용한다.
방화벽 포트를 해제해주고, 서비스를 구동하자.
- 방화벽 데몬 실행
- 방화벽 설정을 해주지 않아, 포트가 열리지 않았다.
- 방화벽 설정을 통해 ntp 서비스와 서비스 포트를 허용한다.
포트 추가/변경, IP 추가/변경 은 --reload
명령어로 실행해야 반영된다는 점을 유의하자.
firewall-cmd --permanent --add-port=123/udp
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload
firewall-cmd --list-all
- 서비스가 적용되었는지 확인.
# systemctl start ntpd
: ntpd 데몬 구동
# systemctl enable ntpd
: 재부팅 시 자동 실행 설정
/etc/ntp.conf
파일에서 타임 서버의 IP 주소를 기입해준다.
ntpq -p
를 사용하면 에러가 발생한다.
해결해줘 미래의 나!