1. 문제 상황

잘 접속되던 서버였는데 갑자기 에러가 뜨면서 접속이 안 되었다.

 

위의 상황이 발생하는 이유를 예를 들어보자면,

 

A host가 있고, B server가 있다.

A는 항상 B server에 ssh 접속을 하고 있었는데, B server에 ssh나 os를 새로 설치하는 작업을 했다.

그랬는데 A가 똑같이 B에 접속을 시도하고,

B의 IP는 똑같다면 위와 같은 메시지가 뜬다.

 

SSH 최초 접속 시에 A와 B가 서로 인증을 하는데

B는 새로 설치되었는데 A는 예전 B에 IP로 인증이 되어있는 상태에서 B로 로그인을 하면

B는 인증정보가 없기 때문에 위와 같은 메시지가 뜨는 것이다.

 

 

2. 해결 방법

vi /Users/nhn/.ssh/known_hosts

# 보통은
# /root/.ssh/known_hosts
# /home/username/.ssh/known_hosts

접속해서 해당 IP 접속을 지우고 다시 접속을 한다.

 

접속해보니 장비(시스템)명이 바뀐거 같았다!

 

 

 

 

 

 

참고 사이트

첫 오프라인 써밋에 참가하다!

그동안 코로나로 인해서 온라인으로만 진행되었는데 올해 드디어 현장에서 열린 AWS Summit Seoul 2023에 다녀왔다!

 

이번 AWS Summit Seoul 2023은 5월 3일, 5월 4일 이틀동안 열렸고, 장소는 코엑스였는데 코엑스 전체를 대관할 정도로 대규모로 진행되었다.

너무 너무 가고 싶었는데 마침 팀원 분들께서 가게 되어서 데리고 가주셨다! 개인적으로 이번이 첫 오프라인 컨퍼런스, 써밋이었는데 멋진 경험을 할 수 있어서 정말 감사했다.

 

괜히 조기 마감 된게 아님을 실감할 수 있을 정도로 정말 많은 사람들이 있었는데, 대학생부터 주니어, 시니어까지 다양한 연령대와 데이터베이스, AI, 인프라, 시스템 등의 직종이 모인 것 같았다. 아무래도 오랜만의 오프라인 행사여서 그런지 많은 분들이 참석하셔서 뜨거운 관심과 열기를 느낄 수 있었다.

이 많은 사람들이 다 한 써밋을 보러 온 거라니..!


어떤 내용들이 구성되어 있나?

오전 9시 30분에 시작해서 오후 6시에 끝나는 일정으로

하루에 베뉴 별로 6개의 세션이 동시에 진행되어 원하는 강연을 골라서 보는 방식이었다.

 

Day 1은 산업 업종별 강연으로 AWS를 사용하고 있는 회사에서 어떻게 다루고 있는지, 업종 별로 사용에 어떤 특징이나 차이점이 있는지 알아볼 수 있는 시간들로 구성되어 있다.

Day 2는 기술 주제별 강연으로, 입문/중급/심화 기술로 나뉘어 AWS의 새로운 기술과 다양한 분야의 클라우드 전문가들의 강연을 듣고 배울 수 있는 시간들이었다.

 

나는 Day 2에 참석했고, 데이터베이스와 관련되면서 흥미로운 주제로 골라서 아래와 같이 듣기로 계획하였는데,

 

11:10~11:50오픈소스 데이터베이스로 탈 오라클! Why not?

13:10~13:50 : 갤럭시 규모의 서비스를 위한 Amazon DynamoDB의 역할과 비용 최적화 방법

14:20~14:50성공적인 AWS RDS 마이그레이션을 위한 여정과 필수 고려사항

15:20~16:00 : AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성

 

아쉽게도 두번째 13:10 세션은 참석하지 못 했다.. 인기가 너무 많았는지 스탠딩 좌석까지 모두 마감되었다고 해서 입장이 불가능했다..

 

세션 간 쉬는 시간이 2~30분 정도 되기 때문에 인기 있는 세션은 최소 10분 전에는 가서 미리 줄을 서야 되겠다는 교훈을 얻을 수 있었다 😂


입장

코엑스 B홀에서 사전신청한 사람들한테 이름이 적힌 카드 목걸이를 준다. 이걸로 베뉴 들어갈 때마다나 부스 방문할 때마다 태깅하고 그러니까 계속 쓰게 된다.

 

또 처음에 기조연설 들어갈 때 선착순으로 런치박스 먹을 수 있는 고무밴드도 나눠주니까 받아놨다가 바꿔 먹을 수 있다.


기조연설

먼저 9시 30분~10시 40분에 기조연설이 진행되는데 3층 오디토리움에서는 강연자가 직접 강연하는 모습을 볼 수 있다. 그 외에는 지하 1층, 1층, 2층에서 강연 장면을 실시간으로 화면으로 만나볼 수 있다. 너무 시간에 맞춰 가면 3층 오디토리움이 마감되었다고도 해서 현장의 모습을 확인하고 싶다면 조금 넉넉히 가는 것이 좋을 것 같았다.

 

본격적으로 기조연설이 시작되기 전에 쇼트 영화 같은 영상을 시청했다. 아마존 CTO인 버너 보겔스가 연기를 한 것도 재밌었고, 내용 자체도 생각보다 너무 재밌었는데 주제는 비동기에 대한 내용이었다.

 

실제 세상은 비동기적(asynchronus)으로 동작하고 있고 그래야만 하는데, 그렇지 않고 동기적으로 동작한다면 어떻게 되는지를 그리는 내용이다.

 

버너 보겔스는 평소에도 비동기적에 대해 강조하는 걸 볼 수 있는데 AWS Re:Invent 2022 기조연설에서 한 말을 따오자면

"실제 세계는 비동기적이다. 동기적인 것은 하나도 없다. 많은 일이 항상 일어나고 있다. 자연은 비동기식으로 작동한다. 컴퓨터 시스템도 비동기식으로 만들어지는 게 자연스럽다. 이벤트 드리븐 아키텍처로 느슨하게 결합된 시스템(Loosely coupled systems)을 만들어야 한다." 라고 한 적도 있다.

 

 

