[클러스터] Clustered DNS Server(ns7) Usage.

Clustered DNS Server Usage

작성 : 넷센터 홍석범

## 개요

NS7 DNS 서버는 리눅스의 여러 Virtual Server 구성 방법중 Director 를 이용한

방식으로 이 구성 방식에 대한 기술적인 정보는 system.tt 의 자료실을 참고하기 바란다.

두 서버를 클러스터링으로 구성함으로써 평상시에는 DNS 질의가 두 서버로 각기

나누어져 질의되고 한 서버의 DNS 서버가 다운될 경우에는 3-4초 내에 다른 한

서버가 모든 질의를 받아서 처리하게 된다.

또한 Director 서버인 ns7c0 와 1번 DNS 서버인 ns7c1 서버와는 미러링으로

구성되어 있어 만약 Director 서버가 다운되었을 경우에는 ns7c1 이 Director 의

IP 를 미러링하여 서비스를 하게 된다.

이렇듯 로드 발랜싱과 미러링이 복합적으로 구성되어 있으므로 설사 어떠한 서버가

다운된다

하더라도 거의 중단없이 DNS 서비스를 할 수 있게 되는 것이다.

## 작동방식 ##

ns7 DNS 서버는 ns7c0, ns7c1, ns7c2 이렇게 총 3대로 이루어져 작동한다.

1대(ns7c0) 는 실제 DNS 서버 역할을 하는 리얼 서버의 앞단에서 로드를 분산해

주고 Fail Over 기능을 하는 일종의 L4 스위치 역할을 하는 Director 이다.

그리고 2대(ns7c1, ns7c2) 는 DNS 질의에 응답하는 실제 DNS 서버이다.

일단 모든 DNS 질의는 Director 인 ns7c0 서버에 가게 되고 ns7c0 서버는 로드

발랜싱의 스케줄 알고리즘(Weighted Least-Connection Scheduling-가중치

기반 최소 접속 스케쥴링) 에 의해 각각의 질의를 적당히(1대 1) 각 서버로 분배해

준다.

각 서버별 IP 할당 상황은 아래와 같다.

ns7c0 : 211.47.66.87 (Director)

ns7c1 : 211.47.66.88 (Real Server 1)

ns7c2 : 211.47.66.89 (Real Server 2)

ns7 : 211.47.66.90 (ns7.tt.co.kr)

## 작업방법

모든 DNS 설정은 ns7c1 에서만 하면 된다.

웹에서 작업시에는 이전에 하는것과 같은 방식으로 http://ns7c1.tt.co.kr/ 에서 하면

되고 직접 ssh 로 접속하여 작업시에는 ns7c1.tt.co.kr 로 접속하면 된다.

여기에서 주의할 점은 웹에서 작업시에는 특별히 문제가 없으나 직접 ssh 로 접속하여

작업한 후에는 재설정시 killall -HUP named 대신 반드시 refresh 를 실행하여야 한다.

그래야만 ns7c1 에서 작업한 내용이 ns7c2 에도 바로 반영이 되기 때문이다.

따라서 가급적이면 웹에서 모든 작업을 할 것을 권장한다.

# DNS 서버의 로드발랜싱 상황은 http://ns7.tt.co.kr/ 에 접속하면 실시간으로

확인 가능하다.

(웹데몬의 로드 발랜싱이 아니라 DNS 데몬의 로드 발랜싱 상황이다.)

======== Belows are more technical usage about Linux Virtual Server

Operation,

So windows staffs need not read anymore.

But I wish that Linuxstaff@ would read and Fully

understand.==========

# Director 에서의 설정

기본적인 설정은 /root/cluster 에 있으며 check.cgi 가 무한루프로 돌며

각 서버의 DNS 데몬의 이상 유무를 체크한다.

* arp.cgi : 커널 패치로 해결하였으나 혹시나 있을지 모를 arp problem 에 대비하기

  위해 일정 시간(10분)마다 ARP Refresh 를 한다.

* dns.monitor : dns 를 모니터링하는 모듈로 상황에 맞게 소스를 다소 수정하였다.

각 DNS 서버에 질의를 하여 ok 메시지가 떨어지면 응답한 것으로 그렇지 않으면 다

