Last Updated on 1월 7, 2022 by Jade(정현호)
DNS 로드밸런싱
DNS 로드밸런싱 은 별도의 소프트웨어 나 하드웨어 로드밸런싱 장비를 이용하지 않고 DNS를 이용하여 도메인 정보를 조회하는 시점에서 다른 IP정보를 통해 트래픽을 분산하는 기법입니다.
사용 할 수 있는 환경은 Web 이외 도메인을 사용하는 모든 서비스가 가능 합니다.
FTP/SFTP, SMTP , 등등...
[참고] 해당 포스팅은 아래 DNS 설정 환경에서 추가 설정 하는 내용으로 이어지는 글 입니다.
포스팅 배경이 되는 DNS 설치 및 구성은 아래 포스팅을 보시면 됩니다.
DNS 기본 설정이 완료 되었다면 로드밸런싱 구성을 확인 해보도록 하겠습니다
DNS 라운드 로빈
웹 서버에서 사용 할 경우 사이트에 접속하는 사용자가 도메인 주소를 브라우저에 입력하면 DNS는 도메인에 등록된 여러개의 IP 리스트 중에서 라운드 로빈 방식으로 사용자에게 IP를 리턴 하여 알려주게 됩니다.
사이트에 접속하는 사용자는 알게 모르게 여러 개의 웹 서버에 나뉘어 접속하게 되면서 서버의 부하가 분산되는 방식 입니다.
DNS 조회의 결과는 1개 혹은 1개 이상 의 IP 를 반환 할 수 있습니다.
DNS 라운드 로빈 단점
1. DNS 를 이용한 라운드로빈 로드 밸런싱은 로드밸런스 전용의 소프트웨어나 하드웨어와 달리 Health check 에 대안 기능이 없습니다.
단순히 DNS의 질의시 등록된 다수의 IP가 RR 방식으로 정보를 반환하기 때문에 연결된 웹 서버 등의 HA 기능으로 사용하기에는 다소 어려움은 있습니다.
2. 사용자 환경이나 ISP DNS에 IP가 Caching 되어 있을 수 있습니다.
DNS는 Cache 주기(TTL) 를 사용함으로써 매번 DNS를 조회하는 형태가 아닌 IP 값에 대해서 캐싱을 일정 시간을 하게 됩니다.
이와 같이 로드밸런싱의 용도로 사용시 A 레코드의 캐싱 주기를 가급적 짧게 설정 하는 편으로 고려 하는 것이 좋을 것 같습니다.
DNS 설정
테스트 환경으로 아래와 같습니다.
DNS Server : 192.168.56.104
Web server 1 : 192.168.56.51
Web Server 2: 192.168.56.104
PC : Windows 10
zone 파일 수정
사용 중인 zone 파일을 수정하여 ip를 추가 합니다.
[root]# cd /var/named
[root]# vi hoing.io.zone
$TTL 3H
@ IN SOA ns.hoing.io. admin.hoing.io. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.hoing.io.
1 IN A 192.168.56.51
1 IN A 192.168.56.104
ns IN A 192.168.56.104
www 1 IN A 192.168.56.51
www 1 IN A 192.168.56.104
테스트 를 위해서 TTL 를 1 초로 낮게 설정 하였습니다.
실제로 사용시에도 적절한 TTL 값을 설정하여 사용 하시면 됩니다.
설정한 zone 파일 확인
[root]# named-checkzone hoing.io /var/named/hoing.io.zone
zone hoing.io/IN: loaded serial 1
OK
Bind 재시작
[root]# systemctl restart named
Apache 설치
apache 가 설치 되어 있지 않은 경우 아래와 같이 설치 및 기동 합니다.
[root]# yum -y install httpd
[root]# systemctl restart httpd
index.html 생성
어느 서버로 접속 하였는지를 구분하기 위해서 각 서버 별로 아래와 같이 index.html 파일을 생성합니다.
[root]# cd /var/www/html
[root]# mv index.html index.html.ori
[root]# vi index.html
# 서버 별로 각각 내용 입력
- 첫번째 서버용
<html><body><h1>It Server 1</h1>
</body></html>
- 두번째 서버용
<html><body><h1>It Server 2</h1>
</body></html>
방화벽에서 80번 포트 오픈 및 확인
[root]]# firewall-cmd --permanent --add-port=80/tcp
[root]# firewall-cmd --reload
[root]# firewall-cmd --list-all
접속 테스트 - 윈도우
이전 포스팅에서 아래와 같이 윈도우에서의 DNS 주소를 별도로 설정한 DNS 로 변경한 상태 입니다.
dns 정보를 flush 합니다.
C:\> ipconfig /flushdns
nslookup 로 조회
C:\> nslookup hoing.io
서버: UnKnown
Address: 192.168.56.104
이름: hoing.io
Addresses: 192.168.56.104
192.168.56.51
브라우저에서 접속 시도
Ping 테스트
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io
안녕하세요. 올려주신 내용 많이 도움이 되었습니다 감사합니다.
안드로이드 OTA 서버 구축을 하고있는데 국내/유럽에서 같은 도메인으로 호출을 합니다.(여건상 나눌수가 없나봅니다.) 하지만 OTA파일이 업로드되있는 서버는 국내서버/유럽서버가 따로 나누어져 잇구요. 하나의 도메인으로 호출을 하는데 DNS에서 써주신 로드 밸런싱처럼 국내/유럽서버 구분하여 DNS를 통해 분산(자기가 연결한 서버에 가까운곳에) 연결 시켜주는 기술도 있을까요?
안녕하세요
방법은 여러가지가 있을 것 같은데요
DNS 레벨에서의 방법은 (지금은) 딱히 생각나지는 않고요
먼저 생각 나는 것은 OTA 서버의 백엔드 앞에 아마도 Nginx 나 HAProxy 와 같은 reverse proxy 가 있다면 Nginx(Apache도 아마도 가능할것 같은데요) 에서 Geo module 이나 HttpAccessModule 를 이용해서 다른 서브 도메인으로 rewrite 를 이용하는 방법도 있을 것 같습니다
kr.도메인.com : 한국서버
eu.도메인.com : 유럽서버
Nginx 에서 아래와 같이 접속한 IP 나 대역대로 판단해서 한국이나 유럽쪽 서브 도메인으로 rewrite 하는 방법도 있을것 같네요
if ($remote_addr = 1.2.3.4)
{ rewrite ^ http://kr.도메인.com;
}
위의 Nginx 와 관련해서는 아래 링크를 참조해보시면 좋을것 같아요
https://serverfault.com/questions/380642/nginx-how-to-redirect-users-with-certain-ip-to-special-page
감사합니다