티스토리 뷰

 회사에서 프로젝트 운영 서버(Production)를 셋팅할 일이 생겼다. 이번엔 스펙이 좀 빵빵하다.

 

n2-standard-16 (16 vCPU, 64GB RAM). 여기에 고성능 I/O를 위한 Local SSD와 대용량 파일 저장을 위한 Cloud Storage까지 붙여야 하는 미션.

 

단순히 인스턴스 하나 띄우는 게 아니라, VPC부터 스토리지 마운트, 사용자 권한까지 풀코스로 셋팅한 과정을 기록해 둔다.


1. VPC 네트워크 생성

기본(default) VPC는 왠지 쓰기 싫다. 나중에 인스턴스가 늘어날 것을 대비해 커스텀 VPC를 팠다.

  • 이름: ###
  • 서브넷: 10.0.0.0/24 (254개면 충분하겠지)
  • 리전: ###
  • 방화벽:
    • SSH(22)는 내 IP 혹은 관리자 IP만 허용.
    • 내부 통신(10.0.0.0/24)은 다 열어둠 (나중에 DB랑 통신해야 하니까).

2. 고정 IP 예약

서버 재부팅할 때마다 IP 바뀌면 DNS 설정 다시 해야 하고... 끔찍하다. 미리 고정 IP를 하나 샀다. 주의할 점은 VM에 바로 꽂을 거라 '전역(Global)'이 아니라 '리전(Regional)'으로 만들어야 한다는 것.

  • 메뉴: VPC 네트워크 > IP 주소 > 외부 정적 IP 예약
  • 유형: 리전
  • 등급: 프리미엄

3. 인스턴스 생성 (The Beast)

이제 VM을 만든다. 스펙은 화려하다.

  • Machine: n2-standard-16
  • OS: Ubuntu 22.04 LTS (제일 무난)
  • Disk 구성:
    1. Boot Disk: 512GB (OS랑 DB 데이터용. 넉넉하게 잡음)
    2. Local SSD: 375GB x 3개 (총 1.1TB)
      • 이게 핵심이다. NVMe 인터페이스라 속도가 미쳤음.
  • 네트워크: 아까 만든 VPC 선택하고, IP도 예약해둔 고정 IP 선택.
  • API 액세스: '모든 Cloud API에 대한 전체 액세스 허용' (이거 안 하면 나중에 GCS 마운트 안 됨)

4. Local SSD 3개를 하나로 묶기 (RAID 0)

서버에 접속(ssh)해서 lsblk를 때려보니 sdb, sdc, sdd 이렇게 3개가 덜렁 있다. 따로따로 쓰면 관리하기 귀찮으니까 mdadm으로 RAID 0 구성을 했다. 속도 3배, 안정성은... 뭐 휘발성 데이터만 넣을 거니까.

# 1. RAID 툴 설치
sudo apt-get update && sudo apt-get install mdadm -y

# 2. 3놈을 하나(/dev/md0)로 합체
sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# 3. 포맷 (ext4)
sudo mkfs.ext4 -F /dev/md0

# 4. 마운트
sudo mkdir -p /mnt/fast_scratch
sudo mount /dev/md0 /mnt/fast_scratch
sudo chmod a+w /mnt/fast_scratch

 이제 /mnt/fast_scratch는 1.1TB짜리 슈퍼 속도 디스크가 되었다.

주의: 여기 데이터는 인스턴스 '중지' 누르면 다 날아간다. 임시 파일용으로만 써야 함.


5. Cloud Storage 마운트

10TB 이상 데이터가 쌓일 예정이라 로컬 디스크로는 감당이 안 된다. GCS 버킷(data-indonesia-pqms-prod)을 만들고 서버에 폴더처럼 마운트했다.

 

사용 툴은 gcsfuse.

# gcsfuse 설치 후...
sudo mkdir -p /mnt/gcs_data

처음에 그냥 마운트 했더니 권한 에러(fusermount: exit status 1)가 났다. 알고 보니 allow_other 옵션을 주려면 sudo가 필요했고, 톰캣(Tomcat) 같은 다른 계정이 쓰게 하려면 권한을 777로 줘야 속 편하다.

 

최종 성공 명령어:

sudo gcsfuse -o allow_other --file-mode 777 --dir-mode 777 data-indonesia-pqms-prod /mnt/gcs_data

이제 df -h 찍어보면 용량이 1.0P (1페타바이트...)로 나온다. 든든하다.


6. 재부팅 대비 (fstab 설정)

서버 리부팅 됐는데 마운트 풀려있으면 서비스 장애다. /etc/fstab에 박아넣어서 자동 마운트 되게 설정.

sudo nano /etc/fstab
# Local SSD
/dev/md0 /mnt/fast_scratch ext4 defaults,nofail 0 0

# Cloud Storage
data-indonesia-pqms-prod /mnt/gcs_data gcsfuse rw,allow_other,file_mode=777,dir_mode=777 0 0

7. 사용자 계정 정리

보안상 root 로그인은 막고, 용도별로 계정을 팠다.

  • admin: 관리자용. Sudo 권한 줌.
  • tomcat: WAS 돌릴 계정. 로그인은 막음 (passwd -l).
  • 접속은 오로지 SSH Key 방식으로만.

마무리

세팅 끝.

 

df -h로 디스크 빵빵하게 잡힌 거 확인하니 마음이 편안하다. 이제 여기에 Node.js랑 톰캣 올리고 배포할 일만 남았다.

 

핵심 요약:

  1. GCP Local SSD는 빠르지만, 인스턴스 끄면 데이터 날아감. (DB 원본 저장 금지)
  2. GCS Fuse 마운트 할 땐 권한(777)이랑 allow_other 옵션 신경 쓰자.
  3. 인프라 셋팅은 역시 처음에 깔끔하게 해놔야 나중에 고생 안 함.

 

끝!

반응형
Comments