Naver_Cloud/Storage

[NCP] 16. NAS

맨날화남 2023. 10. 16. 15:46

1. NAS

  • NAS는 네트워크로 연결하는 저장 공간으로, 다수의 사용자가 데이터를 공유할 때 적합한 서비스입니다.
  • NAS 볼륨을 생성한 후 서버에 마운트하면 복수의 서버에서 안정적으로 데이터를 공유할 수 있습니다.

 

 

1-1. NAS 특징

1. 서버 간 편리한 데이터 공유

  • NAS에 저장한 데이터를 NAS 볼륨과 연결한 여러 개의 서버와 공유할 수 있습니다.
  • 여러 서버로 구성된 특정 서비스에서 데이터를 공유해 사용할 수 있으며, 인증된 서버들만 접근이 가능합니다.

ACL에 등록된 서버들만 접근이 가능하다.

 

2. 효율적인 데이터 저장 및 비용 관리

  • 기본 저장용량이 부족한 경우 최대 10TB까지 용량을 확장할 수 있어, 사용환경에 따라 다양한 용량의 NAS 볼륨을 생성할 수 있습니다.
  • 필요한 용량의 NAS 볼륨을 빠르게 생성 및 삭제할 수 있으며, 이를 통해 불필요한 스토리지 유지 비용을 절약할 수 있습니다.

 

3. 안정적인 스토리지 구성

  • NAS 서비스를 제공하는 스토리지는 자체적으로 이중화된 컨트롤러 및 디스크 어레이(Disk Array) Raid로 구성되어 있어 높은 내구성과 가용성을 제공하며, 스토리지 장비의 특정 영역에서 장애가 발생하더라도 서비스의 연속성을 보장합니다.
  • 또한, 서버에서 NAS 볼륨을 마운트한 후 접근 제어 및 CIFS 인증을 통해 보안을 강화할 수 있습니다.

 

4. 편리한 데이터 관리

  • 생성된 볼륨의 디스크 사용량을 모니터링할 수 있으며, 모니터링 기능을 기반으로 디스크 사용량에 대해 이벤트를 설정할 수도 있습니다.
  • NAS 볼륨에 대해 디스크 사용량 임계치와 통보 대상자를 설정하면 임계치 초과 시 이벤트 상황이 통보 대상자의 SMS 또는 이메일로 통보됩니다.

 

5. 데이터 손실 방지

  • 스냅샷 기능을 사용해 데이터를 복사, 보관 및 복원할 수 있습니다.
  • 스냅샷은 사용자가 생성한 NAS 볼륨 용량 내에서 원하는 크기로 설정할 수 있으며, 자동 생성 주기를 설정할 수도 있습니다.
  • 또한, 필요시 즉시 스냅샷을 생성할 수도 있으므로 데이터 변경 사항을 편리하게 보관할 수 있습니다.
  • 보관했던 스냅샷을 선택해 복구를 요청하면 즉시 데이터가 복구됩니다.

설정에 따라 매일 or 매주 간격으로 스냅샷 생성

 

 

1-2. NAS 생성

1. Service -> Storage -> NAS를 클릭합니다.

 

2. NAS 볼륨 생성을 클릭합니다.

 

3. NAS 볼륨 생성에 대한 정보를 입력하고 다음을 클릭합니다.

# NAS가 배치될 Zone을 선택합니다. (KR-1 or KR-2)
# 마운트는 Zone과 상관없이 가능합니다.
Zone 선택 : KR-2

# NAS 볼륨의 이름을 정합니다.
NAS 볼륨 이름 : web

# 최소 500GB ~ 최대 10,000GB까지 선택 가능하며, 범위 내에서 자유롭게 증감, 감소가 가능
# 단 감소시 만약을 위해 데이터는 백업해두는걸 추천합니다.
볼륨 용량 설정 : 500

# NFS (Network File System)
# NFS는 주로 UNIX 및 UNIX 계열 운영체제 (Linux 포함)에서 사용됩니다.
# 클라이언트 및 서버 간에 파일 및 디렉터리를 공유하기 위한 프로토콜로,
# 네트워크를 통해 파일 시스템을 마치 로컬 파일 시스템처럼 접근할 수 있도록 합니다.
# CIFS (Common Internet File System)
# CIFS는 Windows 운영체제에서 사용됩니다. 
# 파일 및 프린터 공유를 위한 프로토콜로, Windows 환경에서 파일 및 디렉터리를 네트워크를 통해 공유하는 데 사용됩니다.
# Windows 인증 및 권한 관리와 같은 Windows 특정 기능을 지원합니다.
프로토콜 설정 : NFS

