no image
OpenStack을 활용한 Local Cloud 구축 (1)
OpenStack이란 OpenStack은 가상화된 서버, 네트워크, 스토리지를 통합 관리하여 클라우드 인프라를 구축할 수 있도록 해주는 오픈 소스 플랫폼입니다. 주로 기업 내부의 프라이빗 클라우드 환경을 구축할 때 사용됩니다. 다음과 같은 주요 컴포넌트들이 존재합니다.컴포넌트 설명 Nova가상 머신(VM) 생성 및 관리 (컴퓨팅 자원 담당)Neutron네트워크 연결 설정 및 관리 (IP, 라우팅 등)Cinder블록 스토리지 제공 (VM용 디스크)GlanceVM 이미지 저장 및 관리Keystone인증과 권한 관리 (사용자 로그인 등)Horizon대시보드(UI) 제공Swift객체 스토리지 제공 (대용량 데이터 저장에 적합)Heat인프라 자동화 템플릿 (IaC, Infrastructure as Code)C..
2025.06.08
no image
[AWS] Global Accelerator를 이용한 Multi Region Clustuer
Global Accelerator란? https://aws.amazon.com/ko/global-accelerator/ 네트워크 가속 서비스 - AWS Global Accelerator - AWSAWS 글로벌 인프라의 성능, 보안 및 가용성을 활용하여 Global Accelerator 엣지 로케이션 중 하나에 사용자 트래픽을 온보드할 수 있습니다. 사용자는 정적 IP 주소를 통해 애플리케이션 엔드포인트에aws.amazon.com AWS Global Accelerator는 애플리케이션의 글로벌 사용자들에게 낮은 지연 시간, 높은 가용성, 그리고 향상된 네트워크 성능을 제공하기 위해 설계된 네트워크 서비스이다. AWS의 글로벌 네트워크 인프라를 활용하여 사용자의 요청을 최적의 엔드포인트(리전 또는 서비스)로..
2024.12.09
no image
[AWS] 가비아 도메인 구매 Route53 연결
개요 EC2로 서버를 열어서 사용하다 보면,  EC2에서 기본으로 제공하는 주소가 너무 길어서 불편함을 느낄 수밖에 없다.  또 해당 주소를 서비스를 배포함에 있어서 사용하는 것은 아무래도 무리가 있다. 따라서 가비아 사이트에서 도메인을 구매해 EC2 공인 IP를 연결해주도록 한다. 가비아 도메인 구매 https://www.gabia.com/ 웹을 넘어 클라우드로. 가비아그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브www.gabia.com   합리적인 가격의 후보군이 셋이였고 여기서 그나마 익숙한한 도메인인 .site 도메인을 선택하여 구매하였다.  Route 53 도메인 적용 Route 53은  AWS에서 제공하는 DNS 서비스이다. 이를 통해 사용자는 인터넷 도메인 이름을 웹 서버나 다른 AWS ..
2024.12.06
no image
[AWS] EC2 OOM 문제 예방
개요현재 사용하고 있는 인스턴스는 t2.micro이고 현재는 아직 OOM 문제를 발견하지는 못하였으나 서비스들을 완성하고 해당 환경에서 배포를 시작한다면 여러 개의 서비스를 올리는 특성상 OOM 문제를 맞닥뜨릴 것이라고 생각한다. 💡 OOM (Out Of Memory) 인스턴스에서 사용할 수 있는 메모리가 모두 소진되어 더 이상 할당할 수 없는 상태 따라서 사전에 예방책을 준비하기로 하였고 현재는 스왑 메모리를 사용하기로 결정하였다. 스왑 메모리를 사용하더라도 문제가 생긴다면 그때에는 인스턴스 업그레이드를 하기로 한다. 어느 정도의 비용이 발생하겠지만 최대한 비용 효율적으로 결정하겠다. 스왑 메모리 사용그렇다면 스왑이란 무엇인가? 스왑은 컴퓨터에서 주메모리가 부족할 때 사용할 수 있는 보조 저장 공간이..
2024.12.06

OpenStack이란

 

OpenStack은 가상화된 서버, 네트워크, 스토리지를 통합 관리하여 클라우드 인프라를 구축할 수 있도록 해주는 오픈 소스 플랫폼입니다. 주로 기업 내부의 프라이빗 클라우드 환경을 구축할 때 사용됩니다. 

 

 

다음과 같은 주요 컴포넌트들이 존재합니다.

컴포넌트 설명

 

