DNS란
- www.xxxx.com 과 같이 사람이 읽을 수 있는 이름을 192.0.0.1과 같은 숫자 IP주소로 변환하여 컴퓨터가 서로 통신 할 수 있도록 도와주는 서버이다.
- DNS 시스템은 이름을 숫자로 매핑하여 마치 전화번호부와 같은 기능을 한다.
- DNS 서버는 이름에 대한 요청을 IP주소로 변환하여 최종 사용자가 도메인 이름을 웹 브라우저에 입력할 때 해당 사용자를 어떤 서버에 연결할 것인지는 제어한다. 이 요청을 쿼리 라고 한다.
Domain 구조
- 도메인은 전 셰계적으로 고유하게 존재하는 이름이다.
- 정해진 규칙에 따라야 하며 임의로 변경,생성할 수 없다.
- 모든 도메인은 "." (닷) 또는 루트라 불리는 도메인 아래에 그림과 같이 역트리 구조로 계층적으로 구성되어 있다.
- 루트 아래 단계를 최상위 도메인(TLD: Top Level Domain)이라고 부르며, 그 다음 단계는 도메인(SLD : Second Level Domain) 이라고 한다.
- 일반 최상위 도메인과 국가 최상위도메인으로 구분하며 일반 최상위 도메인은 스폰서 도메인과 언스폰서 도메인으로 구분된다.
DNS 동작원리
- 사용자가 www.naver.com 을 브라우저에 입력한다.
- Local DNS에게 IP 주소를 질의하여 캐시된 것에 없으면 다른 DNS 서버에 전달 (Root DNS)
- ROOT 로 부터 com 도메인을 관리하는 TLD이름 서버 정보 전달 받는다.
- COM DNS로 질의 한다.
- naver.com DNS 정보를 전달 받는다.
- www.naver.com 호스트네임에 대한 IP 주소를 질의 한다.
- IP 정보를 전달받는다.
- Local DNS는 www.nvaer.com에 대한 IP 주소를 캐싱을 하고 IP 주소 정보를 전달한다.
※ ROOT -> COM -> xxx.com 서버를 차례대로 질의해서 답을 찾는 과정을 Recursive Query라고 한다.
DNS ROUND ROBIN
라운드 로빈 DNS이란?
- 별도의 SW,HW로드벨런싱 장비 없이 오직 DNS만을 이용하여 도메인 레코드 정보를 조회하는 시점에서 트래픽을 분산하는 기법이다.
- 웹 뿐만 아니라, 도메인을 사용하는 모든 서비스(FTP,SMTP 등)에 사용이 가능하다.
라운드 로빈 원리
- 웹 서비스를 담당할 여러 대의 웹 서버는 자신의 공인 IP를 각각 가지고 있다.
- 사이트 접속을 위해 사용자가 해당 도메인 주소를 브라우저에 입력하면 DNS는 도메인의 정보를 조회하는데 이떄 IP주소를 여러 대의 서버 IP리스트 중에서 라운드 로빈 형태로 랜덤하게 하나 혹은 여러개를 선택하여 사용자에게 알려준다.
- 결과적으로 웹 사이트에 접속하는 다수의 사용자는 실제로는 복수의 웹 서버에 나뉘어 접속하도 되면서 자연스럽게 서버의 부하가 분산되는 방식이다.
라운드 로빈 DNS는 여러개의 IP주소를 결과로 돌려준다.
- 사용자의 OS 애플리케이션에 따라 동작이 다르다.
- 여러개의 IP 중 제일먼저 조회된 IP를 선택, 무작위로 IP를 선택한다.
- 또는 선택 IP 접속이 안되면 그다음 조회된 IP접속하도록 호직을 추가할 수 있다.
💥단점💥
- 지리적으로 복수의 웹서버가 멀리 떨어져 있어 실시간 헬스 체크가 어렵다.
- 서버가 문제가 생겨 서비스가 불가한 상태라도 DNS는 이를 인지 못하고 도메인 조회 결과에 포함시킨다.
- 그래서 HA(High- Abaliability)용도로 적합하지 못한다.
- DNS 조회 정보의 캐싱
- 모바일 사이트 등에서 문제가 발생한다.
- 스마트폰의 접속은 캐리어 게이트웨이 라고 하는 프록시 서버를 경유한다.
- 프록시 서버에서는 이름변환 결과가 일정 시간 동안 캐싱되므로 같은 프록시 서버를 경유 하는 접속은 항상 같은 서버로 접속된다.
- PC용 웹 브라우저도 DNS 질의 결과를 캐싱하기 때문에 균등하게 부하 분산되지 않는다.
- DNS 레코드의 Time To Live(TTL)값을 짧게 설정함으로써 어느 정도 해소가 되지만 TTL에 따라 캐시를 해제하는 것은 아니므로 반드시 주의가 필요하다.
- 웹 페이지, 스트림 된 영상, 데이터베이스 쿼리 결과만 캐싱 하는 것이 아닌, DNS가 조회한 도메인의 IP 정보도 네트워크 상에서 캐싱한다는 것❗❗
- 도메인 설정 작업을 할때에는 캐싱 주기 설정을 고민해야 한다.
- 캐싱을 무조건 길게 하면 관리자가 급하게 DNS 정보를 바꿔도 인터넷상에서 적용되려면 해당 시간 이상으로 기다려야 한다.
- 바뀐 DNS 정보가 인터넷상의 네임 서버에 전파 되는 데 오랜 시간이 걸리기 때문이다.
- 반배로 캐싱 주기를 짧게 하면 빠른 업데이트 반영은 가능하지만, 도메인 조회가빈번해지면서 사용자가 웹 사이트에 접속하는데 필요한 시간이 증가한다.
- 모바일 사이트 등에서 문제가 발생한다.
라운드 로빈 DNS는 가용성을 제공하지 않기 때문에, 무중단 서비스가 필요한 시스템에는 어울리지 않는다.
단순히 여러 대의 웹 서버로 트래픽을 부하 분산할 때 가장 편리하게 사용할 수 있는 옵션이다.
가용성이 필요한 시스템의 경우, Health Check기능이 포함된 DNS 서비스를 사용하는 것이 좋다.
AWS Route53, Dyn DNS 서비스가 좋은 예다.
라운드 로빈 DNS 단점 보완
- GSLB(Global Server Load Balancing) DNS 서비스를 사용하여 도메인 조회 시, 로드 밸런싱과 동시에 Health check 기능을 사용한 HA구성이 모두 가능하도록 구성하는 것 또한 안전한 방법이다.
- 로드벨런서 또한 SPOF(Single Point Of Faliure)가 될 수 있으므로, 2 대 이상의 로드밸런서와 각각의 공인 IP를 준비하고, GSLB로 트래픽을 로드밸런서에 나누는 방법도 많이 사용한다.
- 로그인 세션 등 세션의 유지 서버-클라이언트 간에 필요한 경우, 접속 중이던 클라이언트가 DNS에 의해 다른 서버IP를 할당받아 다른 서버에 접속이 되면 기존 세션이 끊어질 수 있다.
- 이런 경우 웹 서버끼리 세션을 공유할 수 있도록 세션 클러스터링 설정을 하거나, 로드 밸런서에서 IP나 Cookie 값을 사용하여 동일한 서버로 접속되도록 stickness 설정을 해야 하는데, 이 부분은 L7 스위치로 해결할 수 있다.
라운드 로빈 상식 기반 단점을 해소하는 DNS 스케줄링 알고리즘(일부)
- Weighted round robin (WRR)
- 각각의 웹 서버에 가중치를 가미해서 분산 비율을 변경한다. 물론 가중치가 큰 서버일수록 빈번하게 선택되므로 처리능력이 높은 서버는 가중치를 높게 설정하는 것이 좋다.
- 접속 클라이언트 수가 가장 적은 서버를 선택한다. 로드밸런서에서 실시간으로 connection 수를 관리하거나 각 서버에서 주기적으로 알려주는 것이 필요하다.
Least connection
'CS > Network' 카테고리의 다른 글
HTTPS 동작원리 (0) | 2023.01.08 |
---|---|
HTTP와 HTTPS (0) | 2021.05.11 |
TCP 와 UDP (0) | 2021.05.05 |
TCP - handShake (0) | 2021.05.04 |
HTTP의 GET과 POST (0) | 2021.05.03 |
댓글