티스토리 뷰
그림으로 공부하는 IT 인프라 구조 7장 내용 정리
1. 안정성 및 이중화
상용 시스템을 장애로부터 보호하기 위해서 빠트릴 수 없는 구조가 있다. 그것은 바로 안정성과 이중화다.
안정성 이란?
안정성, 고가용성이란, 서비스가 가능한 한 멈추지 않도록 하는 것을 의미한다.
이중화, 감시, 백업 세 가지 수단을 구현해서 이를 실현할 수 있다.
목표 | 실현수단 |
고장, 장애에 의한 정지가 발생하지 않을 것 | 컴포넌트 이중화 |
고장, 장애가 발생해도 복구할 수 있을 것 | |
고장 ,장애가 발생한 것을 검출할 수 있을 것 | 컴포넌트 감시 |
고장, 장애가 발생해도 데이터가 보호될 것 | 데이터 백업 |
이중화란?
이중화는 기능을 병렬로 처리하여 하나에 장애가 발생해도 서비스가 지속되게 하는 것이다.
(예: 카운터가 여럿인 편의점)
이중화를 구성하기 위해 필요한 구조는 아래와 같다.
- 부하분산 : 요청을 여러 컴포넌트로 분산하는 기능
- 내부적 생존 감시 : 컴포넌트들의 생존 여부를 감시하는 기능
- 페일오버 : 장애 발생 시 예비 컴포넌트로 자동 전환하는 기능
2. 서버 내 이중화
물리적인 장치에 대한 이중화이다.
전원, 장치 등의 이중화
- 데이터 센터 랙의 전원, 팬 등의 이중화이다
- 대규모 데이터 센터에서는 각 전원 탭이 별도 분전반이나 UPS 에 접속돼 있어서 전원 장애를 대비하고 있다
- 참고로, 은행들과 같은 주요 시스템은 데이터 센터 이중화를 구축한다 (재해복구 (Disaster Recovery, DR) 시스템)
네트워크 인터페이스 이중화
- PCI 슬롯에 꽃은 카드를 이중화한다
- 카드 장애 및 포트 장애에 대응할 수 있다
3. 저장소 이중화
HDD 이중화
- HDD는 가동 빈도가 높아서 고장 나기 쉽기 때문에 주요 이중화 대상이다
- SAN 또는 RAID 구성을 통해 디스크를 이중화한다
- 안정성 확보, 성능 향상, 용량 확장의 장점이 있다
- SAN(Storage Area Network)은 높은 비용과 변경(증설 등)에 시간이 걸리기 때문에 흔히 접하기 어렵다
버스 이중화
- 서버와 저장소 사이의 버스에 대한 이중화이다
- 예) Red Hat Enterprise Linux 의 DM-Multipath
4. 웹/AP 서버 이중화
웹 서버의 서버 내 이중화
- 소프트웨어 관점의 웹 서버 이중화이다.
- Apache 와 같은 웹서버에서 멀티 프로세스/스레드로 병렬로 처리하며, 시스템 리소스에 맞게 병렬값을 세팅한다
- 요청이 너무 많아 서버에서 처리를 따라갈 수 없는 경우에는 503 Service Unavailable 에러가 반환되며, 요청이 큐에 쌓이지 않고 바로 에러를 반환한다는 특징이 있다
서버 이중화
- 서버 단위의 이중화이다
- DNS 또는 로드밸랜서를 이용하여 여러 서버로 부하를 분산시킨다
- DNS 방식의 경우 서버가 정지된 경우에도 전달되기 때문에 안정성을 중시하는 경우 부적합하다
- 로드밸런서의 경우 서버에서 장애가 발생하면 감지하여 자동으로 제외 시킨다
DB 연결 이중화
- AP 서버에는 DB 서버에 접속 시 사용할 연결들을 생성해 두는 Connection Pooling 기능이 있다
- DB 연결을 유지하여 연결/해제 시 걸리는 시간이나 리소스를 아껴 고속으로 처리할 수 있는 장점이 있다
- 연결이나 세션 설계에 대한 일반적인 개념을 숙지 해야한다
- AP 서버의 병렬값과 최소/최대값을 동일하게 설정한다 (연결 오버헤드 경감)
- 방화벽 유무를 확인한다 (사용하지 않은 세션이 자동으로 제거될 수 있어 정기적으로 폴링하는 등의 대책이 필요)
5. DB 서버 이중화
서버 이중화(액티브-스탠바이)
- DB 이중화의 주류는 액티브-스탠바이형의 클러스터 구성이다
- 이 구성은 서비스를 병렬로 실행할 수 없고 데이터 일관성을 중시하는 서비스/시스템에 적합하다 (DB, 파일서버, JOB관리 시스템)
- 서버가 정상 동작하는지 확인하기 위한 구조로 하트비트, 투표 장치 같은 기능이 존재한다
- 클러스터 소프트웨어에서 등록된 서비스에 이상이 발생하면 서비스를 정지하고 대기하고 있던 스탠바이 측 서비스를 시작해서 서비스를 유지시킨다. 일반적으로 십여 분 정도의 정지 시간으로 서비스를 재개할 수 있다
서버 이중화(액티브-액티브)
DB 서버에 대한 확장 가능한 이중화 아키텍처로 두 가지를 소개한다
Shared Nothing (샤딩)
- 노드별로 디스크를 가지고 있어서 데이터가 분산되는 방식이다
- 노드를 추가로 배치하기 쉽다
- 대량의 데이터를 검색하는 경우는 데이터가 분산돼 있기 때문에 유리하지만, 갱신 시에는 데이터 분산 위치를 검토하기 때문에 느려진다
- 안정성을 고려할 경우에는 데이터 복제 기능을 이용해야 한다 (커버링 = 다운된 서버의 내용을 이어받아 처리하는 구성)
Shared Everything
- 디스크, 데이터를 모든 노드가 공유하는 방식이다 (공유 디스크가 필수라 클라우드에서는 사용하기 어렵다)
- 장애가 발생해도 다른 노드로 쉽게 처리를 계속할 수 있다
- 모든 노드가 같은 데이터에 액세스할 수 있지만, 배타적 제어나 데이터 경합 때문에 처리 속도가 저하된다
6. 네트워크 장비 이중화
L2 스위치 이중화
- L2 스위치를 본딩 등의 기술로 이중화 하고 있다
- 서버의 두 개의 포트를 서로 다른 스위치에 꽂아서 스위치 장애에 대비한다
L3 스위치 이중화
- L3 스위치 이중화는 기본적으로 액티브-스탠바이다
- L3 스위치는 게이트웨이로 주로 사용되기 때문에 이중화가 매우 중요하다 (웹 시스템에서 게이트웨이가 다운되면 거의 모든 서비스가 정지됨)
네트워크 토폴로지
- 네트워크에서 출발지부터 목적지까지의 경로를 복수로 만드는 이중화가 필요하다
- 단, 경로가 다수 존재하면 안정성 측면에서 좋지 않기 때문에 STP(Spanning Tree Protocol)을 이용하여 해결할 수 있다
- STP를 이용하면 논리적으로 포트를 절단(블로킹 포트)할 수 있으며, 장애 시 통신 가능한 경로를 재계산한다
- 대표적인 네트워크 구성으로 사다리형 패턴이 있다
7. 감시
감시란?
- 시스템 서비스를 안전하게 지속하기 위해서 감시는 필수적이다
- 감시에는 생존 감시, 로그(에러) 감시, 성능 감시가 있다
- 실제로 경고가 발생하면 어떤 식으로 대처해야 하는지 정해야 한다. 행동으로 연결되지 않는다면 의미가 없다
- 처음에는 많은 항목을 감지하도록 하고, 불필요한 경고를 걸러내서 항목을 줄여 나가는 것이 좋다
생존 감시
- ping 명령을 정기적으로 실행해서 서버 인터페이스에 대한 통신을 확인하는 ping 감시가 있다
- OS 의 ps 명령을 이용하여 중요한 프로세스 생존을 감시하는 것도 주요하다
로그 감시
- OS나 미들웨어가 출력하는 로그 파일에는 시스템 유지를 위한 중요 정보가 포함돼 있다
- 로그 감시 프로세스는 중요하다고 인지하고 있는 로그 출력문을 미리 저정해 두고 있다가 동일한 로그가 발생하면 감시 서버에게 보고하는 방식이다
- 대부분의 로그는 [alert], [error], [notice] 등의 로그 레벨 문자열이 붙어있기 때문에 주로 키워드로 등록한다
성능 감시
- 성능 감시는 디스크 사용률이나 메모리 사용 현황, 디스크 고갈 등의 리소스 상태 파악과 네트워크 액세스 지연, 디스크 액세스 시간 등의 응답 상태를 파악하는 것이다
- OS 의 df, vmstat, sar 와 같은 명령으로 정보를 취득해서 상황을 통계적으로 판단하는 등의 방식이 가능하다
- 단, 시스템 통계를 수집하는 동작은 부하를 높일 수 있으니 감시 동작으로 인한 과부하를 주의해야 한다
감시 대상 | 감시 내용 |
CPU | CPU 사용률, CPU 대기 행렬 |
메모리 | 빈 메모리 양 |
DISK | 남은 용량, 디스크 액세스 시간 |
네트워크 | I/F 인바운드/아웃바운드 대역 사용률, 패킷 손실 |
HTTP(웹 서버 고유) | HTTP 요청의 응답 시간, 초당 HTTP 요청 처리 수, 초당 HTTP 세션 수 |
JAVA(AP 서버 고유) | 메모리 힙(Heap) 크기, 가비지 컬렉션 횟수 |
DATABASE(DB 서버 고유) | 영역의 남은 용량, 캐시 사용률, SQL 응답 |
콘텐츠 감시
- 콘텐츠 감시는 웹 화면이 정상적으로 보여지는지 확인하기 위한 웹 시스템 특유의 감시다
- 일반적으로 콘텐츠 감시는 로드밸런서가 담당한다
- 로드밸런서에 감시 대상 URL(Health Check URL)을 등록해두면 주기적으로 요청을 해서 정상 응답하지 않으면 장애가 있다고 판단해서 해당 웹 서버에는 요청을 할당하지 않는다
8. 백업
백업이란?
- 장애 대책을 위해 이중화 등을 도입해서 서비스를 지속하는 것도 중요하지만, 만일의 경우를 대비해서 백업을 만들어 두는 것도 매우 중요하다
- 이중화와 크게 다른 점은 데이터를 복제해서 별도 장소에 보관한다는 것이다
- 복구 지표는 시스템의 특징에 따라 정해서 구축해야 한다 (비용 이슈)
- RTO(Recovery Time Objective) : 복구 목표 시간 - 복구에 얼마나 걸리나?
- RPO(Recovery Point Objective) : 복구 기준 시점- 어느 시점으로 복구하나?
시스템 백업
- 시스템 백업은 OS나 미들웨어 등 일반 서버의 로컬 디스크 영역을 백업하는 것이다
- OS나 미들웨어는 설치해서 설정이 끝난 후 많은 변경이 발생하지 않는다. 이 때문에 백업 빈도는 데이터에 비해 적은 편이다
- 초기 구축 후, 일괄 처리 적용 시, 대규모 구성 변경 시 백업을 실시하며 OS 명령 또는 백업 소프트웨어를 사용한다
- 가독중인 서비스는 백업할 수 없다. 임시 파일이나 프로세스 가동 정보도 백업에 포함되어 복구시 정상 가동되지 않는 경우가 있기 때문이다
- 시스템 백업은 안전을 고려해서 계획된 시스템 정지 일정에 맞추어 실시해야 한다
데이터 백업
- 매일 변경되는 데이터가 손실되지 않도록 하는 백업으로 취득 빈도가 높기 때문에 서비스가 가동 중인 상태라도 백업이 가능한 구조가 필요하다
- 데이터베이스 시스템은 일치성 보장 기능이 필수라서 데이터 자체와 데이터 갱신 내역이 기록돼 있는 저널(트랜잭션 정보)를 모두 취득하는 방식을 사용한다
- 데이터베이스가 망가진 경우 일관성 있는 데이터를 복구 후 저널 로그를 바탕으로 다시 트랜잭션을 실행해서 복구한다
'소프트웨어공학, CS' 카테고리의 다른 글
성능 향상을 위한 인프라 구조 (0) | 2021.08.04 |
---|---|
HTTP 에 보안을 더한 HTTPS (0) | 2021.05.09 |
HTTP 의 약점 (0) | 2021.05.05 |
- Total
- Today
- Yesterday
- AWS
- 조건부 로직
- 지시의 언어
- Debug
- 일잘러
- 그림으로 배우는 HTTP & Network
- 코드악취
- Debugging
- Debug It! 실용주의 디버깅
- 질의함수
- 디버깅
- 마틴파울러
- 제어플래그
- 리팩토링
- 안심 첫 문장
- 위임
- 박소연
- Refactoring
- 일 잘하는 사람은 단순하게 말합니다
- 그림으로 공부하는 IT 인프라 구조
- amazon vpc
- amazon aurora
- 리팩터링이란
- 코드스멜
- 매개변수화
- SSL
- https
- aws fargate
- HTTP
- 변경함수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |