Configuration

설정의 중요 구성요소는 Zone, NodePool, Monitor이다.

  • Zone - 개별 도메인 서비스 구성이다.
  • NodePool - 서버 집합으로 가용 자원풀을 의미한다.
  • Monitor - NodePool의 Health Monitoring을 통해 Zone의 A Records를 구성한다.

기타 구성요소는 다음과 같다.

  • Forwarder - 미등록 또는 장애 도메인 Query를 외부 DNS로 포워딩한다.
  • Replication - HA(High Availability)를 위한 복제세트를 구성한다.

설정 구조

설정 파일 경로는 /etc/compass/compass.conf 이다. JSON형식이며 아래와 같은 구조를 가진다.

# /etc/compass/compass.conf

{
  "Version": "2019-12-23",
  "NodePools" : [ ],
  "Zones" : [ ],
  "Monitors" : [ ],
  "Forwarders" : { },
  "Replication" : { }
}
  • Version - 이 값은 반드시 "2019-12-23" 이어야 한다. 날짜를 버전으로 사용한다.
  • Zones, Nodepools, Monitors - 각 구성요소의 멀티 설정 (아래 상세설명)
  • Forwarders - 포워딩할 외부 DNS 설정
  • Replication - 복제 설정

Zone

Zone을 통해 도메인 서비스를 구성한다. 하나의 Zone은 여러 개의 NodePool을 통해 서비스 제공이 가능하다.

"Zones" : [
    {
        "Name" : "foo.com.",
        "Enabled" : true,
        "Description" : "static domains - foo.com.",
        "NameServers": ["ns1.foo.com.", "ns2.foo.com."],
        "DefaultTtl" : 30,
        "ForwardIfNoRecords": true,
        "ServiceRecordCount": 0,
        "Selector" : "random"
        "NodePools" : [ "firstPool", "secondPool" ]
    }
]
설명 기본 값 상속
Name 이름 (필수) X
Enabled 활성화 true X
Description 설명 (옵션) X
NameServers 네임서버 목록 (필수) O
DefaultTtl A Record TTL(초) 30초 O
ForwardIfNoRecords A Record 서비스 불가 시 포워딩 여부 true O
ServiceRecordCount A Record 응답 개수 0 (모두) O
Selector A Record 셀렉터 random O
NodePools 사용할 NodePool 목록 (옵션) O
Inherit 설정을 상속할 부모 Zone (옵션) X
DynamicDomains 동적 서브 도메인 바인딩 false X

일반적인 Zone구성과 더불어 편리한 운영관리를 추가 기능( Inherit, DynamicDomains)을 제공한다. 다음 절에서 자세히 다룬다.

Zone - 상속

앞서 구성한 foo.com의 서브 도메인들이 많을 경우 동일한 구성을 Copy & Paste 하는 것도 매우 번거로운 일이다. 이를 위해 상속Inherit 기능을 제공한다.

"Zones" : [
    {
        "Name" : "foo.com.",
        ... (생략) ...
    },{
        "Name" : "alice.foo.com.",
        "Inherit" : "foo.com"
    },{
        "Name" : "bob.foo.com.",
        "Inherit" : "foo.com"
    }
]

위와 같이 구성하면 alice.foo.com과 bob.foo.com은 foo.com의 설정을 상속 받는다. 예를 들어 foo.com의 DefaultTtl 의 값을 변경하면 상속받은 모든 Zone은 이 값을 사용한다. 상속받는 속성은 위 표를 참고한다.

  • 상호 상속은 무시된다.
  • 상속 받을 Zone 이 없다면 해당 Zone은 비활성화(Enabled: false) 된다.

Zone - 동적 서브 도메인

DynamicDomains를 사용하면 미리 Zone 구성을 하지 않고 Web API를 통해 자동으로 서브 도메인 구성이 가능하다. 먼저 아래와 같이 베이스 도메인을 구성한다.

"Zones" : [
    {
        "Name" : "foo.com.",        
        "DynamicDomains" : true,
        ... (생략) ...
    }
]

api-domain-list 방식으로 동작하는 Monitor를 연결하면 서버들로부터 도메인 목록을 입력 받아 자동으로 Zone 구성한다. 다른 도메인(another.com)의 경우 무시된다.

NodePool

NodePool은 동일한 목적을 가진 서버들의 집합을 가리킨다. 관리자는 NodePool 감시에 적합한 Monitor를 바인딩한다.