# 볼륨 암호화는 볼륨별로 적용되며, 최초 생성 시에만 설정할 수 있습니다.
# NAS의 볼륨 암호화 기능은 볼륨 레벨의 소프트웨어 기반 암호화 기술을 사용해 저장되는 모든 데이터를 암호화할 수 있습니다.
# 고유 암호화 키(Unique encryption key): 스토리지 시스템에서 자체 관리(볼륨별, AES-256 알고리즘 적용)
# 암호화 모듈(CryptoMod): FIPS-140-2 레벨 1 준수
볼륨 암호화 : X

# 볼륨이 반납되는 것을 방지합니다.
볼륨 반납 보호 : 해제

 

4. NAS에는 접근 권한을 가진 서버들만이 접근이 가능합니다.

https://angrycloud.tistory.com/34에서 생성했던 웹서버 2대에 읽기,쓰기 권한을 추가해주겠습니다.

 

5. 접근 권한이 추가된걸 확인하고 다음을 클릭합니다. 

 

6. 정보들을 확인하고 볼륨 생성을 클릭합니다.

 

7. 확인을 클릭합니다.

 

8. NAS Volume이 생성되었습니다. ACL 설정을 확인하고 마운트 정보는 복사해둡니다.

 

 

1-3. NAS 마운트

1. 웹서버에 공인IP가 달린 Bastion 서버를 통해 접속하거나 공인IP를 추가해서 직접 접속합니다.

Public IP : https://angrycloud.tistory.com/22

저는 서버에 공인IP를 추가했습니다.

 

2. NFS 사용을 위해 nfs 관련 패키지를 설치합니다.

nfs-utils 패키지는 NFS를 설정하고 관리하는 데 필요한 핵심 도구를 제공하며, NFS를 사용할려면 이 패키지를 설치해야 합니다.

# CentOS 6.x 이상
yum -y install nfs-utils

# Ubuntu 서버
apt-get install nfs-common

 

3. rpcbind를 시작하고 부팅시 자동시작 되도록 해줍니다.

# rpcbind 시작
systemctl start rpcbind

# rpcbind의 상태 확인
systemctl status rpcbind

# 부팅 시 rpcbind 자동 시작
systemctl enable rpcbind

# 서비스 목록을 불러오고 그 중 rpcbind를 출력
systemctl list-unit-files --type service | grep rpcbind

 

4. NAS를 마운트 할 디렉토리를 생성하고 NAS의 마운트 정보를 통해 마운트 합니다.

# NAS를 마운트 할 디렉토리 생성
mkdir /web01

# NAS 생성 후 확인했던 마운트 정보를 통해 방금 생성한 web01에 마운트
# mount -t nfs -o vers=3 'NAS 마운트 정보' '마운트 할 디렉토리 경로'
mount -t nfs -o vers=3 169.254.84.48:/n2633384_web /web01

 

5. 마운트가 되었는지 확인합니다.

# df : 디스크 사용 현황을 표시하는 명령어입니다.
# -h : 용량을 보기 편하게 KB, MB, GB 등과 같은 단위로 표시합니다.
df -h

 

6. 오토스케일링 된 서버라 재부팅은 반납을 의미해서 할 필요 없지만 fstab에 설정을 추가해 부팅 시에도 자동 마운트가 되도록 설정을 해보겠습니다.

# fstab(File System Table) : 부팅 시에 마운트할 파일 시스템을 정의하고 구성하는데 사용됩니다.
vi /etc/fstab

# NAS의 마운트 정보와 마운트 할 디렉토리 경로를 넣어줍니다.
# 'NAS 마운트 정보' '마운트 할 디렉토리 경로' nfs vers=3,defaults 0 0
169.254.84.48:/n2633384_web /web01 nfs vers=3,defaults 0 0

 

7. 다른 웹 서버에도 똑같이 NAS를 마운트 시켜줍니다. (마운트 할 디렉토리는 /web02로 하겠습니다)

 

 

1-4. 테스트

1. 우선 웹서버에서 공통으로 쓸 페이지를 만들겠습니다.

1번 서버와 2번 서버 어디서 작업하든 상관없고 전 1번 서버에서 파일을 생성했습니다.

vi /web01/index.php

<!DOCTYPE html>
<html>
  <head>
    <title>Welcome to the NCP</title>
  </head>
  <body>
        <?php
        echo "Host Name: <b>";
        echo exec("hostname");
        echo "</b></p>";
        echo "Private IP: <b>";
        echo exec("hostname -I");
        echo "</b></p>";
        $file_server_path = realpath(__FILE__);
        echo "현재 문서의 절대 경로 : <b>$file_server_path</b>";
        ?>
  </body>
</html>

 

2. 2번 서버에 접속하여 NAS를 마운트한 /web02로 들어가보면 1번 서버에서 생성한 index.php가 보입니다.

cd /web02
ls

 

2. 이제 php를 사용하기 위해 1번과 2번 서버 모두 php를 설치합니다.

