서버가 단 하나만 존재할 때 수천만명의 사람들이 서버에 동시 접속하면 어떻게 될까요? 하나의 서버는 부하를 감당하지 못할 수도 있을 것입니다. 이를 해결하는 방식에는 장비를 업그레이드하는 Scale-up방식과 장비를 여러개 두는 Scale-out방식이 있습니다.
서버가 딱 하나 있는데, 전 세계의 사람들이 이 서버에 동시에 접속한다면?
서버는 자신에게 오는 시스템 부하를 감당하지 못할거에요 이를 해결하는 방법에는, 해당 서버를 업드레이드하는 "SCALE-UP" 방식과, 장비의 대수를 추가하여 서버 부하를 나누는 "SCALE-OUT" 방식이 있습니다.
Scale-out 방식으로 여러 서버를 둔다면 해당 서비스에 접근하기 위해서는 서버마다 다른 IP가 필요하겠죠? 서버마다 다른 공인 IP를 부여한다면 사용자들마다 각각 다른 IP로 접속할 것이고, 운영자가 원하는대로 딱! 떨어지게 부하를 분산하기 어렵습니다. 운영자가 원하는대로 50:50 비율로 접속할거라는 예상이 맞아떨어지기는 어려울거에요, 1000명의 사용자가 있을때 서버 2대에 500명 : 500명 접속하지 않고, 999명은 A서버에, 1명은 B서버에 접속한다면, 고가의 비용을 들여 새로운 서버를 증설한것이 헛수고가 되어버리니까요
아.. 서버가 한두푼이 아닌데 이렇게 운영될거면 괜히 산거아니야?
이런 상황을 방지하기 위해 서버에 가해지는 트래픽의 부하를 분산하는 작업이 필요합니다. 이렇게 두개이상의 컴퓨터자원에 작업을 나누는것을 로드밸런싱이라고 하고, 이런 작업을 하는 장비를 로드밸런서라고 합니다
Data link 계층을 사용, Mac주소 기반 부하 분산
Network 계층을 사용, IP주소 기반 부하 분산
Transport 계층을 사용, Port 기반 부하 분산
Application 계층을 사용, 요청(URL) 기반 부하 분산
로드밸런서의 종류를 나누는 기준은 OSI 7계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 나뉩니다. 2계층을 기준으로 부하를 분산한다면 L2 로드밸런서, L2, L3 계층을 기준으로 부하를 분산한다면 L3장비 인거죠. 상위 계층으로 갈수록 섬세한 부하 분산이 가능하지만 가격이 비싸집니다.
로드밸런서는 3가지의 주요 기능을 통해 로드밸런싱을 진행합니다. (^^)
Network Address Translation(NAT)
사설 IP를 공인 IP로 바꿉니다.
Tunneling
데이터를 캡슐화하여 연결되어진 노드만 그 데이터의 캡슐을 풀어서 볼수있게 해줍니다.
Dynamic Source Routing protocol(DSR)
요청에 대한 응답을 할 때 로드밸런서가 아닌 클라이언트의 IP로 응답합니다.
로드(길) 밸런싱(균형) 길을 가는데 균형을 맞춰주는것입니다. 한도로에 차가 너무 많으면 복잡하니까 이차는 이쪽으로 이동시켜서 주행하도록 하자~의 개념인데, 이것을 네트워크화 시키면 "둘, 혹은 셋이상의 중앙처리장치 or 저장장치와 같은 컴퓨터 자원들에게 작업을 나눠 분배하는것을 의미합니다.
로드밸런서의 종류
물리적 프로세서 간의 작업을 스케쥴링 합니다.
네트워크 작업을 스케쥴링 합니다. 주로 저희가 하는 로드밸런싱은, 네트워크 로드밸런싱 입니다 (^^)
L2 (Data Link Layer)
사용자가 서비스를 요청하면 L4로 전달된 목적지 IP 주소를 real server IP 주소로 변조하고 MAC 주소를
변조해서 목적지를 찾아가는 방식입니다.
Bridge/Transparent Mode와 유사하지만 출발지(source) MAC 주소도 변조되는 방식입니다.
사용자가 real server에 접근할 때 목적지 IP는 L4 스위치 IP를 바라봅니다. L4에 도달하면 L4가 클라이언트에게 받은 목적지 IP 주소를 L4 IP 주소에서 real server IP와 real server MAC 주소로 변조합니다. 되돌아가는 IP는 L4의 IP pool의 IP 주소로 변조합니다.
사용자가 real server에 접근할 때 출발지와 목적지의 IP 주소를 변조하지 않고, L4에서 관리하는 real server의 MAC 주소 테이블을 확인해서 MAC 주소만 변조합니다.
로드밸런서도 장애가 날 수 있으므로 이중화 구성을 합니다. 평소에는 active된 로드벨런서로 연결 장애가 났을경우에는 standby(대기)중인 로드밸런서로 연결이 됩니다, 때문에 이중화된 로드밸런서에서 Health Check(장애여부 체크)를 하고, 장애로 여분 로드밸런서가 동작 할 경우 이를 통해서 서버에 접근 합니다.
로드밸런서 장비들의 스펙표를 보면 스펙을 설명하기 위한 특정 단어들이 있습니다. 이 단어들에 대해서 설명 드릴게요(^^)
초당 연결수(Connections per second)
출처: https://vaert.tistory.com/189 [Vaert Street:티스토리]