18.1.1 MySQL Cluster의 주요 개념
NDBCLUSTER
( NDB
라고도 함)는 고 가용성 및 데이터 지속성 기능을 갖춘 인 메모리 스토리지 엔진입니다.
NDBCLUSTER
스토리지 엔진은 다양한 장애 복구 및로드 밸런싱 옵션을 사용하여 구성 할 수 있지만 클러스터 수준의 스토리지 엔진에서 시작하는 것이 가장 간단합니다. MySQL Cluster의 NDB
스토리지 엔진은 클러스터 자체에있는 다른 데이터에만 의존하는 완전한 데이터 세트가 포함됩니다.
MySQL Cluster의 "클러스터"부분은 MySQL Server와 별도로 구성됩니다. MySQL Cluster에서는 클러스터의 각 부분이 노드로 간주됩니다.
"노드"라는 용어는 많은 맥락에서 컴퓨터를 나타내는 데 사용되지만, MySQL Cluster에 대해 설명 할 때는 프로세스를 의미합니다. 1 대의 컴퓨터에서 여러 개의 노드를 실행할 수 있습니다. 하나 이상의 클러스터 노드를 실행하는 컴퓨터에서 클러스터 호스트라는 용어를 사용합니다.
클러스터 노드에는 세 가지 유형이 있습니다. 최소한의 MySQL Cluster 구성에는 적어도 3 개의 노드가 있고 각 노드가 이러한 유형의 각각에 대응합니다.
관리 노드 :이 타입의 노드 역할은 구성 데이터 제공 노드의 시작 및 중지, 백업 등의 기능을 수행하여 MySQL Cluster 내의 다른 노드를 관리하는 것입니다. 이 노드 유형은 다른 노드의 구성을 관리하기 위해이 유형의 노드는 먼저 (다른 노드보다 먼저) 시작하도록하십시오. MGM 노드는 ndb_mgmd 명령으로 시작합니다.
데이터 노드 :이 타입의 노드는 클러스터의 데이터가 저장됩니다. 데이터 노드의 수는 복제본의 수에 조각 수를 곱한 수입니다 ( 섹션 18.1.2 "MySQL Cluster 노드, 노드 그룹 복제 및 파티션" 을 참조하십시오). 예를 들어, 복제본이 두 가지가 각각 조각이 2 개있는 경우, 4 개의 데이터 노드가 필요합니다. 데이터 스토리지로는 하나의 복제에 충분하지만, 그러면 중복이 없습니다. 따라서 복제를 2 개 이상으로하여 중복성 (및 그 결과의 고 가용성)을 확보하는 것이 좋습니다. 데이터 노드는 ndbd ( 섹션 18.4.1 "ndbd - MySQL Cluster 데이터 노드 데몬" 을 참조하십시오) 또는 ndbmtd ( 섹션 18.4.3 "ndbmtd - MySQL Cluster 데이터 노드 데몬 (멀티 스레드)" 를 참조하십시오 ) 명령으로 시작합니다.
일반적으로 MySQL Cluster 테이블은 디스크가 아닌 메모리에 완전히 저장됩니다 (MySQL Cluster를 인 메모리 데이터베이스라고 부르는 이유가 여기에 있습니다). 그러나 MySQL Cluster의 일부 데이터는 디스크에 저장할 수 있습니다. 자세한 내용은 섹션 18.5.12 "MySQL Cluster 디스크 데이터 테이블" 을 참조하십시오.
SQL 노드 : 이것은 클러스터 데이터에 액세스하는 노드입니다. MySQL Cluster의 경우 SQL 노드는
NDBCLUSTER
스토리지 엔진을 사용하는 기존의 MySQL Server입니다. SQL 노드는--ndbcluster
및--ndb-connectstring
옵션 (이러한 내용은이 장의 다른 곳에서 설명합니다)를 지정하여 시작되는 mysqld 프로세스입니다. 경우에 따라서는 추가 MySQL Server 옵션을 지정할 수 있습니다.SQL 노드는 실제로 MySQL Cluster 데이터에 액세스하는 응용 프로그램이 지정된 특별한 유형의 API 노드입니다. API 노드의 또 다른 예는 클러스터의 백업을 복원하는 데 사용되는 ndb_restore 유틸리티입니다. NDB API를 사용하여 이러한 응용 프로그램을 만들 수 있습니다. NDB API의 기본 정보는 Getting Started with the NDB API 를 참조하십시오.
프로덕션 환경에서 3 노드 설정의 채용을 기대하는 것은 현실적이지 않습니다. 이러한 구성에는 중복성이 없습니다. MySQL Cluster의 고 가용성 기능의 혜택을 여러 데이터 노드와 SQL 노드를 사용해야합니다. 여러 관리 노드를 사용하는 것도 좋습니다합니다.
MySQL Cluster 노드 간의 노드 그룹 간 복제 간 및 파티션 사이의 관계의 개요는 섹션 18.1.2 "MySQL Cluster 노드, 노드 그룹 복제 및 파티션" 을 참조하십시오.
클러스터 구성에는 클러스터의 각 노드의 구성과 노드 간의 개별 통신 링크의 설정이 포함됩니다. MySQL Cluster는 현재 데이터 노드가 프로세서 성능, 메모리 공간 및 대역폭에 대해 균일하게되도록 개발되어 있습니다. 또한 중앙 관리의 구성을 제공하기 위해 클러스터의 모든 구성 데이터가 전체적으로 하나의 구성 파일에 저장됩니다.
관리 서버는 클러스터 구성 파일 및 클러스터 로그를 관리합니다. 클러스터의 각 노드는 관리 서버로부터 구성 데이터를 얻기 위해 관리 서버가 어디에 있는지를 식별하는 방법이 필요합니다. 데이터 노드에서 주목할만한 이벤트가 발생하면 해당 노드는 이러한 이벤트에 대한 정보를 관리 서버에 전송하고 관리 서버는 해당 정보를 클러스터 로그에 기록합니다.
또한 임의의 수의 클러스터 클라이언트 프로세스 또는 응용 프로그램이있을 수 있습니다. 여기에는 표준 MySQL 클라이언트 NDB
전용 API 프로그램 관리 클라이언트 등이 포함됩니다. 다음 몇 단락에서 이들에 대해 설명합니다.
표준 MySQL 클라이언트 MySQL Cluster는 PHP, Perl, C, C ++, Java, Python, Ruby 등으로 만들어진 기존의 MySQL 응용 프로그램과 함께 사용할 수 있습니다. 이러한 클라이언트 응용 프로그램은 독립형 MySQL Server와 상호 작용하는 경우와 거의 같은 방식으로 MySQL Cluster의 SQL 노드로 작동하는 MySQL Server에 SQL 문을 전송하고 MySQL Server에서 응답을 수신합니다.
MySQL Cluster를 데이터 소스로 사용하는 MySQL 클라이언트는 여러 MySQL Server에 연결하는 기능을 이용하여로드 밸런싱 및 장애 복구를 제공하도록 변경할 수 있습니다. 예를 들어, Connector / J 5.0.6 이상을 사용하는 Java 클라이언트는 jdbc:mysql:loadbalance://
URL (Connector / J 5.1.7에서 개선 된)를 사용하여로드 밸런싱을 투명하게 할 수 있습니다. MySQL Cluster에서 Connector / J의 사용 방법의 자세한 내용은 Using Connector / J with MySQL Cluster 를 참조하십시오.
NDB 클라이언트 프로그램 클러스터에 연결되어있을 가능성이있는 MySQL Server를 무시하고 높은 수준의 C ++ API 인 NDB API를 사용하여 NDBCLUSTER
스토리지 엔진에서 직접 MySQL Cluster 데이터에 액세스하는 클라이언트 프로그램을 만들 수 있습니다. 이러한 응용 프로그램은 데이터에 대한 SQL 인터페이스를 필요로하지 않는 특수한 목적에 도움이됩니다. 자세한 내용은 The NDB API 를 참조하십시오.
Java 용 MySQL Cluster Connector를 사용하여 MySQL Cluster 용으로 NDB
전용 Java 응용 프로그램을 만들 수 있습니다. 이 MySQL Cluster Connector는 NDBCLUSTER
에 직접 연결하는 Hibernate과 JPA와 같은 객체 관계형 매핑의 지속성 프레임 워크와 비슷한 높은 수준의 데이터베이스 API 인 ClusterJ가 포함되어 있기 때문에, MySQL Server에 액세스 필요하지 않습니다. MySQL Cluster NDB 7.1 이상에서는 ClusterJ와 JDBC의 장점을 살린 MySQL Cluster 용 OpenJPA 구현 인 ClusterJPA도 지원됩니다.
ID 조회 및 기타 고속 처리는 ClusterJ를 사용하여 (MySQL Server를 거치지 않고) 실행되지만, MySQL의
쿼리 최적화 프로그램의 혜택을 받으실보다 복잡한 쿼리는 JDBC를 사용하여 MySQL Server를 통해 로 전송됩니다. 자세한 내용은 Java and MySQL Cluster 및 The ClusterJ API and Data Object Model 을 참조하십시오.
MySQL Cluster NDB 7.3 이상에서는 Node.js를 사용하여 JavaScript로 작성된 응용 프로그램도 지원됩니다. JavaScript 용 MySQL Connector는 MySQL Server뿐만 아니라 NDB
스토리지 엔진에 직접 액세스하기위한 어댑터도 포함되어 있습니다. 이 Connector를 사용하는 응용 프로그램은 일반적으로 이벤트 구동 형이며, ClusterJ에 채용되고있는 것과 많은 점에서 비슷 도메인 객체 모델을 사용합니다. 자세한 내용은 MySQL NoSQL Connector for JavaScript 를 참조하십시오.
memcached 버전 1.6 이상용의로드 가능한 ndbmemcache 스토리지 엔진으로 구현 된 MySQL Cluster 용 Memcache API를 사용하여 memcache 프로토콜을 사용하여 액세스되는 영구적 인 MySQL Cluster 데이터 저장소를 제공 할 수 있습니다.
표준 memcached 캐시 엔진은 MySQL Cluster NDB 7.3 이후의 배포에 포함되어 있습니다. 각 memcached 서버는 MySQL Cluster에 저장된 데이터에 직접 액세스 할 수 있지만 데이터를 로컬로 캐시하여이 로컬 캐시에서 요청을 처리 할 수 있습니다.
자세한 내용은 ndbmemcache-Memcache API for MySQL Cluster 를 참조하십시오.
관리 클라이언트이 클라이언트는 관리 서버에 연결하여 노드의 정상적인 시작 및 중지 메시지 추적 시작 및 중지 (디버그 버전 만 해당) 노드 버전 및 상태 표시 백업 시작 및 중지 등의 명령 을 제공합니다. 이 유형의 프로그램의 예로는 MySQL Cluster와 함께 제공된 ndb_mgm 관리 클라이언트가 있습니다 ( 섹션 18.4.5 "ndb_mgm - MySQL Cluster 관리 클라이언트" 를 참조하십시오). 이러한 응용 프로그램은 하나 이상의 MySQL Cluster 관리 서버와 직접 통신하는 C 언어 API 인 MGM API를 사용하여 만들 수 있습니다. 자세한 내용은 The MGM API 를 참조하십시오.
오라클은 다수의 노드를 포함 MySQL Cluster 재시작 등 MySQL Cluster의 많은 복잡한 관리 작업을 단순화하는 고급 명령 줄 인터페이스를 갖춘 MySQL Cluster Manager를 제공하고 있습니다. MySQL Cluster Manager 클라이언트는 MySQL Cluster 관련 mysqld 서버 옵션과 변수 이외에 대부분의 노드 구성 매개 변수의 값을 가져오고 설정하는 명령도 지원합니다. 자세한 내용은 MySQL ™ Cluster Manager 1.3.6 User Manual 을 참조하십시오.
이벤트 로그 MySQL Cluster는 이벤트를 카테고리 (시작, 종료, 오류 체크 포인트 등), 우선 순위 및 심각도에 기록합니다. 모든 보고서 가능한 이벤트의 전체 목록은 섹션 18.5.6 "MySQL Cluster에서 생성 된 이벤트 보고서" 를 참조하십시오. 이벤트 로그는 여기에 나와있는 두 가지 유형이 있습니다.
클러스터 로그 : 클러스터에 필요한 모든 보고서 가능한 이벤트가 전반적으로 유지됩니다.
노도로구 : 개별 노드에 대해 유지되는 별도의 로그입니다.
정상적인 상황에서는 클러스터 로그만을 보유하고 조사하는 것만으로 필요 충분합니다. 노도로구을 조사 할 필요가있는 것은, 애플리케이션 개발 및 디버깅 경우뿐입니다.
체크 포인트 일반적으로 데이터를 디스크에 저장할 때 체크 포인트에 도달했다고합니다. MySQL Cluster에 한정 한 경우 검사 점은 커밋 된 트랜잭션이 디스크에 저장된 시점입니다. NDB
스토리지 엔진은 두 가지 유형의 체크 포인트가, 그 조합에 의해 클러스터의 데이터를 지속적으로 확인하고 유지할 수 있습니다. 다음의 목록에 나타냅니다.
로컬 체크 포인트 (LCP) : 이것은 하나의 노드에 고유의 체크 포인트입니다. 그러나 LCP는 클러스터의 모든 노드에서 어느 정도 동시에 발생합니다. LCP는 노드의 모든 데이터를 디스크에 저장해야하기 때문에 보통 몇 분 간격으로 발생합니다. 정확한 간격은 노드에 저장되어있는 데이터의 양 클러스터의 활동 수준 및 기타 요인에 따라 달라집니다.
글로벌 체크 포인트 (GCP) : GCP는 모든 노드의 트랜잭션이 동기화 Redo 로그가 디스크에 플래시되었을 때 몇 초 간격으로 발생합니다.
로컬 체크 포인트 및 글로벌 체크 포인트에 의해 생성되는 파일 및 디렉토리의 자세한 내용은 MySQL Cluster Data Node File System Directory Files 를 참조하십시오.