Day 2 기조연설자는 아래와 같았는데

특히, Flitto 강동한 CTO님을 뵐 수 있어서 좋았다.

Flitto는 번역 통합 서비스를 제공하는 스타트업인데, 평소에도 참 멋진 CTO님과 문화가 있는 회사라고 생각하고 있었다.

한국은 Node.js 불모지라고 불릴 정도로 Node.js를 주로 사용하는 기업이 많지 않은데, 그 속에서도 Node.js로 운영을 하고 있고 결국 성공을 하신 그런 분이시다..

 

그리고 LG U+ 송주영 연구위원님도 짧은 순간 뵌 거였지만 정말 괜히 최연소가 아니구나 싶을 정도로 말씀을 너무 잘 하시고, "딱 이 5가지만 기억하세요" 하면서 원칙들을 딱 딱 알려주실 때 멋지다고 생각했다..

 

딱 이 5가지라는 건, DevOps에서 중요한 5가지 단계인데

  1. Security
  2. Reliability
  3. Automation
  4. Organization
  5. Governance

1번부터 피라미드 모양으로 기반이 되어 쌓아 올라간다고 생각하면 된다고 한다.

 

 

윤석찬 수석 테크 에반젤리스트께서 AWS 기반 아키텍처와 다양한 도구, 서비스를 소개해주셨고

나머지 내용은 윤석찬 수석 테크 에반젤리스트께서 강동한님과 송주영님께 Q&A 하는 방식으로 진행되었다.

 

내용을 간단하게 정리해보자면

 

  • 스타트업에서 AWS를 사용하면 좋은 점
    • 클라우드를 이용하면 서버리스를 구성하기 좋고, 비용도 절감할 수 있음
  • 서비스를 글로벌하게 제공하면서 겪은 점들
    • 인프라를 어떤 리전에 구축할 지도 고려해봐야 함
    • 거주 지역 / 기기 접속 위치 / IP 위치 등 어떤 점을 기준으로 잡을 지 정하는 것이 쉽지 않음
    • AWS의 글로벌 서비스를 이용하면 쉽게 해결할 수 있음(AWS DynamoDB 글로벌 테이블 등)
  • 보안에 대해서
    • 보안에 대해 정의하고 가자면, 보안이란 접근 통제, 암호화, 마스킹, 감시, 추적, 인증과 권한 관리 등이다.
    • 보안 모범 사례를 하나 잡고 따라가면 좋음
    • 놓치기 쉬운 부분인데 예를 들면 데이터베이스 연결 정보 등을 평문으로 박지 않도록 주의하기(AWS Secrets Manager 등 활용 가능)
  • 빼놓을 수 없는 비용 문제
    • 스팟 인스턴스를 적극적으로 활용해보기
    • 온디맨드하게 사용하기
    • 리전 마다 서비스 과금이 다르기 때문에 레이턴시가 크게 중요하지 않은 작업이라면 저렴한 리전으로 사용하기
  • 인프라 운영에 대해서
    • 모든 인프라를 코드화해서 자동화하는 것 추천(IaC)
    • 이 인프라를 Why/When/What 만들었는지 늘 추척할 수 있어야 함
    • 온디맨드하게 사용하기, 예를 들면 단순히 오토 스케일링을 설정해 놓는 것이 아니라 필요할 때마다 하루에 몇 번이라도 자동으로 정책을 수정할 수 있어야 함
    • 스팟 인스턴스, Graviton 등을 활용하기

점심

런치 박스를 받으면 요런 구성으로 되어 있다. Day 1 거는 다른 것 같던데 샐러드 과일 쿠키까지 이것저것 있어서 좋았다.

각 베뉴마다 나눠주는 거 같은데 고무밴드랑 교환해서 받으면 원하는 곳에서 먹으면 된다.


EXPO

MongoDB, Redis, Redhat, SKT, LG CNS, Megazone Cloud 등 많은 기업들이 부스를 운영했다. 세션을 안 듣는 시간이나 쉬는 시간 같을 때 들리면 되는데 이것저것 체험해보고 상품을 받거나 기업들과 서비스 상담을 해볼 수도 있다. 부스를 돌면서 설문조사 많이 하고, 가방이랑 시계, 무선 충전 거치대 등을 받아왔다. 사람들도 엄청 많고, 같이 다니면서 체험하는 과정 자체가 넘 즐거웠다.


끝으로..

첫 오프라인 써밋을 이렇게 대규모로 열리는 곳에 함께 참여할 수 있어서 뜻 깊은 시간이었다. 정말 멋지고, 대단하고, 똑똑한 사람들이 참 많다는 것을 다시금 느끼고 더 열심히 정진해야겠다는 동기 부여를 확실히 받을 수 있었다.

 

자세한 내용은 아래 홈페이지에서 확인할 수 있고, 발표된 강연 자료와 영상은 6월 중에 공개될 예정이라고 하니

다시 확인하고 싶거나 놓쳤던 강연을 보면 좋을 것 같다 :)

https://aws.amazon.com/ko/events/summits/seoul/agenda/

 

AWS Summit Seoul | Agenda

Day 1: 산업 업종별 강연 산업 업종별 강연 2023년 5월 3일 (수) AWS 모니터링 및 관측성 담당 부사장 난디니 라마니 (Nandini Ramani)의 기조 연설과 함께, 42개 세션에서 소개하는 산업 업종별 고객 혁신

aws.amazon.com

 

AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성

Day 2 | Session 4 | 15:20 - 16:00
안준환 솔루션즈 아키텍트, AWS
Yongzhe Ren 솔루션즈 아키텍트, AWS

재해복구에 대한 대비는 온프레미스를 이용할때나, 클라우드를 이용할때나 항상 중요하다. 이 세션에서는 AWS Backup을 활용하여 최소한의 비용으로 클라우드 환경에서 운영 중인 시스템에 대한 멀티 리전 재해 복구를 자동화하는 방안을 살펴본다. 더불어 온프레미스에서 운영중인 시스템에 대한 재해복구를 비용 효율적으로 자동화하기 위해 어떻게 AWS Elastic Disaster Recovery를 활용할 수 있는지도 알아본다. AWS 서비스를 활용해 대부분의 시간동안 유휴 상태인 복구 사이트에 대한 비용을 최소화하면서도 재해복구를 자동화할 수 있다.

 