운된 것으로 처리한다. 작동예는 아래와 같다.

ex) ./dns.monitor -zone tt.co.kr -master 211.47.65.75 211.47.65.75

–> 211.47.67.75 에게 tt.co.kr 의 resolving 여부를 질의.

* check.cgi : 각 DNS 서버의 이상 유무를 체크하여 이상 발생시 해당 서

버를 클러스터링 목록에서 제외하여 이상이 발생한 서버로는 dns 질의가 전달되지

않도록 한다.

아울러 이상 발생시 linuxstaff@ 로 다운되었음을 e-mail 로 통보한다.

* lvs : 실질적으로 로드 발랜싱을 시작하고 멈추는 역할을 하는 스크립트이다.

./lvs stop 하면 로드 발랜싱을 멈추고 ./lvs start 하면 로드 발랜싱을 시작한다.

./lvs stop 을 하면 실제 DNS 서버가 작동하지 않게 되므로 주의하기 바란다.

부팅시 자동으로 lvs 가 시작되도록 설정되어 있으며 만약 ns7c1 서버가 다운된 후

복구되어 클러스터링 목록에 추가할 경우에는 ./lvs restart 를 하면 된다.

현재의 클러스터링 목록은 ipvsadm 로 확인할 수 있다.

* http_lvs : 웹에서 로드 발랜싱 상황을 볼 수 있도록 하는 설정이다.

로드 발랜싱 상황은 http://ns7.tt.co.kr/ 에 접속하면 실시간으로 확인 가능하다.

(웹데몬의 로드 발랜싱이 아니라 DNS 데몬의 로드 발랜싱 상황이다.)

* require.cgi : check.cgi 에서 require 하는 변수이다.

# ns7c1 에서의 설정

* /etc/inetd.conf

rsync stream tcp nowait root /usr/bin/rsync rsyncd –daemon 가 설정되어

ns7c1 에서 rsync 로 /var/named 를 동기화하도록 한다.

* /etc/rsyncd.conf

[named]

path = /var/named

comment = named

uid = root

gid = root

use chroot = yes

read only = yes

hosts allow = 211.47.66.89

* /usr/bin/refresh

#!/bin/sh

killall -HUP named

echo > /var/named/null

이는 ns7c1 에서 업데이트를 했을때 ns7c2 에서도 자동으로 업데이트를 하기 위한

설정이다.

즉, 설정 변경후 killall -HUP named 를 하였을때 /var/named 에 null 이라는 파

일을 갱신하고 ns7c2 에서는 null 이 갱신된 것을 확인하여 ns7c2 에서도 named

를 업데이트하게 되는 것이다.

>> ns7c1 에서의 미러링 설정

ns7c1 서버는 /root/check 디렉토리에서 Director 에 대해 지속적으로 체크를 하여

만약 다운이 되었을 경우에는 Director 의 IP 를 takeover 하고 다운사실을

linuxstaff@ 에게 e-mail 로 통보한다.

Director IP 의 다운이 복구된 후에는 Director 서버에서 /root/cluster/arp/arp.sh

를 실행해 주면 된다.

# ns7c2 에서의 설정

* /etc/crontab

0-59/1 * * * * root run-parts /etc/cron.min 설정 추가.

/etc/cron.min/rsync.cgi 에서는

/root/check/rsync.sh 을 실행하여 rsync 시 null 이 포함되어 있으면

(ns7c0 에서는 killall 을 할 때마다 null 의 정보를 갱신하도록 되어있다.)

기존의 named.conf 를 backup 하고 새롭게 업데이트하며 /var/named 에 있는

zone 파일 역시 가지고 온 후 named 를 재설정하여 ns7c1 과 동일한 정보를 가지고

있다.

ns7c0 과 ns7c1 의 정보 차이는 이론상 최대 1분간의 갭이 있을 뿐이며 실제로는

실시간으로 동기화된다고 생각해도 무방하다.

## If you have any questions or comments, please notify me,

antihong.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

1 Response

  1. 2022년 6월 18일

    2keyboards

페이스북/트위트/구글 계정으로 댓글 가능합니다.