yum -y install php

 

3. 서버01과 02에서 php를 처리할 수 있게 nginx.conf 파일을 수정해줍니다.

cd /etc/nginx
vi nginx.conf

# Nginx에게 인덱스 파일로 "index.php"를 사용하도록 지시합니다.
# 디렉토리에 접근하는 요청이 있고 해당 디렉토리에 "index.php" 파일이 있다면
# Nginx는 "index.php" 파일을 사용하여 요청을 처리합니다.
index   index.php;

# nginx의 root 디렉토리 위치를 index.php를 생성해둔 Nas로 변경합니다.
# 1번 서버는 /web01에 마운트 했으니 /web01, 2번 서버는 /web02에 마운트 했으니 /web02로 해줍니다.
root         /web01;

 

4. 수정이 끝났다면 nginx를 재실행하고 웹에 접속해서 확인합니다.

systemctl restart nginx

 

5. 하나의 NAS를 두 서버에 마운트하고 NAS에 있는 index.php를 사용하게했기 때문에 이렇게 두 서버에서 하나의 index.php를 사용하고 있는 것을 볼 수 있습니다.

 

 

 

2. 스냅샷

1. Service -> Storage -> NAS를 클릭합니다.

 

2. NAS를 선택 후 스냅샷 설정을 클릭합니다.

 

3. 스냅샷 설정을 하고 확인을 클릭합니다.

# 해당 옵션을 선택해야 하단에 용량과 주기 설정이 나옵니다.
스냅샷 생성을 수행합니다.

# NAS 볼륨의 일부 용량을 스냅샷으로 할당합니다.
# 1,5,10,15,20%로 설정하거나 기타에서 원하는 용량을 %로 할당할 수 있습니다.
20

# 스냅샷 자동 생성의 주기를 설정합니다.
# 날짜는 매일 또는 매주, 시간은 정각으로만 설정할 수 있습니다.
매일 00:00

 

4. NAS 메뉴에서 Snapshot 탭을 클릭하면 방금 만든 스냅샷 설정이 보입니다.

 

5. 스냅샷을 매일 오전 12시에 생성하게 해놨기에 스냅샷이 없습니다.

스냅샷 즉시 생성을 통해 스냅샷을 생성해보겠습니다.

 

6. 확인을 클릭합니다.

 

7. 다시 NAS를 선택해보면 스냅샷이 생성되었습니다.

생성 주기에 따라 자동 생성된 스냅샷은 7개까지 보관되며, 7개 초과 시 오래된 스냅샷부터 삭제됩니다.

스냅샷 즉시 생성을 통해 생성한 스냅샷은 스냅샷 용량이 허용하는 한도 내에서 제한 없이 보관됩니다.

또한 NAS 용량을 많이 사용하여 스냅샷으로 할당해둔 용량까지 쓰게 될 경우 스냅샷이 지워지게 되므로 주의가 필요합니다.

 

8. 복구 테스트를 해보기 전에 스냅샷을 몇개 더 생성하겠습니다.

스냅샷을 총 3개 생성했습니다.

 

9. 서버에 접속해서 NAS에 있는 Index.php를 삭제합니다.

# 서버에 따라 NAS가 마운트 된 디렉토리로 이동합니다.
cd /web01
or
cd /web02

# index.php를 삭제합니다.
rm -rf index.php​

 

10. 생성했던 3개의 스냅샷 중 두번째 스냅샷으로 복구를 해보겠습니다.

 

11. 확인을 클릭합니다.

 

12. 스냅샷 목록을 다시 확인해보면 스냅샷이 하나 사라졌습니다.

NAS의 스냅샷은 복구를 수행할 시 선택된 스냅샷의 생성일시 후에 생성된 스냅샷들은 전부 지워지니 복구시 신중하게 할 필요가 있습니다.

 

13. 서버에서 디렉토리를 확인해보니 index.php가 다시 생성되었습니다.

 

 

 

3. 이벤트 설정

1. NAS의 Volume 탭에서 NAS 선택 -> 볼륨 설정을 클릭합니다.

 

2. 이벤트 설정을 클릭합니다.

 

3. 선택한 NAS가 맞는지 이름을 확인하고 다음을 클릭합니다.

 

4. 위에서 스냅샷으로 20%(100GB)를 할당했었습니다.

용량이 차기 전에 알람을 받고 용량을 증설할 수 있어야하니 임계치를 50%, 지속시간은 5분(5분 단위로 설정 가능)으로 설정하고 추가를 클릭하고 이벤트가 추가되었으면 다음을 클릭합니다.

*지속시간은 5분 단위로 입력 가능합니다.

*스냅샷 용량은 데이터 사용 용량이 포함이 되지 않기 때문에 현재 사용 가능 용량인 400GB의 50%인 200GB를 초과할시 이벤트 알람이 발생합니다.