Nova 가상 머신(VM) 생성 및 관리 (컴퓨팅 자원 담당)
Neutron 네트워크 연결 설정 및 관리 (IP, 라우팅 등)
Cinder 블록 스토리지 제공 (VM용 디스크)
Glance VM 이미지 저장 및 관리
Keystone 인증과 권한 관리 (사용자 로그인 등)
Horizon 대시보드(UI) 제공
Swift 객체 스토리지 제공 (대용량 데이터 저장에 적합)
Heat 인프라 자동화 템플릿 (IaC, Infrastructure as Code)
Ceilometer 모니터링 및 사용량 통계 수집

 

모듈식 구조이기에 필요한 기능만 선택하여 사용 가능합니다.

 

프로젝트 배경

클라우드 관련 공고들을 확인하는 과정에서 private cloud에 대해서도 알게되었고 그 과정에서 오픈스택이란 것을 알게 되었습니다. K8S 환경을 직접 구축했던 것처럼 Openstack 환경도 실제로 구축해보고 이해하고자 프로젝트를 진행하게 되었습니다. 

 

Node 설정

 

실습이 진행된 호스트 PC는 위와 같습니다.  2개의 Node를 생성해서 진행하였으며 각각 Compute, Controller입니다.

리눅스 이미지는 Ubuntu 22.04.5 live-server를 사용하였고, Controller 스펙은 4 core CPU, 4 GB RAM, 40 GB Storage

Compute 스펙은  4 core CPU, 2 GB RAM, 40 GB Storage으로 진행하였습니다. 

 

Nat Network 생성

 

 

Controller Node 네트워크 설정

 

 

어댑터 2는 브리지로 호스트 네트워크 사용합니다.

 

이후 다음과 같이 netplan을 수정하고 변경된 네트워크 설정을 적용합니다. 만약 enp0s8 네트워크에 IP가 할당된다면  /etc/netplan/50으로 시작하는 파일에서 dhcp4 할당을 false로 해주면 됩니다.

IP가 할당될 경우 호스트에서 직접 ssh 접근이 불가하고 할당된 IP로 접근해야 하기에 확인이 필요합니다.

cat << EOF > /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    enp0s3:
      addresses: [10.0.0.11/24]
      routes:
        - to: default
          via: 10.0.0.1
      nameservers:
        addresses: [8.8.8.8]
    enp0s8:
      dhcp4: no
      dhcp6: no
  version: 2
EOF
  
sudo netplan apply

 

이후에 포트 포워딩을 해주고 ssh 접근을 합니다.

 

 

 

Controller Node 기본 설정

  • 계정 sudo 권한 비밀번호 입력 해제
visudo
dlwpdnr213 ALL=(ALL:ALL) NOPASSWD:ALL

  • ssh 설정

virtual box 내부에선 복사 붙여넣기가 안됐기 때문에 추가적인 작업은 ssh 설정 완료 후 Mobaxterm에서 ssh 연결한 후 작업을 진행합니다.

vi /etc/ssh/sshd_config
port 7890
PasswordAuthentication yes
systemctl restart ssh
  • 미러 사이트 설정

필요 패키지들을 고속으로 설치하기 위해 카이스트에서 제공하는 국내 미러 사이트로 설정합니다.

cd /etc/apt
cp sources.list sources.list.v1
sed -i 's/http:\\/\\/kr.archive.ubuntu.com/https:\\/\\/ftp.kaist.ac.kr/g' /etc/apt/sources.list
apt update
  • 필요 유틸리티 설치 패키지 업데이트
apt install -y lrzsz net-tools zip bzip2 make gcc perl
apt upgrade -y
reboot
  • 커널 버전 자동 업데이트 금지, 보안 업데이트 자동 수행
apt-mark hold $(uname -r)
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades
  • timezone 설정

시간대를 서울로 변경합니다.

timedatectl set-timezone Asia/Seoul
timedatectl
  • nfs 설정

controller와 compute 노드 간 파일 공유를 위해 nfs를 통해 /nfs 디렉토리를 공유하도록 설정합니다. Controller가 nfs 서버 역할을 맡습니다.

apt install -y nfs-kernel-server nfs-common
mkdir -p /nfs/
chown nobody:nogroup /nfs

echo "/nfs    10.0.0.0/24(rw,all_squash,sync,no_subtree_check)" >> /etc/exports
exportfs -avr

showmount -e
  • /etc/hosts 수정
vi /etc/hosts

cp /etc/hosts /nfs/

 

Compute Node 생성

compute Node는 기존에 생성했었던 controller node를 복제하는 것에서 출발합니다.

 

 

 

  • host이름 변경
hostnamectl

sudo hostnamectl set-hostname compute
  • netplan 수정

netplan을 수정하여 compute 노드에 10.0.0.31 IP 주소를 할당하고, NAT 네트워크에 포트포워딩 규칙을 추가해줍니다.

 

 

 

  • nfs 설정