✅ 목차

  1. AWS에서의 재해복구
  2. AWS Backup을 이용한 멀티리전 재해복구
  3. AWS Elastic Disaster Recovery를 이용한 온프레미스 재해복구

1. AWS에서의 재해복구

Disaster Recovery

  • 비즈니스 지속성
  • 희귀하지만 대규모 장애상황
    • 자연재해
    • 기술적 이슈
    • 휴먼 액션
  • 개별 장애에 대한 목표 측정
    • 복구 시간(RTO)
    • 복구 시점(RPO)

 

복구시점 및 복구시간 목표

 

클라우드에서의 재해 복구 전략

 

복구시간 목표 - RTO

Backup & Restore는 서비스 중단 기간이 길어지더라도 수용 가능한 경우에 적용한다.

 

복구시점 목표 - RPO

재해가 비즈니스에 미치는 영향을 고려해야 한다. 예를 들어 대규모 금융 트랜잭션을 처리한다면 짧은 기간 중단되더라도 리스크가 매우 크지만, 신입사원 교육용 시스템 같은 경우면 중단되더라도 수용 가능할 것이다.

 

  • 중단이 매우 크리티컬하고, 고비용 투자가 가능하다면 → Multi-Site A/A
  • 중단되어도 비즈니스에 영향이 없다면 → Backup & Restore
  • 재해에 의한 데이터 손실은 Pilot light와 warm standby가 거의 같음
    • 빠른 복구 → 웜 스탠바이
    • 데이터 손실만 없으면 된다 → 파일럿 라이트

 

2. AWS Backup을 이용한 멀티리전 재해복구

재해복구를 위한 백업 대상

메타데이터는 인프라 구성 정보로, 완벽하게 원래대로 복원하기 위해서는 메타데이터 백업도 필요하다.

 

메타데이터를 어떻게 추출해서 백업할 것인지는 온프레미스와 클라우드 환경에 따라 달라진다.

  • 온프레미스
    • CMDB(구성관리데이터베이스)
    • 호스트, 어플라이언스 설정 정보가 다 들어있음
    • 수기, 엑셀 파일, 전용 시스템 등
  • AWS 클라우드
    • CMDB: 온프레미스와 동일하거나 클라우드와 연동
    • AWS API: API로 설정된 상태를 읽어오고, 구성 정보로 할 수 있음
    • IaC: 인프라 자체를 코드로 관리함
      • AWS CloudFormation, Terraform, AWS Cloud Development Kit

 

Backup & Restore 기반 재해복구 자동화

  • 재해가 발생하면 DR 리전에 백업해둔 데이터와 메타데이터를 조합해 원본 데이터와 동일하게 복구
  • 자동화가 필요하다면 각각 구현해야 하고, AWS Backup 서비스를 활용할 수 있음

 

AWS Backup 개요

  • AWS Backup 이란?
    • 완전관리형 정책 기반 백업 서비스
    • 여러 AWS 서비스들에 걸쳐 자동화된 중앙 집중식 관리를 지원하는 백업 서비스
    • 컴퓨트, 블록 스토리지, 파일 스토리지, 오브젝트 스토리지, 데이터 전송, 데이터베이스, 애플리케이션, 관리, 하이브리드

 

재해복구 자동화 구현 예

  • 모든 데이터와 메타데이터를 DR 리전에 복제
  • CodeBuild 등 CI/CD 도구를 이용해 자동 복구 가능

 

1. Iac 관리 및 백업

 

2. IaC 코드 의존성 분리

 

3. 관리형 리소스에 대한 간접 접근

 

4. 재해 복구 태스크의 실행 독립성 확보

 

5. 재해복구 시스템의 지속적인 검증 및 보완

 

3. AWS Elastic Disaster Recovery를 이용한 재해복구

클라우드 재해 복구 장점

 

클라우드 재해 복구의 비즈니스 효과

  1. 견고한 운영 체계: 최상위 복구 목표를 기반으로 안정성과 가용성 달성
  2. 운영 효율성: 중복 인프라 및 라이선스의 필요성을 줄임으로써 비용 절감 확보
  3. 비즈니스 연속성에 대한 확신: 운영 환경에 영향이 없는 쉬운 재해 복구 테스트를 수행해 가동 중지 시간 및 데이터 손실 최소화

 

AWS Elastic Disaster Recovery란?

다양한 고객의 요건에 맞는 안정적이고, 확장 가능하며, 안전한 스토리지 서비스 포트폴리오 제공

  • 유연성
    • 모든 소스에서 복제
    • 다양한 OS, 응용 프로그램 및 데이터베이스 지원
    • 유휴 복구 사이트 리소스를 제거하고 필요한 만큼만 지불
  • 신뢰성
    • 견고하고 예측 가능한 연속 복제 기능
    • RPO: 수초, RTO: 수분
    • 랜섬웨어, 충돌 및 인적 오류에 대한 보호
  • 자동화
    • 최소한의 기술 요구사항
    • 운영에 영향을 주지 않는 DR 테스트
    • 테스트, 복구, Fail Back의 통합 프로세스 지원

 

AWS EDR 사용 패턴

 

AWS EDR 작동방식

 

AWS EDR 지원 대상

 

AWS EDR 아키텍처

 

데모 아키텍처

 

Summary

 

참고 자료

성공적인 AWS RDS 마이그레이션을 위한 여정과 필수 고려사항

Day 2 | Session 3 | 14:20 - 14:50
서호석 컨설팅팀 상무, 에티버스

AWS RDS로의 성공적인 마이그레이션을 위해 각 스텝 별 준비 사항을 소개한다. 마이그레이션 과정에서 고려, 숙지해야 할 항목들을 공유하여 성공적인 이관을 준비하는 여정, 에티버스 세션과 함께 하시기 바란다.