*밑에서 테스트파일로 260GB를 생성하니 생성에 시간이 너무 오래 걸렸습니다. 테스트를 빨리 하고 싶으신 분은 임계치를 더욱 낮게 해주세요.

 

5. 통보 대상 설정에서는 https://angrycloud.tistory.com/32에서 생성했던 담당자를 그대로 선택하고 추가 -> 다음을 클릭합니다.

통보 대상을 생성하지 않으신 분은 통보대상관리로 들어가 담당자를 추가해주세요.

 

6. 설정들을 확인하고 확인을 클릭합니다.

 

7. 확인을 클릭합니다.

 

8. 이벤트 설정이 끝났으니 이제 NAS에 더미파일을 생성하겠습니다.

NAS가 연결된 서버에 접속하여 dd 명령어로 더미파일을 생성합니다.

# 저는 NAS를 /web01에 마운트 시켰던 서버에서 작업하겠습니다.
# 500G NAS에 50% 이벤트를 걸었으니 260G로 생성합니다.

# dd : 블록 단위로 파일을 복사하거나 파일 변환을 할 수 있는 명령어

# if=/dev/zero : /dev/zero는 시스템에서 제로(0)로 채워진 가상 파일입니다.
#                이 파일을 입력으로 사용하겠다고 지정합니다.

# of=/web01/testfile : /web01/testfile은 출력 파일의 경로와 이름입니다.
#                      dd 명령을 통해 생성된 데이터가 이 파일에 쓰여집니다.

# bs=1G : bs는 "block size"의 약자로, 한 번에 읽고 쓸 데이터 블록의 크기를 지정합니다.
#         여기서는 1GB 크기의 블록을 사용하여 데이터를 생성합니다.

# count=260 : count는 설정한 bs 크기로 몇 번 작업을 수행할지를 지정합니다.
#             이 경우 260번의 작업을 수행하여 260개의 1GB 블록을 읽어와서 출력 파일에 씁니다.

dd if=/dev/zero of=/web01/testfile bs=1G count=260

용량 때문에 시간이 걸리니 파일 생성이 끝날때까지 기다립니다.

 

9. 더미파일 생성이 끝나면 NAS의 용량을 확인하고 이벤트에서 설정했던 5분을 기다립니다.

df -h

 

10. NAS의 사용량이 50%(200GB)를 넘어 이벤트 알람 문자가 오지만 반복적으로는 오지 않습니다.

이렇게 이벤트 알람을 통해 용량을 관리하여 스냅샷이 지워지지 않도록 미리 용량을 증설할 수 있습니다.

 

 

 

4. 용량 증설 및 감소

1. NAS Volume 탭에서 NAS를 선택하고 볼륨 설정을 클릭합니다.

 

2. 용량 변경을 클릭합니다.

 

3. NAS의 용량은 500GB에서 10,000GB까지 증설할 수 있으며 100GB 단위로 조절할 수 있습니다.

600GB로 설정 후 확인을 클릭합니다.

 

4. NAS의 볼륨이 600GB로 늘어나고 NAS 20%로 할당했던 스냅샷 또한 120GB로 늘어났습니다.

 

5. 서버로 돌아가 용량이 늘어났는지 확인합니다.

용량이 부족할시 지금처럼 용량을 증설하여 사용하다가 파일들을 정리해서 여유가 생겼다면 다시 NAS 용량을 줄이도록 합시다.

cd /web01
ls
rm -rf testfile

 

6. NAS Volume 탭으로 돌아가 NAS를 선택하고 볼륨 설정을 클릭합니다.

 

7. 용량 변경을 클릭합니다.

 

8. 용량을 최소 용량인 500GB로 설정하고 확인을 클릭합니다.

*만약 NAS 안의 데이터가 설정할려는 용량보다 많다면 용량을 줄일 수 없습니다.

*데이터를 560GB를 사용중이라면 600GB까지만 감소 가능

 

9. NAS의 총 용량과 스냅샷 용량이 줄어들었습니다.

용량을 줄일때는 생성되어 있는 스냅샷 파일 용량에도 주의가 필요합니다.

 

10. 서버에서도 용량을 확인합니다.

 

 

여러 서버에서 동일한 데이터를 사용할 수 있게 해주고 ACL을 통한 보안, 자동 스냅샷, 자유로운 용량 증설 및 감소가 특징인 NAS를 생성해보았습니다.

다음 글에서는 서버에서 복잡한 설정을 할 필요없이; 콘솔에서 손쉽게 이중화와 백업 등을 수행하게 해주는 Cloud DB MySQL을 생성하고 3티어 연결을 해보겠습니다.

 

Cloud DB MySQL : 작성중