Loading...
MySQL 9.5 Reference Manual 9.5의 6.2.6 Connecting to the Server Using DNS SRV Records의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Domain Name System (DNS)에서 SRV record (service location record)는 클라이언트가 서비스, 프로토콜, 도메인을 나타내는 이름을 지정할 수 있게 해 주는 리소스 레코드의 한 종류입니다. 이 이름에 대해 DNS lookup을 수행하면, 요구된 서비스를 제공하는 도메인 내의 여러 사용 가능한 서버 이름을 포함하는 응답이 반환됩니다. 나열된 서버들의 preference 순서를 SRV record가 어떻게 정의하는지 등을 포함한 DNS SRV에 대한 정보는 RFC 2782를 참조하십시오.
MySQL은 서버에 연결하기 위해 DNS SRV record 사용을 지원합니다. DNS SRV lookup 결과를 받은 클라이언트는 DNS administrator가 각 호스트에 지정한 priority와 weighting에 기반하여 preference 순서대로 나열된 각 호스트의 MySQL 서버에 연결을 시도합니다. 클라이언트가 어느 서버에도 연결할 수 없는 경우에만 연결 실패가 발생합니다.
여러 MySQL 인스턴스(예: 서버 클러스터)가 애플리케이션을 위해 동일한 서비스를 제공하는 경우, DNS SRV record를 사용하여 페일오버, 로드 밸런싱, 복제 서비스를 지원할 수 있습니다. 애플리케이션이 연결 시도 대상이 될 수 있는 서버 집합을 직접 관리하는 것은 번거롭기 때문에, DNS SRV record는 이에 대한 대안을 제공합니다:
DNS SRV record는 DNS administrator가 단일 DNS 도메인을 여러 서버에 매핑할 수 있게 합니다. 또한, 서버가 구성에서 추가되거나 제거되거나, 호스트 이름이 변경될 때 administrator가 DNS SRV record를 중앙에서 업데이트할 수 있습니다.
DNS SRV record를 중앙에서 관리하면 개별 클라이언트가 연결 요청에서 가능한 각 호스트를 식별해야 할 필요나, 연결이 추가 소프트웨어 컴포넌트에 의해 처리되어야 할 필요가 없어집니다. 애플리케이션은 서버 정보를 자체적으로 관리하는 대신 DNS SRV record를 사용하여 후보 MySQL 서버에 대한 정보를 얻을 수 있습니다.
DNS SRV record는 커넥션 풀링과 함께 사용할 수 있으며, 이 경우 더 이상 현재 DNS SRV record 목록에 없는 호스트에 대한 연결은 idle 상태가 되면 풀에서 제거됩니다.
MySQL은 다음과 같은 컨텍스트에서 서버에 연결하기 위해 DNS SRV record 사용을 지원합니다:
여러 MySQL Connector가 DNS SRV 지원을 구현합니다. Connector별 옵션을 사용하여 X Protocol 연결과 classic MySQL protocol 연결 모두에 대해 DNS SRV record lookup을 요청할 수 있습니다. 일반 정보는 Connections Using DNS SRV Records를 참조하십시오. 자세한 내용은 개별 MySQL Connector의 documentation을 참조하십시오.
C API는 mysql_real_connect_dns_srv() function을 제공합니다. 이 function은 mysql_real_connect()와 유사하지만, argument 목록에 연결 대상 MySQL 서버의 특정 호스트가 지정되지 않는다는 점이 다릅니다. 대신, 서버 그룹을 지정하는 DNS SRV record 이름을 지정합니다. mysql_real_connect_dns_srv()를 참조하십시오.
mysql 클라이언트에는 --dns-srv-name 옵션이 있으며, 이는 서버 그룹을 지정하는 DNS SRV record를 나타내기 위해 사용합니다. Section 6.5.1, “mysql — The MySQL Command-Line Client”를 참조하십시오.
DNS SRV name은 서비스, 프로토콜, 도메인으로 구성되며, 서비스와 프로토콜은 각각 underscore로 prefix됩니다:
1_service._protocol.domain
다음 DNS SRV record는 X Protocol 연결을 설정하기 위해 클라이언트에서 사용할 수 있는 여러 후보 서버를 식별합니다:
1Name TTL Class Priority Weight Port Target 2_mysqlx._tcp.example.com. 86400 IN SRV 0 5 33060 server1.example.com. 3_mysqlx._tcp.example.com. 86400 IN SRV 0 10 33060 server2.example.com. 4_mysqlx._tcp.example.com. 86400 IN SRV 10 5 33060 server3.example.com. 5_mysqlx._tcp.example.com. 86400 IN SRV 20 5 33060 server4.example.com.
여기서 mysqlx는 X Protocol 서비스를 나타내고, tcp는 TCP 프로토콜을 나타냅니다. 클라이언트는 _mysqlx._tcp.example.com이라는 name으로 이 DNS SRV record를 요청할 수 있습니다. 연결 요청에서 이 name을 지정하는 구체적인 syntax는 클라이언트 종류에 따라 다릅니다. 예를 들어, 어떤 클라이언트는 URI‑like 커넥션 문자열 내에 이 name을 지정하거나 key-value pair로 지정하는 방식을 지원할 수 있습니다.
classic protocol 연결을 위한 DNS SRV record는 다음과 같을 수 있습니다:
1Name TTL Class Priority Weight Port Target 2_mysql._tcp.example.com. 86400 IN SRV 0 5 3306 server1.example.com. 3_mysql._tcp.example.com. 86400 IN SRV 0 10 3306 server2.example.com. 4_mysql._tcp.example.com. 86400 IN SRV 10 5 3306 server3.example.com. 5_mysql._tcp.example.com. 86400 IN SRV 20 5 3306 server4.example.com.
여기서 mysql이라는 name은 classic MySQL protocol 서비스를 지정하며, port는 33060(default X Protocol port)이 아니라 3306(default classic MySQL protocol port)입니다.
DNS SRV record lookup이 사용될 때, 클라이언트는 일반적으로 연결 요청에 대해 다음 규칙을 적용해야 합니다(예외가 있는 클라이언트 또는 connector가 있을 수 있음):
요청은 서비스와 프로토콜 name에 underscore가 prefix된, 전체 DNS SRV record name을 지정해야 합니다.
요청은 여러 호스트 이름을 지정해서는 안 됩니다.
요청은 포트 번호를 지정해서는 안 됩니다.
TCP 연결만 지원됩니다. Unix 소켓 파일, Windows named pipe, shared memory는 사용할 수 없습니다.
X DevAPI에서 DNS SRV 기반 연결을 사용하는 방법에 대한 자세한 내용은 Connections Using DNS SRV Records를 참조하십시오.
6.2.5 Connecting to the Server Using URI-Like Strings or Key-Value Pairs
6.2.7 Connection Transport Protocols