1. Amazon DB Services

Amazon RDS와 Aurora

 

Amazon RDS Custom For Oracle

 

2. DB Migration Steps

General Steps For DB Migration

 

Access Inspection Lists

 

3. DB Migration Considerations

Amazon RDS로의 마이그레이션을 위한 준비사항

 

4. DB Migration Tools

OS Commands

 

DBMS Provided Tools

 

Change Data Capture Tools

 

5. DB Migration Cases

OnPremise MS-SQL To Amazon RDS MySQL

 

OnPremise Oracle DB To Amazon RDS Oracle

오픈소스 데이터베이스로 탈 오라클! Why not?

Day 2 | Session 1 | 11:10 - 11:50
김지훈 WWSO 솔루션즈 아키텍트, AWS
박승전 Project Manager, SK Telecom

아직 많은 기업들이 상용 데이터베이스로 인해 발생하는 높은 비용으로 고통받고 있다. 이를 돕기 위해 AWS는 오픈 소스를 기반으로 한 다양한 워크로드의 특성에 맞는 데이터베이스 서비스를 제공하고 있다.

이번 세션에서는 AWS의 워크로드 특성에 따른 목적에 맞는 다양한 데이터베이스 서비스가 어떤 것이 있는지 알아보고, 기존 오라클 데이터베이스를 기반으로 구성된 서비스에 AWS의 데이터베이스를 도입하여 탈 오라클에 성공한 고객 사례를 소개한다.

 


데이터 현대화 아키텍처

전통 방식에서 마이크로 서비스 아키텍처, 분산 아키텍처로 변화하고 있다.

 

AWS의 현대화는 모놀리식에서 MSA로 변화하고 있는데,

모놀리식은 중앙 DB + 종속 팀

MSA는 독립 DB + 2 피자 팀이라고 할 수 있다.

 

데이터베이스 현대화

  1. 관리형 데이터베이스로 이동 : 자체 관리형 → AWS 관리형
  2. 오픈 소스 데이터베이스로 이동 : 상용 → 오픈 소스
  3. 목적 지향 데이터베이스로 현대화 : 모놀리식 → 마이크로 서비스

 

1 단계: 관리형 데이터베이스로 이관

기존에는 관계형 데이터베이스를 사용하다가 관리형 데이터베이스를 도입한다.

운영 부담의 감소와 플랫폼 기능의 장점 활용으로 인해 민첩성, 관리 편의성, 비용 효율성이 상승할 수 있다.

이 때 Amazon RDS나 Aurora와 같은 클라우드 네이티브 데이터베이스 도입을 고려할 수 있다.

 

2 단계: 캐시 및 영구 인메모리 데이터

캐시 및 영구 인메모리 데이터로

  • Amazon RDS나 Aurora와 같은 클라우드 네이티브 데이터베이스
  • 빈번한 액세스 데이터 캐싱에는 Amazon ElastiCache
  • 지속적이고 내구성 있는 인메모리 데이터 스토리지로는 Amazon MemoryDB

등을 활용해 스케링일 문제를 해결하고, 성능을 향상시킬 수 있다.

 

3 단계: 비 관계형 데이터 쿼리

  • 키-밸류, 글로벌 액세스 가능한 데이터 세트로는 Amazon DynamoDB
  • 도큐먼트 형태 데이터 세트는 Amazon DocumentDB
  • 와이드 컬럼 데이터 세트는 Amazon Keyspaces

를 활용해 모놀리스 구조를 분해하고 민첩성, 확장성, 성능을 향상시킬 수 있다.

 

4 단계: 전문화된 데이터 상호 작용

워크로드 특성에 맞는 전문화된 데이터베이스를 선택하여 사용할 수 있는데 전문 데이터 세트로는 소셜 그래프, 추천 엔진, 시간 별 데이터, 로그 등이 있다.

 

이에 사용할 수 있는 데이터베이스로는

  • 그래프 및 고도로 연결된 데이터는 Amazon Neptune
  • 그래프 DB나 IoT 센서 데이터를 시간대 별로 저장할 수 있는 Amazon Timestream
  • 원장 데이터 기록 시스템인 Amazon QLDB

를 활용할 수 있다.

 

Summary


탈 오라클 사례: SK Telecom TANGO의 클라우드 전환계획

TANGO란?

  • T-Advanced Next Generation Oss
  • SKT 망 관리 시스템
  • 주요 기능: 장비 관리, 감시, 분석, 망 설계 구축
  •  구성: 총 5가지 기능
    • Operation: 성능, 고장 감시
    • Inventory: 장비관리
    • Platform: 공통기능
    • Analytics: 분석
    • Engineering & Construction: 설계 및 구축
    • 이 중 O, I, P가 클라우드 전환 대상이고 A와 E&C는 On Premise를 유지한다.

 

클라우드 전환 목표

단순한 이전이 아닌 앱의 리팩토링을 통해 성능, 비용 및 안정성 개선을 목표로 한다.

 

  • 클라우드 네이티브 개발: MSA/컨테이너 기반 개발 → 확장성/가용성 향상
  • 서비스 구조개선(리팩토링): 앱 구조 개선 → 단위 성능/속도 향상
  • 오픈소스 DB 전환: 탈 오라클 → 비용절감/종속성 제거
  • TCO 구조 혁신: 중복 기능/데이터 제거 → 투자비/운영비 최소화

 

현재 DB의 구조적 이슈

현재 DB는 모놀리식 구조이고, 이로 인해서 발생하는 이슈는 다음과 같다.

  • 환경 변화
    • 망 진화로 인한 관리 대상 장비 및 데이터 증가
    • 자동화 및 데이터 분석 등 연동 요구 데이터 증가
  • 확장성 한계
    • 수직적 확장에 의존
    • 수평적 확장을 위해서는 DB 및 앱 재설계 필요
  • 성능 이슈
    • 처리 및 연동 데이터 증가에 따른 성능 이슈 발생
    • AI 기반 앱 진화에 어려움 발생
  • 비용 증가
    • 시스템 확장에 따른 S/W 라이센스 비용 부담 증가
    • 단일 솔루션 의존성 경감 필요