"NodePools" : [
    {
        "Name" : "firstPool",
        "Description" : "this is the first pool",
        "LoadBalancingMode" : "RoundRobin",
        "MinimumMembers" : {
          "Enabled" : true,
          "Count" : 1,
          "Action" : "failover"
        },
        "Members" : [
          {
            "Enabled" : true,
            "Address" : "10.12.10.7"
          },
          {
            "Enabled" : true,
            "Address" : "10.12.10.8"
          }
        ],
        "Monitors" : [ "icmp" ]
    }, {
        "Name" : "secondPool",
        ... (생략) ...
    }    
],
설명 기본 값
Name 이름 (필수)
Description 설명 (옵션)
LoadBalacingMode 로드 밸런싱 모드 RoundRobin
MinimumMembers 최소 구성 멤버 설정
가용한 멤버 수가 count 미만인 경우 action을 수행한다.
Enabled: true
Count: 1
Action: failover
Members 구성 서버 목록 Enabled: true
Address: (필수)
Monitors (Health) 모니터 (옵션)

Monitor

(Health) Monitor는 NodePool에 소속된 Members의 가용여부를 감시한다. 프로토콜별로 icmp, tcp, http, api-domain-list 4종류의 Built-in 모니터를 제공한다.

"Monitors" : [
    {
        "Name" : "icmp",
        "Protocol" : "icmp",
        "Description" : "built-in icmp monitor",
        "Interval" : 3,
        "TimeUntilUp" : 10,
        "Timeout" : 10
    },
    {
        "Name" : "tcp",
        "Protocol" : "tcp",
        "Port" : 80,
        "Description" : "built-in tcp monitor",
        "Interval" : 3,
        "TimeUntilUp" : 10,
        "Timeout" : 10
    },
    {
        "Name" : "http",
        "Protocol" : "http",
        "Port" : 80,
        "Secure" : false,
        "Description" : "built-in http monitor",
        "Interval" : 3,
        "TimeUntilUp" : 10,
        "Timeout" : 10,
        "Url" : "/",
        "Responses" : [ "200" ]
    },
    {
        "Name" : "api-domain-list",
        "Protocol" : "http",
        "Port" : 80,
        "Secure" : false,
        "Description" : "built-in api-domain-list monitor",
        "Interval" : 3,
        "TimeUntilUp" : 10,
        "Timeout" : 10,
        "Url" : "/domainlist",
        "Responses" : [ "200" ]
    }
]
설명 기본 값
Name 이름 (필수)
Protocol 프로토콜 (필수)
Port 포트 80
Secure 암호화 프로토콜 사용 false
Description 설명 (옵션)
Interval 모니터링 주기(초) 3초
TimeUntilUp 최초 모니터링 성공 이후 가용여부 판단 시간 (초) 10초
Timeout 최초 모니터링 실패 이후 장애판단 시간 (초) 10초
Url HTTP 기반 프로토콜에서 사용할 URL /
Responses HTTP 기반 프로토콜에서 정상응답으로 판단할 응답코드 [ “200” ]

Protocol에 따라 지원되는 키가 달라진다.

icmp tcp http, api-domain-list
Name O O O
Protocol O O O
Port X O O
Secure X X O
Description O O O
Interval O O O
TimeUntilUp O O O
Timeout O O O
Url X X O
Responses X X O

Forwarder

Forwarder는 미등록 도메인 또는 등록되었으나 가용서버가 없는 경우 약속된 외부 DNS로 질의를 포워딩한다.

"Forwarders" : {
    "Enabled" : true,
    "Addresses" : [
      { "Address" : "8.8.8.8", "Enabled" : true },
      { "Address" : "8.8.4.4", "Enabled" : true }
    ],
    "Timeout" : 5
  }
설명 기본 값
Enabled 활성화 true
Addresses 포워딩 주소 (옵션)
Timeout 포워딩 Failover 시간(초) 5

Replication

복제 세트를 구성한다. 모든 OZ Compass는 동등하다. 따라서 복제 세트라면 어느 서버로 접속하여도 설정은 동기화된다.

"Replication" : {
    "Name" : "myReplicas",
    "AuthKey" : "mysecret",
    "Members" : [
        {
            "Address" : "1.1.1.1:5705",
            "Self" : true,
            "Enabled" : true
        },
        {
            "Address" : "1.1.1.2:5705",
            "Enabled" : true
        }
    ]
}
설명 기본 값
Name 복제세트 이름 (필수)
AuthKey 복제세트끼리의 암호화 키
없다면 상호인증 과정을 거치지 않는다.
(옵션)
Members 복제 노드 주소 (옵션)

복제세트는 설정파일을 통하지 않고 UI를 통해 구성하는 편을 권장한다.