CS/Network

DNS Round Robin

whyWhale 2021. 5. 14.

DNS란


  • www.xxxx.com 과 같이 사람이 읽을 수 있는 이름을 192.0.0.1과 같은 숫자 IP주소로 변환하여 컴퓨터가 서로 통신 할 수 있도록 도와주는 서버이다.
  • DNS 시스템은 이름을 숫자로 매핑하여 마치 전화번호부와 같은 기능을 한다.
  • DNS 서버는 이름에 대한 요청을 IP주소로 변환하여 최종 사용자가 도메인 이름을 웹 브라우저에 입력할 때 해당 사용자를 어떤 서버에 연결할 것인지는 제어한다. 이 요청을 쿼리 라고 한다.

 

Domain 구조


Domain 구조

  • 도메인은 전 셰계적으로 고유하게 존재하는 이름이다.
    • 정해진 규칙에 따라야 하며 임의로 변경,생성할 수 없다.
  • 모든 도메인은 "." (닷) 또는 루트라 불리는 도메인 아래에 그림과 같이 역트리 구조로 계층적으로 구성되어 있다.
  • 루트 아래 단계를 최상위 도메인(TLD: Top Level Domain)이라고 부르며, 그 다음 단계는 도메인(SLD : Second Level Domain) 이라고 한다.
  • 일반 최상위 도메인과 국가 최상위도메인으로 구분하며 일반 최상위 도메인은 스폰서 도메인과 언스폰서 도메인으로 구분된다.

 

DNS 동작원리


DNS 동작 원리

  1. 사용자가 www.naver.com 을 브라우저에 입력한다. 
  2. Local DNS에게 IP 주소를 질의하여 캐시된 것에 없으면 다른 DNS 서버에 전달 (Root DNS)
  3. ROOT 로 부터 com 도메인을 관리하는 TLD이름 서버 정보 전달 받는다.
  4. COM DNS로 질의 한다.
  5. naver.com DNS 정보를 전달 받는다.
  6. www.naver.com 호스트네임에 대한 IP 주소를 질의 한다.
  7. IP 정보를 전달받는다.
  8. 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)
    • 각각의 웹 서버에 가중치를 가미해서 분산 비율을 변경한다. 물론 가중치가 큰 서버일수록 빈번하게 선택되므로 처리능력이 높은 서버는 가중치를 높게 설정하는 것이 좋다.
  • Least connection
    • 접속 클라이언트 수가 가장 적은 서버를 선택한다. 로드밸런서에서 실시간으로 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

댓글