이러한 이슈들을 해결하기 위해서 오픈소스 데이터베이스로 전환하기로 결정했다.

 

오픈소스 DB 전환 여정

01 전환 단계별 검토 필요 항목

 

02 적합한 데이터베이스 선택

 

03 성능 확보 및 확장성을 고려한 DB 분산 설계

 

04 SQL 전환 가이드 작성 및 활용

 

05 데이터 마이그레이션

 

06 Graviton 적용을 위한 테스트 결과

Graviton 활용은 거의 필수적이라고 할 수 있다.

 

07 비용 최적화

 

Lesson Learned

 

향후계획 (23년)

애플리케이션 구조 개선 및 S3 활용 확대를 통한 비용 절감추진

  1. TANGO의 클라우드 전환 지속 추진(3G, LTE, IP 감시 기능 등) : 오픈소스 DB 전환 확대
  2. 비용 절감을 위한 애플리케이션 구조 최적화 : 캐쉬 활용 및 사용성이 적은 DB는 S3로 전환 확대
  3. 서버리스 DB 활용 방안 검토중 : 사용률이 낮고, 절체 시간에 민감하지 않은 Slave DB에 적용 예정

Jenkins 비정상 종료 시 자동 시작하는 systemd 서비스 파일

테스트 환경

  • NHN Cloud
  • Ubuntu 20.04 LTS
  • Docker 23.0.3
  • Jenkins 2.399
  • Python 3.9

 

상황

Jenkins가 비정상적으로 종료되었을 경우, Jenkins가 자동 실행되게 하도록 합니다.

 

해결방법

  • sudo systemctl enable jenkins 명령어 실행
    • Failed to enable unit: Unit file jenkins.service does not exist.와 같은 오류가 발생합니다.
  • Jenkins Docker 컨테이너를 자동 시작하는 systemd 서비스 파일을 생성하여 적용해줍니다.
  1. /usr/lib/systemd/system 디렉토리에 jenkins.service파일 생성
sudo vi /usr/lib/systemd/system/jenkins.service

 

2. 파일 내용 작성

[Unit]
Description=Jenkins container
Requires=docker.service
After=docker.service

[Service]
Restart=on-failure
Group=docker
ExecStart=/usr/bin/docker start -a jenkins
ExecStop=/usr/bin/docker stop -t 2 jenkins

[Install]
WantedBy=multi-user.target

Jenkins Docker 컨테이너를 관리할 새 systemd 서비스인 jenkins를 정의합니다.

 

서비스 파일에는 세 개의 부분이 있습니다.

  • [Unit]: 서비스가 필요로하는 모든 항목을 나열합니다. 적용하기 위해서는 Docker 서비스가 실행 중이어야 합니다.
  • [Service] :
    • Restart=on-failure : 서비스가 어떤 이유로 실패하거나 중지되면 자동으로 다시 시작되어야함을 지정
      • 서비스가 비정상적으로 종료되었을 때에만 동작함. 호스트 머신이 강제 종료되는 경우는 시스템 수준의 이벤트로서 서비스 자체의 종료와는 다르기 때문에 일반적으로 호스트 머신이 강제 종료될 때는 systemd가 서비스를 재시작하지 않음. -> 데몬 감시 스크립트 등록이 필요할 것으로 생각됨
    • Group : irteam, irteamsu, root 사용자 모두 실행 가능하도록 Group 설정
    • ExecStart : Jenkins 컨테이너를 시작하는 명령을 지정
    • ExecStop : Jenkins 컨테이너를 중지하는 명령을 지정
  • [Install]: 서비스가 시작될 때, 이 경우 multi-user.target 레벨에서 시작됨을 지정

 

3. 새 서비스 파일을 인식하도록 systemd 데몬을 다시 로드합니다.

sudo systemctl daemon-reload

서비스 파일에 대한 변경 사항을 인식하도록 systemd 데몬을 다시 로드하는 것입니다.

 

4. Jenkins 서비스를 부팅 시 자동 시작하도록 설정합니다.

sudo systemctl enable jenkins

 

결과

  1. Jenkins 비정상 종료 시 Jenkins 도커 컨테이너가 자동으로 실행되는 것을 확인하기
  • SIGABRT 로 비정상 종료 됨

 

  • 자동 재실행 됨

 

  • 로그

 

2. 호스트 머신 비정상 종료(reboot) 시 Jenkins 도커 컨테이너가 자동으로 실행되는 것을 확인하기

  • systemctl enable 명령어로 reboot 가능 확인!

 

systemd 서비스 파일 설정

[Service]

Restart=[no|on-success|on-failure|on-watchdog|on-abort|always]

  • 해당 유닛이 죽었을 때나 혹은 WatchdogSec만큼의 시간 동안 응답이 없는 경우 재시작한다.
  • no (기본값) : 유닛을 다시 시작하지 않는다.
  • on-success: 유닛이 정상적으로 종료 되었을 때만 재시작한다.
    • 종료 시 '0' 값을 리턴하여 종료 되었거나 SIGHUP, SIGINT, SIGTERM, SIGPIPE 등과 같은 시그널 또는 SuccessExitStatus 설정에서 지정된 리턴 코드 목록에 따른 시그널에 대해서 모두 성공으로 인식해 재시작 하게 된다.
  • on-failure : 유닛이 비정상적으로 종료 되었을 때 재시작한다.
    • 리턴값이 '0' 이 아닌 경우, core dump 와 같이 비정상적인 시그널을 받고 종료된 경우, 타임 아웃값 내 응답이 없는 경우 등 재시작한다.
  • on-watchdog : WatchdogSec 에 설정된 시간 내 응답이 없는 경우에만 재시작한다.
  • on-abort : 지정되지 않은 리턴값을 받은 경우 재시작한다.
  • always : 종료 상태 등과 무관하게 무조건 재시작한다.
    • 사용자가 중지해도 시스템이 다시 띄워지게 되므로 설정된 유닛 중지 시 주의 필요

