DNS를 이용한 로드밸런싱(Load Balancing) 설정

Last Updated on 12월 6, 2020 by 태랑(정현호)

 

DNS 로드밸런싱


DNS
로드밸런싱은 별도의 소프트웨어 나 하드웨어 로드밸런싱 장비를 이용하지 않고 DNS를 이용하여 도메인 정보를 조회하는 시점에서 다른 IP정보를 통해 트래픽을 분산하는 기법입니다.




사용 할 수 있는 환경은 Web 이외 도메인을 사용하는 모든 서비스가 가능 합니다.

FTP/SFTP, SMTP , etc



[참고] 해당 포스팅은 아래 DNS 설정 환경에서 추가 설정 하는 내용으로 이어지는 글 입니다.
포스팅 배경이 되는 DNS 설치 및 구성은 아래 포스팅을 보시면 됩니다.



DNS 라운드 로빈


웹 서버에서 사용 할 경우 사이트에 접속하는 사용자가 도메인 주소를 브라우저에 입력하면 DNS는 도메인에 등록된 여러개의 IP 리스트 중에서 라운드 로빈 방식으로 사용자에게  IP를 리턴 하여 알려주게 됩니다.

사이트에 접속하는 사용자는 알게 모르게 여러 개의 웹 서버에 나뉘어 접속하게 되면서 서버의 부하가 분산되는 방식 입니다.

DNS 조회의 결과는 1개 혹은 1개 이상 의 IP 를 반환 할 수 있습니다.



 

DNS 라운드로빈의 단점


1. DNS
를 이용한 라운드로빈 로드 밸런싱은 로드밸런스 전용의 소프트웨어나 하드웨어와 달리 Health check 에 대안 기능이 없습니다.

단순히 DNS의 질의시 등록된 다수의 IPRR 방식으로 정보를 반환하기 때문에 연결된 웹 서버 등의 HA 기능으로 사용하기에는 다소 어려움은 있습니다.


2. 사용자 환경이나 ISP DNSIPCaching 되어 있을 수 있습니다.
DNSCache 주기(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 파일을 수정하여 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




어느 서버로 접속 하였는지를 구분하기 위해서 각 서버 별로 아래와 같이 index.html 파일을 생성합니다.


[참고] apache 가 설치 되어 있지 않은 경우 아래와 같이 설치 및 기동 합니다.
[root]# yum -y install httpd
[root]# systemctl restart httpd




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 테스트





연관된 글

답글 남기기