“인프라 엔지니어의 교과서” 를 읽고 리뷰
1) 인프라 설계
인프라 만드는 목적 이해하고 조건을 기준으로 정리
그 다음 그 조건에 맞는 적절한 기획서와 설계서 작성
2) 인프라 구축
기기의 운반과 조립, 장착, 설치, 설정, 동작 테스트, 부하 테스트
3) 인프라 운영
시스템 구성
서버 선정
네트워크 구성
db 설계
운영시스템 선정
퍼실리티+스토리지+네트워크
서버의 정의 : 클라이언트가 요청하는 정보를 제공하는 컴퓨터
cpu/메모리/디스크/RAID(RAID 구성하면 디스크 I/O 성능(서버와 스토리지 사이에 주고받는 데이터의 읽기, 쓰기 성능) 높일 수 있음) 구성으로 성능 높일 수 있음
형태
ex] 랙 마운트 : 데이터 센터나 서버 룸에 설치된 랙 / 타워형 서버 : 사내서버, 사무실, 점포
역할
ex]
db 서버 : db정보를 제공하는 서버
이메일 서버 : 이메일 관리 서버
DNS 서버 : 도메인 관리 및 제공하는 서버
웹서버 : 웹사이트 관리하는 서버
⇒ NHN 데이터 센터 = NHN 플레이 허브
이러한 데이터 센터는 “전기,온도,네트워크,보안,재해대책 등이 충분히 고려된 IT 인프라 구축에 최적의 환경 제공” 합니다.
데이터 센터를 놓기 위해 따져야 할 조건(등등의 조건들을 확인해야하고 네트워크 장비설치 등의 종류 중, 보다 효율적인것을 선택해야합니다.)
전력용량 : 서버를 랙에 설치할 때는 물리적인 설치 가능 대수뿐만 아니라 전력 사용량도 엄밀하게 계산해야함
물리서버 : 데이터베이스 서버, 애플리케이션 서버
가상 서버 : 웹 서버, 개발서버, 메모리 db
<물리서버를 가상화할 때의 장단점>
장점
- 자원비용절감
- 하드웨어 자원 쉽게 늘리거나 줄일 수 있음
- 기존 물리장비에서 사용하던 서버나 애플리케이션을 클라우드 기반의 가상화 환경으로 마이그레이션 할 수 있음
- 재해 시 복구 easy
단점
- 다른 게스트 운영체제가 하드웨어 자원을 많이 사용하면 또 다른 게스트 운영체제의 동작이 불안정해짐
- 한 번 만들어진 게스트 운영체제는 이후에 사용하지 않아도 삭제되지 않고 그대로 남기가 십상
하이퍼바이저란?
가운데 가상의 하드웨어 제공 + VM에 대한 라이플 사이클을 관리하거나 마이그레이션, 실시간 리소스 할당, VM 정책 정의 등 다양한 기능 수행
윈도우 : Hyper-V / 리눅스 : KVM/QEMU
요약하자면, 가상 머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어 / 실제 물리 자원을 가상화하고 이를 가상머신이 사용할 수 있도록 중간에서 매개체 역할을 하는 소프트웨어
여기서 잠깐! 🖐
클라우드와 가상화의 차이점
- 가상화
단일한 물리 하드웨어 시스템에서 여러 시뮬레이션 환경이나 전용 리소스를 생성할 수 있는 기술- 클라우드
클라우드는 네트워크 전체에서 확장 가능한 리소스를 추상화하고 풀링하는 IT 환경
인터넷 너머에 존재하는 클라우드 사업자의 컴퓨터에서 처리하는 서비스
“즉 가상화는 기술이고 클라우드는 환경(개념)이란 것이 두드러진 차이점”
리눅스
윈도서버
유닉스
라우터 : 수신한 패킷을 적절한 경로로 전송
라우팅 테이블 관리법 : 스태틱 라우팅 / 다이내믹 라우팅
라우터가 패킷을 받으면 패킷에 있는 목적지인 IP 주소를 보고 패킷을 적절한 라우터로 전송
LAN(로컬네트워크)끼리 연결하는 장비
L2/L3 스위치 : 업무용 스위칭 허브
L3 스위치 : 라우터 기능이 추가된 L2 스위치
L2 스위치 : 목적지가 MAC 주소를 보고 적절한 포트로 프레임 전송
L4/L7 스위치 : 부하분산기능(로드밸런서)가 달린 L3 스위치
<용어>
“네트워크 인터페이스를 묶는다”
여러개의 네트워크 인터페이스에 같은 IP 주소 등을 부여해서 Active-Active / Active-Standby 구성으로 통신하도록 설정하는 구조
내장애성이 올라가고 사용할 수 있는 대역 늘어남
한쪽이 고장나도 다른 한쪽 인터페이스 기능 사용 가능
예전과 달리, 스토리지는 대용량화, 고속화, 고도화로 발전됨
데이터를 저장하는 장치 = 스토리지
로컬 스토리지 + 외부 스토리지 = 스토리지
감시 솔루션
장비의 가동 상황 전반을 감시하기 위해 감시 솔루션 이용
나기오스
장애가 발생한 이력을 데이터베이스가 아닌 텍스트 파일로 저장
웹 설정화면이 없고 설정을 텍스트 파일로 저장
자빅스
서버 및 네트워크 디바이스의 오토 디스커버리
고급감시, 경고, 가시화 기능
캑타이
자산관리도구
많은 장비를 효율적으로 관리하려면 자산관리 도구를 활용하는 것이 편리
어느정도 규모까지는 엑셀등으로 가능->관리 대상 늘어날수록 자산 관리의 시스템화 필요
배포 시스템
리눅스에서 rsync명령, 윈도에서 robocopy명령으로
보안
IT 인프라 전체에서 하는 대책 : LAN내에 방화벽이나 IDS(침입감지시스템) 를 설치하는 방법
서버단위로 이루어지는 보안 대책 : 백신 등의 소프트웨어를 서버에 설치하는 방법
퍼실리티 관리 시스템
데이터 센터의 물리적 환경을 감시하는 시스템
스토리지 관리 시스템
스토리지를 집중적으로 관리할 수 있는 시스템
(보안대책 검토에는 무엇을 지키기 위한 보안인지 명확히 해두어야합니다.)
무엇을 지키기 위한 보안인가?
보안 담당자는 정기적으로 보안진단을 해서 적시에 부적절한 보안 설정을 개선하고 실시간으로 부정 침입과 공격을 감시하다가 뭔가 이상이 있으면,
즉시 네트워크 연결 차단하고 서버 담당자에게 전달해 대책을 의뢰하는 일을 계속함
서버시 보안 홀이나 권한 설정 실수를 완전히 제거했어도 운영을 시작하고 나면 새로운 보안 패치가 속속 등장하므로 계속 보안 패치를 적용할 필요가 있음
서버에는 보안구멍이 될 수 있는 요소가 많이 있음
인프라는 정지하지 않고 계속 가동돼야하므로 장애에 대응할 수 있는 환경이 필요합니다.
하드웨어는 가능한 서비스를 멈추지 않도록 하는 방향으로 진화함
핫스왑(서비스를 가동한 채로 이중화된 부품 중 고장난 부품을 교환)기술이나 ECC(이상을 감지하면 자동으로 보정하는)기술은 하드웨어의 가용성을 높여주는 기술의 한 예
소프트웨어는 사람이 만드는 것이므로 버그가 섞여있기 마련
테스트를 하지만, 그렇지 못한 조작이나 혹은 악의적 접근으로 시스템 이상 발생할 수 있음
인프라 엔지니어=장애 감지를 위해=감지솔루션이 필요
IT 시스템에서는 병목이 한 군데만 있어도 시스템 전체의 응답속도에 악영향을 미칩니다.
db 서버 병목 : https://clarkshim.tistory.com/177
예) 웹서버 부족문제와 데이터베이스 서버의 메모리 부족 문제가 동시에 일어났을 때 아무리 데이터베이스 서버의 메모리를 증설하더라도 웹 서버 부족이 해결되지 않는 한 시스템 전체의 응답 속도는 개선되지 않음
예) 접속 수가 급증하는 시스템에서 대응을 하지 않으면 거의 모든 하드웨어 자원이 동시에 고갈되는 상황 생김
병목이 발생하는 부분 : 코어 스위치의 수용량, L2 스위치의 수용량, 웹 서버의 메모리 부족, 데이터 베이스 서버의 cpu와 메모리 부족, 데이터베이스 서버의 디스크 I/O
네트워크 장비의 병목 해결
각 포트의 물리 인터페이스의 속도가 트래픽을 감당하는가 ?
서버를 분산해 트래픽 분산하거나 인터페이스를 빠른것으로 변경
네트워크 장비의 전송 능력에 한계는 없는가 ?
네트워크 장비를 교체하거나 캐시 메모리 추가 등을 시행
서버 장비의 병목 해결
프론트엔드 서버의 응답이 저하 되었는가?
프론트엔드 문제인지 백엔드 문제인지 파악
CPU/메모리/네트워크/디스크IO 실시간 이용상황 파악하고 하드웨어 자원이 과도하게 사용되는 서버에 문제가 있다고 판단
디스크 I/O 값이 크다고 무조건 디스크가 병목이라고 단정할 순 없다. 하드웨어 고장 가능성도 있기 때문이다.
인프라는 인적자원, 데이터 센터 공간, 서버, 네트워크 장비 등 온갖 자원이 동시에 부족해지는 가운데 우선 순위를 매겨가며 잇달아 대책을 세워야하는 세계
1) 업체 지원의 필요성
업체 지원 필요없으면 관리 비용 불필요한 것 이용
업체 지원 필요하면 유지보수 서비스 있는 것 이용
2) 사용언어
사용언어에 따라 시스템 구성 달라짐
3) 액세스 양
대규모라면 예상되는 부하를 산정해 하드웨어 자원을 충분히 확보하고 적절히 부하 분산
4) 가용성
가용성(서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질) 높이기 위해서,,
스케일 아웃 구성에서는 저렴한 서버를 여러 대 준비해서 중복 구성
스케일 업 구성에서는 비싸도 고장이 안나는 엔터프라이즈 서버 사용
5) 외부 업자 이용
윈도우와 리눅스
SI 기업에서 지지받는 윈도, 웹 기업에서 지지받는 리눅스
저번 발표 때 팀장님이 하셨던 질문 : 웹 서버 2대를 사용하는 개념과 그 이유
3월 15일 : L4/L7 에 대한 개념을 정리한 블로그 글
서버 성능을 높이는 방식 : scaleout/scaleup
특정한 설정 없이 scale out 했을 경우, 100명의 사용자가 존재하고 2대의 서버가 있다면 99명의 사용자가 서버 1에 접속하고 1명의 사용자가 서버 2에 접속할 수도 있을 것
이를 방지하기 위해 부하를 분산하는 작업이 필요 작업 = “로드밸런싱” /. 작업을 담당하는 장비 =.”로드밸런서”
부하 분산을 위해서 가상 IP를 통해 여러 서버에 접속하도록 분배하는 기능
처리하는 요청의 양이 줄어들어 안정적인 서비스 운영이 가능하다.
성능 향상, 무중단 서비스 구축(안정성)
로드밸런서에도 부하가 많이 물리면 병목현상(Bottle Neck)이 생길 수 있으므로 이중화 하는 것이 좋다
클라이언트 브라우저에서 aaa.com 주소 입력
클라이언트에 설정된 DNS 서버로 aaa.com ip 주소 문의
DNS 서버는 로드밸런서의 ip(vip) 주소를 반환
획득한 vip 주소를 클라이언트에 전송
클라이언트에서는 로드밸런서의 vip 주소로 http 요청
로드밸런서는 로드밸런싱방법(라운드로빈 등)을 통해 서버에게 요청 전송
서버 작업 결과받으면 로드밸런서는 전달받은 http 결과를 클라이언트에 전송
로드밸런서의 이중화 : 로드밸런서도 장애가 날 수 있으므로 이중화 구성이 필요!
장점
네트워크 구성이 비교적 자유로워짐(어느 스위치에 L4 스위치를 연결해도 부하분산이 가능)
요청에 대한 L4 스위치의 수용력 증가
팀장님 : 웹 서버 2대를 사용하는 개념과 그 이유를 설명하세요
저의 대답 : 인터넷이 되는 서버와 인터넷이 되지 않는 서버로 분리하기 위함인 것 같습니다.
'분리'에 초점을 두다 보니 과거에 과제 리뷰를 하면서 피드백 받았던 '인터넷과 관련된 보안때문에 분리한다' 라는 개념이 떠올랐습니다.
팀장님께 받은 답변 :
인터넷과 관련해 보안 때문에 분리한다는 건 좀 다른 얘기인데 예를 들어 www.naver.com을 치고 들어간다면 웹서버는 인터넷구간이니까 공인IP를 달고 있어야 이걸 받을 수 있어서 인터넷구간에 있어야 하고 그 다음 스텝에 있는 서버들은 굳이 인터넷 구간에 있을 필요가 없으니 사설ip를 쓰면 될 것 같아요 요기에 해당하는 대표적인 서버가 DB서버일 거구요
분리에 대한 개념을 더 찾아보니 제가 외부망/내부망을 분리하는 망분리 개념과 헷갈렸다는 것을 알았습니다.
‘인터넷에 접속되는 외부망(WAN)'과 ‘사내서버가 연결되는 내부망(LAN)' 즉, 인터넷망과 업무망을 따로 분리함으로 인터넷망을 타고 업무망으로 들어올 수 있는 경로를 차단하는 것입니다.
image.png
가상화 기술이 적용된 망분리 PC는 일반적으로 망선택 버튼이나 스위치를 따로 달아, 인터넷망을 또는 내부망을 선택 사용하게 하고 있음
여기서 잠깐! 망분리에 대한 내용을 공부하다가 질문이 생겼습니다.
<참고>
사설 IP : 내부 네트워크 ( 예, 공유기 내부 네트워크 ) 상에서만 사용되는 주소로 인터넷상에서는 사용할 수 없는 IP주소
공인 IP : IP 주소 할당 공인기관에서 할당한 인터넷 상에서 사용할 수 있는 IP주소
질문 :
내부망에서 사용하는 사설 IP 와 외부망에서 사용하는 공인 IP를 서로 변환하기 위해서는 NAT라고 하는 IP 주소 변환이 필요합니다. 그리고 해당 블로그에서는,,L4 스위치 예시를 통해 들고 있습니다. L4 스위치는 로드밸런서의 종류 중 하나이며, NAT는 로드밸런싱의 역할 중 하나입니다. 그렇다면, 망분리를 위해 로드밸런서를 사용한다고 생각해도 될까요?
전임님께서 네트워크 팀원분에게 대신 질문/답변받아주셨습니다.
망분리라는 의미=네트워크를 분리한다는 더 큰 개념 속에 (공인망/사설망을 분리한다는 개념+내부망안에서도 보호해야할 중요 네트워크를 따로 분리하는 개념)을 포함하는 것
사설 IP 가지고 있는 시스템에서 외부랑 통신하기 위한 기술은 NAT이며, L4 스위치는 로드밸런싱하는 방식 중 하나가 맞습니다.
로드밸런싱 목적 = 부하분산 / 가용성 확보
로드 밸런싱하는 여러가지 구조 중 특정 방식에서 NAT 개념이 같이 사용됨
망분리를 위해 로드밸런서를 사용한다고 생각해도 될까요?
라기 보다는 로드밸런서를 사용하게 되면, 망분리가 될 수도 있다! 의 의미가 더 옳다
따라서, 로드밸런싱의 목적은 기본적으로 부하분산/ 가용성 확보 등이고 로드밸런서를 사용하면 망분리를 구성할 수도 있다
[그림으로 배우는 클라우드 컴퓨팅]
오토스케일링(스케일아웃업 해주는 "기능") vs 스케일아웃(서버대수 늘리는 "개념")
(서버의 성능향상)
서버 성능 향상
스케일 아웃 : 성능이 부족해지면 서버의 수를 늘려서 수용량을 늘림
스케일 업 : 성능이 부족해지면 메모리 증설 등 부품을 추가/교환하거나 상위 기종으로 교체해 서버 성능을 높임
가용성,비용을 생각했을때, 스케일업<스케일아웃 이라고 생각했습니다.
왜냐하면, 새로운 장비로 교체하는 것이 더 많은 비용이 들거라고 생각했기 때문입니다. 또한 가용성 부분에서 스케일아웃이 훨씬 안전하지 않을까? 라고 생각했습니다. 하지만 답변을 받은것은 다른내용이었습니다.
스케일업
스케일업은 서버 스펙만 올려주면 되기 때문에 젤 빠르고 간단하게 성능을 올릴 수 있는 방법입니다.
여러대를 추가하게 되면 관리 측면에서 어려움이 많다.
비용적으로 따졌을 때에도 일단은 있는 서버에서 메모리/CPU 등을 고사양으로 올리는게 같은 스펙의 새로운 서버를 추가하는것보다 저렴하다.
그런데 운영하다보면 무조건 스펙을 올린다고 해결할 수 없는 문제들이 있고, 그럴 때 샤딩 (스케일 아웃)을 고려합니다.
샤딩을 하게 되면 대부분 데이터를 나누어서 넣어줘야하기 때문에 개발측면에서 고려해야 할 문제들이 많아지게 됩니다.
스케일 업 -> 비교적 저렴. 비교적 빠르고 간단. 어플리케이션에서 변경해야 할 사항 없음.
스케일 아웃 -> 비교적 비쌈. 비교적 복잡한 작업. 어플리케이션에서 변경해줘야 할 사항 있을 수 있음 (데이터를 분산해서 추가)
따라서, 서버성능향상이 필요할때에는 스케일업이 우선적입니다.
라고 생각했지만,, 팀장님께서 대규모 인프라 구성 시에는 스케일아웃이 우선이라고 답변 해주셨습니다. 장비 하나일때는 스케일업이 우선일 수 있지만, 서버 대규모 구성시에는 스케일아웃 우선~!!