시스템 리소스 관련 Limit 설정

  • sudo systemctl show jenkins | grep ^Limit : 리소스별 설정된 Limit 값 목록 조회

 

  • LimitAS
    • 서비스에서 사용할 수 있는 최대 가상 메모리 공간
    • infinity : 서비스가 필요한 만큼의 가상 메모리를 사용할 수 있도록 제한하지 않음
  • LimitRSS
    • 서비스에서 사용할 수 있는 최대 물리 메모리 공간
    • infinity : 서비스가 필요한 만큼의 RAM을 사용할 수 있도록 제한하지 않음
  • LimitCORE
    • 충돌 발생 시 서비스에서 생성할 수 있는 코어 덤프 파일의 최대 크기
    • infinity : 코어 덤프 파일 크기 제한하지 않음
  • LimitNOFILE
    • 서비스가 동시에 가질 수 있는 열린 파일(파일 디스크립터)의 최대 개수
    • 1048576 : 최대 1048576개의 열린 파일을 동시에 가질 수 있음

 

최대 오픈 파일 수 설정

  • 사용자 계정에 대한 리소스 제한을 설정하는 시스템 구성 파일
  • 개별 사용자나 프로세스가 시스템 자원을 독점하는 것을 방지하고, 자원 할당을 보장하기 위해 사용
/etc/security/limits.conf

 

  • <domain> : 제한이 적용되는 범위를 지정
    • @그룹명
    • 사용자명
    • * : 모든 사용자
  • <type> : 제한의 유형 지정
    • soft : 일시적으로 초과할 수 있는 제한 값
    • hard : 초과할 수 없는 최대 값
  • <item> : 제한되는 자원 지정
    • core : 코어 파일의 최대 크기
    • data : 최대 데이터 크기
    • fsize : 최대 파일 크기
    • memlock : 최대 잠긴 메모리 주소 공간(물리적 RAM에 잠긴 상태로 유지하는 메모리 양, 디스크로 스왑되지 않고 빠른 액세스가 필요할 때)
    • nofile : 최대 개방 파일 수
    • rss : 최대 레지던트 세트 크기(프로세스가 실제 RAM에 보유하고 있는 메모리의 일부)
    • stack : 최대 스택 크기
    • cpu : 최대 CPU 시간
    • nproc : 최대 프로세스 수
    • as : 주소 공간 제한
    • maxlogins : 해당 유저의 최대 로그인 수
    • priority : 유저 우선순위
    • locks : 유저가 가지고 있을 수 있는 최대 파일 개수
    •  
  • <value> : 지정된 자원의 제한 값 정의
  • 설정 내용 적용하는 방법 2가지
    • 1. 재부팅하기
      1. ulimit -a 로 리소스 재로드하기
ulimit -a
4월 20일(목) 10~17시 한국컨퍼런스센터

 

✅ 교육 목표

  • NHN Cloud 서비스를 활용하여 2-tier 구조를 설계하고 구축할 수 있습니다.
  • 인프라 확장 기술인 Auto Scale 개념을 이해하고 활용할 수 있습니다.
  • 클라우드 서비스를 운영 관리에 필요한 서비스를 사용할 수 있습니다.

 

✅ 교육 목차

  1. 소규모 웹사이트 구축하기
  2. 인스턴스 시스템 모니터링 및 감시 설정하기
  3. 조건에 맞춰 서버 Scale In/Out 해보기

1. 소규모 웹사이트 구축하기

NHN Cloud에서 아래와 같은 아키텍처를 구성하는 실습을 진행해보았다!

 

 

Lab1. 기본 인프라 서비스 활성화

  1. 리전부터 확인하고 설정하기! 잘못된 리전에 만들었을 경우, 다 부수고 다시 만들어줘야 함..
  2. 기본 인프라 서비스 활성화하기

 

Lab2. 2개의 VPC 설정 / 인터넷 게이트웨이를 생성 후 라우팅 테이블에 연결

먼저, 사설망을 2개 생성한다.

  • 서비스용 : 웹 서버가 돌아갈 Service VPC
  • 관리용 : Private Subnet에 DB 서버가 돌아갈 mgmt VPC (Default VPC를 이걸로 변경)

 

사설망은 인터넷이 연결이 안 되어 있기 때문에, 인터넷 게이트웨이(문과 같은 역할)를 연결해야 한다.

 

단계는..

1. 인터넷 게이트웨이 생성

2. 라우팅 테이블(Service VPC)에 인터넷 게이트웨이 연결 (경로를 알려주는 것)

 

디폴트로 생성된 Default VPC의 경우 인터넷 게이트웨이가 자동으로 할당되어 있기 때문에

라우팅 테이블에서 Service VPC에만 인터넷 게이트웨이를 연결해주면 된다.

Lab3. Management vpc - public subnet 생성 / Service vpc - private subnet, public subnet 생성

  • mgmt vpc : Default Network의 경우, public용 subnet 또한 자동 생성 → Default Network를 서브넷 변경으로 이름만 변경
  • service vpc : private, public용 subnet 총 2개 생성
  • 헷갈리지 않게 네이밍이 대충 하지 말고 의미를 담는 것이 중요하다.

 

Lab4. mgmt vpc의 서브넷에 mgmt 인스턴스 생성

인스턴스를 생성 시, 네트워크 서브넷에 public-subnet-mgmt를 연결한다.

 

Lab5. 보안그룹 설정 (local → mgmt-server)

공인 IP를 통해 mgmt-server에 접속할 수 있게 mgmt-sg에 내 IP로 보안 규칙을 생성한다.

 

Lab6. Service VPC의 Private Subnet에 MariaDB 인스턴스를 생성

💡 RDS for DB vs DB Instance

 

✔️ RDS for DB

  • 복잡한 설정 없이 고가용성, 자동 백업, 모니터링을 UI 상에서 이용할 수 있음
  • PaaS형 상품
  • 설치 간편성 : 희망 서버 사양 선택 > 희망 DB 버전 선택 > 생성

1. 고가용성(HA)

  • Master와 Candidate Master 인스턴스가 나란히 생성됨
  • Master가 정지되면 Candidate가 자동으로 Master로 승격되어 장애를 막음