이후 compute 노드의 /nfs 디렉토리에 controller 노드의 /nfs 디렉토리를 마운트합니다

echo "10.0.0.11:/nfs	/nfs	nfs	noauto	0	0" >> /etc/fstab

mount /nfs
mount -l | grep nfs
  • 서로 간의 통신 확인

 

 

ping 또한 정상적으로 되는 것을 확인 가능합니다.

 

기본적인 노드 설정과 생성이 완료되었습니다. 오픈스택을 구축하기 위한 설정은 다음 포스팅에서 진행하겠습니다.

Global Accelerator란?

 

https://aws.amazon.com/ko/global-accelerator/

 

네트워크 가속 서비스 - AWS Global Accelerator - AWS

AWS 글로벌 인프라의 성능, 보안 및 가용성을 활용하여 Global Accelerator 엣지 로케이션 중 하나에 사용자 트래픽을 온보드할 수 있습니다. 사용자는 정적 IP 주소를 통해 애플리케이션 엔드포인트에

aws.amazon.com

 

AWS Global Accelerator는 애플리케이션의 글로벌 사용자들에게 낮은 지연 시간, 높은 가용성, 그리고 향상된 네트워크 성능을 제공하기 위해 설계된 네트워크 서비스이다.

 

AWS의 글로벌 네트워크 인프라를 활용하여 사용자의 요청을 최적의 엔드포인트(리전 또는 서비스)로 라우팅한다.

 

주요 특징 

  1. 글로벌 네트워크 경로 최적화
    • AWS의 전용 글로벌 네트워크를 사용하여 인터넷의 변동성과 혼잡을 우회하고 더 빠르고 안정적인 경로로 트래픽을 전달한다.
    • 이는 사용자의 최소 지연 시간을 보장하는 데 도움을 준다.
  2. 고정 IP 주소 제공
    • Global Accelerator는 고정 IP 주소를 제공하므로, DNS를 변경할 필요 없이 애플리케이션의 백엔드 엔드포인트를 쉽게 변경할 수 있다.
    • 이는 특히 애플리케이션 업그레이드나 리전 간의 장애 조치(failover) 시 유용하다.
  3. 자동 장애 조치(Failover)
    • 엔드포인트(예: EC2 인스턴스, 로드 밸런서, 컨테이너)가 비정상 상태가 되면 자동으로 트래픽을 다른 정상 상태의 엔드포인트로 전환하여 애플리케이션의 고가용성을 보장한다.
  4. 리전 간 로드 밸런싱
    • Global Accelerator는 리전 간 트래픽을 분산시켜, 사용자 요청이 가장 가까운 엔드포인트 또는 최적의 엔드포인트로 전달되도록 한다.
  5. 탄력적인 용량 확장
    • 글로벌 사용자 기반이 확장되더라도 고속으로 애플리케이션을 이용할 수 있도록 탄력적으로 확장된다.

 

Global Accelerator 사용

 

위와 같은 특징들 떄문에 DR을 위한 Multi Region을 구성하기 위해 Cloud Wave 3기 때 진행한 프로젝트에서 AWS Global Accelerator를 사용한 Warm standby 전략을 사용하였다.

 

 

Multi Region 아키텍처

 

먼저 Terraform을 이용하여 도쿄 리전과 서울 리전에 각각 EKS를 구성해주었다. 

 

내부 서비스 메쉬로 Istio를 사용하기 때문에 각 리전의 Istio ingress ALB를 Global Accelerator의 엔드포인트로 지정해주었다.

 

Global Accelerator 설정

 

 

 

다음과 같이 두 Region의 Istro Ingress ALB가 존재할 떄 두 ALB를 엔드포인트로 Global Accelerator를 설정한다.

 

 

프로젝트를 진행할 당시에 구매한 도메인이 인증서를 받지 못해 Global Accelerator가 자동 생성해주는 domain으로 80 Port로 접근하는 것을 구현하였다.

 

사용 Test

 

평상시에 서울 리전으로 트래픽이 100% 가게끔 운영한다.

 

서울 리전에 장애가 생기면 global accelerator가 완전 관리형 서비스이기에 자동으로 헬스 체크를 하여 도쿄 리전으로 트래픽을 전환시켜 준다.

 

테스트를 하기 위해 엔드포인트의 health check 에 대한 응답을 의도적으로 unhealthy 로 받게 해서 테스트 해보았다. 

 

Grafana Dashboard로 지켜본 결과이다.

 

 

 

 

정상적으로 트래픽이 전환되는 것을 볼 수 있고 Console로 지켜봤을 때도 동일했다.

 

 

 

'Cloud > AWS' 카테고리의 다른 글

[AWS] 가비아 도메인 구매 Route53 연결  (0) 2024.12.06
[AWS] EC2 OOM 문제 예방  (1) 2024.12.06

개요

 

EC2로 서버를 열어서 사용하다 보면,  EC2에서 기본으로 제공하는 주소가 너무 길어서 불편함을 느낄 수밖에 없다.

 

 

또 해당 주소를 서비스를 배포함에 있어서 사용하는 것은 아무래도 무리가 있다.

 

따라서 가비아 사이트에서 도메인을 구매해 EC2 공인 IP를 연결해주도록 한다.

 

가비아 도메인 구매

 

https://www.gabia.com/

 

웹을 넘어 클라우드로. 가비아

그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브

www.gabia.com

 

 

 

합리적인 가격의 후보군이 셋이였고 여기서 그나마 익숙한한 도메인인 .site 도메인을 선택하여 구매하였다.

 

 

Route 53 도메인 적용

 

Route 53은  AWS에서 제공하는 DNS 서비스이다. 이를 통해 사용자는 인터넷 도메인 이름을 웹 서버나 다른 AWS 리소스의 IP 주소와 매핑할 수 있다.

 

Route 53에 EC2 서버를 연결하여 도메인을 사용할 것이다. 전체 과정은 다음과 같다. 

 

1. Route 53 대시보드에 접속해서 호스팅 영역을 생성한다.

 

2. ec2 서버 public ip를 연결하는 새 레코드를 생성한다.

 

 

3. 가비아 네임 서버에 ns 레코드 영역 값을 입력한다.

 

ns 레코드 영역은 route 53에서 확인 가능하다.

 

 

가비아의 네임서버를 변경해 주었기 때문에, 해당 도메인으로 오는 모든 DNS 쿼리는 Route 53으로 전달된다.

 

그리고 Route 53에 설정한 A 레코드에 의해 EC2의 IP 주소로 사용자의 트래픽이 라우팅 되며, 정상적으로 서비스를 이용할 수 있게 되었다. 

 

'Cloud > AWS' 카테고리의 다른 글

[AWS] Global Accelerator를 이용한 Multi Region Clustuer  (1) 2024.12.09
[AWS] EC2 OOM 문제 예방  (1) 2024.12.06

[AWS] EC2 OOM 문제 예방

dlwpdnr213
|2024. 12. 6. 18:44

개요

현재 사용하고 있는 인스턴스는 t2.micro이고 현재는 아직 OOM 문제를 발견하지는 못하였으나 서비스들을 완성하고 해당 환경에서 배포를 시작한다면 여러 개의 서비스를 올리는 특성상 OOM 문제를 맞닥뜨릴 것이라고 생각한다.

 

💡 OOM (Out Of Memory) 인스턴스에서 사용할 수 있는 메모리가 모두 소진되어 더 이상 할당할 수 없는 상태

 

따라서 사전에 예방책을 준비하기로 하였고 현재는 스왑 메모리를 사용하기로 결정하였다. 스왑 메모리를 사용하더라도 문제가 생긴다면 그때에는 인스턴스 업그레이드를 하기로 한다. 어느 정도의 비용이 발생하겠지만 최대한 비용 효율적으로 결정하겠다.

 

스왑 메모리 사용

그렇다면 스왑이란 무엇인가? 스왑은 컴퓨터에서 주메모리가 부족할 때 사용할 수 있는 보조 저장 공간이다.

 

주메모리는 프로그램에 필요한 데이터를 일시적으로 저장하는데, 가끔 시스템이 필요로 하는 메모리 양이 주메모리 용량을 초과하는 경우가 발생한다. 우리의 경우에는 여러 개의 Docker Container를 띄울 것이니 서비스 과다가 해당할 수 있겠다.

 

이런 경우, 스왑 메모리는 가상 메모리처럼 사용된다. 주메모리에 저장할 수 없는 데이터를 HDD나 SSD 같은 보조 저장 장치에 저장하여 해결하는 것이다. 이를 스왑 공간이라 부른다.

 

AWS 환경에서는 EBS 볼륨을 해당 공간으로 활용한다.

 

 sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  sudo chmod 600 /swapfile
  sudo mkswap /swapfile
  sudo swapon /swapfile
  echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

 

위와 같은 명령어로 스왑 메모리 사용을 할 수 있다. 만약 EBS 볼륨이 부족하다 싶으면 미리 볼륨을 키워야 한다.

 

 

결과를 확인했을 떄 스왑 메모리를 사용하는 것을 확인할 수 있다.