2. 자동화된 백업

  • 지정된 시간 범위 안에 자동으로 백업이 수행됨
  • Object Storage에 보관할 수 있고, 원하는 시점으로 복원할 수 있음

3. 손쉬운 설정 변경

  • 웹 콘솔을 통해 설정을 쉽게 변경할 수 있음

4. 모니터링

  • 하드웨어 및 DB 상태를 모니터링 할 수 있음
  • 슬로우 쿼리 같은 부분도 같이 제공
  • 임계치 설정 시 알림 설정도 받을 수 있음

 

✔️ DB Instance

  • OS 위에 DB를 설치한 단순 DB 설치형, 나머지는 고객이 관리
  • IaaS형 상품

 

 

Lab7. Service VPC의 Public 서브넷에 웹서버를 설치

 


  • mgmt vpc와 service vpc가 통신하기 위해 거쳐야 할 설정 단계!

mgmt vpc ↔ Sevice vpc

0. local에 있는 펨키를 mgmt-server로 전송

1. 피어링 게이트웨이 생성

2. 라우팅 테이블 두개 다 잡아주기

3. 보안그룹 mgmt에서 들어오는 것만 열어주면 됨

 

아래에서 따라해보자!

 

Lab8. Local 환경에서 mgmt-server로 키페어 전송

ssh -i key.pem centos@[mgmt-server public ip]

 

Lab9. mgmt VPC ↔ Service VPC를 피어링 작업 / 각각의 VPC 라우팅 테이블 설정

1. 네트워크 - 피어링 게이트웨이 - 생성

두 개의 네트워크가 사설 통신하기 위해서 피어링 게이트웨이를 생성해준다.

 

2. 네트워크 - 라우팅 - 라우트 선택 - 라우트 생성

mgmt는 service도 가야 되고, db에도 가야한다.

두 군데에 가야 되기 때문에 범위를 vpc 자체로 열어줄 것!

 

mgmt vpc 라우팅 테이블에서 10점 대역이 들어올 거니까 10점 대역이 피어링 게이트웨이를 타야 하므로

대상 CIDR에 10.0.0.0/16으로 설정한다.

service vpc의 라우팅 테이블은 192.168 대역이 피어링 게이트웨이를 타야 한다.

Lab10. 보안그룹 설정 ( mgmt → web, mydb )

 

Lab11. web1 → DB 서버 접속

먼저 보안그룹 설정이 필요하다.

 

  • 포트 : 3306

db 서버 보안그룹(db-sg)에 3306 포트를 열어주어야 한다.

 

  • IP : web-sg

web 서버가 현재는 1개지만 여러 개로 늘어날 수 있다고 하면,

db 서버 보안그룹(db-sg)에 web 서버 보안그룹(web-sg) 자체를 추가해주면

나중에 추가되는 web 서버를 db-sg에 매번 넣어주지 않아도 되어 편리하다.

 

🤔 db-sg 보안그룹에 web-sg 보안그룹 자체를 추가한다는 건?

web-sg를 보안그룹으로 쓰는 모든 인스턴스를 db-sg에서 허용해달라는 의미와 같다.

 

두둥

web 서버에서 db 서버에 접속했다!

 

Lab12. 웹서버의 /www/var/htmlprocess_create.php 파일 수정

db 서버의 ip로 변경

 

Lab13. 생성한 웹서버를 이용하여 이미지 생성

  • 이미지 : 현재까지 구성한 인스턴스 상태를 스냅샷

환경구성을 다 하고 이미지를 생성하는 것이 좋다.

인스턴스를 정지 후 이미지 기능을 사용하는 것을 권고한다.

 

1. Compute - 인스턴스

2. 생성하고자 하는 인스턴스 중지

3. 이미지 생성

 

4. Compute - Image에서 확인

 

Lab14. LB 생성 및 설정

💡 Load Balancer

트래픽을 분산시켜주는 기능

 

✔️ 알고리즘에 의해 동작 방식이 조금씩 다름

1. Round Robin (라운드 로빈)

  • 트래픽을 전달할 인스턴스를 순차적으로 선택하는 가장 기본적인 방식

2. Least Connections (최소 연결 우선 선택)

  • TCP 연결 수를 기준으로 하며 부하가 가장 적은 인스턴스로 보내는 방식
  • 특정 인스턴스에 부하가 집중되는 상황 방지

3. Source IP(원본 IP 기준 선택)

  • 청자의 원본 IP를 해싱하여 처리할 인스턴스를 선택
  • 한 사용자의 요청을 기억해 매번 동일한 인스턴스에서 처리하고자 할 때 유용

 

✔️ 지원 프로토콜

1. TCP : TCP(4계층) LB 제공

2. HTTP / HTTPS : OSI 7계층 LB 제공

3. TERMINATED_HTTPS : HTTPS에서 SSL Termination 기능이 추가돼 LB 제공

 

✔️ 리스너

  • LB 앞 단에 리스너가 있음
  • 리스너가 듣고자 하는 포트와 프로토콜 포트만 허용해줌
  • HTTP/80를 듣고자 하는데, HTTPS가 들어오려고 하면 못 들어감
  • 리스너가 듣고 있는 정보만 통신 가능
  • 필요한 수만큼 리스너 생성하면 됨
  • 보안그룹에 LB 정보가 없으면 통신이 안 되고 부하 분산도 안 됨

 

✔️ IP접근제어기능

🤔 LB로 들어오는 트래픽이 너무 많으면? 너무 느려지면?

IP를 확인해서 이슈가 있을 때 LB에 IP접근제어기능을 쓰면 좋음

 

 

LB 생성

1. network - Load Balancer

2. health check를 해서 인스턴스 상태를 확인함 -> 80 포트, url 체크(웹서버 특정 디렉토리에 특정 파일이 있는지)

3. 네트워크 설정 (web1)

 

 

 

Lab15. web-img 이미지로 web2 서버 생성 / 종료된 web1 서버 시작

1. 정지했던 web1 서버 켜기

2. 인스턴스 생성 시 이미지 사용

 

Lab16. LB에 Floating IP를 할당

LB에 공인 IP 할당

 

Lab17. LB에 web-2 서버를 추가

  • LB - 인스턴스 연결 추가

로드 밸런서에 라운드 로빈할 총 2대의 인스턴스(web1, web2) 추가 완료!

 

  • web-sg 보안 그룹에 로드 밸런서 사설 IP 추가해주기

안 그러면 80포트로 모든 IP가 다 들어오게 되어버린다.

 

30초에 한번씩 추가하기 때문에 바로 안 될 수도 있음 기다려줘야 한다.

대신 LB를 재시작하면 바로 적용된다.

로드밸런서 - 리스너 - 리스너 변경 아무것도 변경하지 말고 누르면 재시작 된다.

 

결과

 

새로 고침 할 때마다 두 인스턴스로 라운드 로빈 되는 걸 확인할 수 있다!

 

Lab18. 웹사이트 확인

1. 데이터 입력

 

2. DB 서버 접속 후 데이터 삽입 확인!

웹에서 입력한 정보가 DB에 잘 들어가있는 것을 볼 수 있다.

 

+ 추후 도메인을 달고 싶다면 LB에 도메인 설정만 해주면 된다.

+ 원본 서버에 점검이 필요하면 mgmt-server를 통해 사설망으로 들어가서 점검할 수 있다.

 

로드 밸런서 모니터링

기본적으로 제공해주는 통계 기능을 통해 로드 밸런서를 모니터링 할 수 있다.


2. 인스턴스 시스템 모니터링 및 감시 설정하기

무료니까 꼭 이용해보기

1분 단위 수집해주고, 이슈가 있으면 연락을 준다.

 

  • Compute - System Monitoring

 

단계는..

1. 레이아웃 만들기

2. 알림

2-1 알림 받을 사용자 그룹 생성

 

2-2 어떤 그룹에 어떤 알림 줄 지 생성

 

2-3 감시 설정

 

2-4 서버 목록 설정

 

2-5 사용자 그룹 설정

 

 

테스트

  • systemctl stop httpd로 강제로 httpd 종료해보기

 

SMS와 이메일로 바로 연락이 온다!

 

 

시스템 모니터링 - 이벤트 현황 페이지에서도 확인할 수 있다.


3. 조건에 맞춰 서버를 Scale In/Out 해보기

필요에 따라 서버를 확장하거나 축소하는 것

 

💡 Scaling

인스턴스 또는 컴퓨팅 파워를 확장하는 것

 

  • Scale Up : 장비의 설비 성능을 높이는 것

 

  • Scale Out : 장비의 설비 규모를 늘리는 것

Auto Scaling Group

  • Scale In/Out을 자동으로 해주는 것
  • 인스턴스를 추가로 생성 또는 삭제하는 조건과, 조건이 만족하는 경우 수행할 행동을 정의한 것
  • 최소, 최대, 구동 인스턴스는 스케일링 그룹에서 반드시 정의해야 하는 매개변수
    • 최소, 최대 : 만들어질 수 있는 limit 수
    • 구동 : 돌아갈 인스턴스
  • 임계치 또는 감축 정책을 미리 설정해놓으면 지속적으로 모니터링 하다가 조건이 만족하면 Scale In/Out 함
  • 모니터링은 아래 항목 중에 원하는 항목을 선택하면 됨

  • 어떤 값을 보고 움직일까? Auto Scaling Group 안에 있는 인스턴스의 평균값으로 움직임
  • Instance Template을 사용하면 좋음
    • 자주 사용하는 인스턴스 구성 요소 정보를 미리 정의해 보관하는 서비스

 

설정

1. 인스턴스 템플릿 설정

스펙은 한 번 설정하면 나중에 바꿀 수 없다.

 

2. Compute - Auto Scale

2-1 인스턴스 템플릿으로 인스턴스 설정

2-2 스케일링 그룹 설정

증설 정책 - 재사용 대기 시간 → 쿨타임 : 한번 수행하고 나면 쿨타임 동안은 조건이 만족해도 오토 스케일링을 하지 않음

 

로드 밸런서랑 연동해서 자동으로 LB 밑으로 들어가도록 한다.

 

설정 결과

  • 오토 스케일링 그룹 생성

 

  • 인스턴스 템플릿 + 로드 밸런서 -> 인스턴스 생성

 

  • 로드 밸런서 인스턴스에 오토 스케일링 인스턴스가 추가됨

 

3대에서 움직이다가 4대가 됐다가 3대가 됐다가 그런 방식이다.

 

⚠️ 오토 스케일링으로 만들어진 인스턴스는 콘솔에서 삭제하거나 중지할 수 없음

 

 

부하 테스트 방식

  • 리눅스 도구 Stress를 이용하여 부하테스트 진행
  • web-auto에서 해야 됨
  • stress -c 1 --timeout 240
  • 인스턴스 > web-auto > 모니터링 > 전체 팝업으로 보기
  • 오토 스케일 > web-auto > 통계 > 평균 값 보여주는 것

 

결과

1. 인스턴스 1대가 추가됨

 

2. 오토 스케일 인스턴스 목록에도 추가됨

 

3. 로드 밸런서에도 2대 추가됨

 

 

4. 나중에 축소될 때는 먼저 만들어진 인스턴스가 삭제됨

 

 

모든 로그는 Cloud Trail에서 확인 가능

오토 스케일은 SYSTEM이 해준걸 알 수 있다.

 

++ 리소스 반납

다 썼으면 잊지 말고 꼭 리소스 반납하기

  1. 인스턴스 삭제
  2. 서비스 비활성화
  3. 조직 삭제

 

NHN Cloud 전반적인 기능을 알차게 배울 수 있는 유익한 시간이었다.

이미지, 인스턴스 템플릿, VPC, 라우터, 피어링, 로드 밸런서, 모니터링, 스케일링까지-!

특히 처음에 구성할 아키텍처를 먼저 보여주시고 직접 실습을 통해서 따라가니까 더 이해가 잘 된 것 같다.

엔클 최고당

+ Recent posts