MySQL 클러스터
MySQL Cluster개발자 | 오라클 |
---|---|
초기 릴리즈 | 2004년 11월 |
안정적 해제 | 8.0 / 2021년 10월 19일; 전 |
운영 체제 | 크로스 플랫폼[어느?] |
다음에서 사용 가능 | 영어 |
유형 | RDBMS |
면허증 | GNU 일반 공중 라이센스(버전 2, 링크 예외 포함) 또는 상용 EULA |
웹사이트 | [2] |
MySQL Cluster는 MySQL 데이터베이스 관리 시스템에 공유 없음 클러스터링 및 자동 샤딩 기능을 제공하는 기술이다.대기 시간이 짧은 고가용성(HA)[3]과 높은 처리량을 제공하는 동시에 거의 선형 확장성을 허용하도록 설계됐다.MySQL 클러스터는 MySQL용 NDB 또는 NDBCluster 스토리지 엔진을 통해 구현되며("NDB"는 Network Database를 의미한다).
건축
MySQL 클러스터는 단일 장애 지점이 없는 분산된 다중 마스터 AID 호환 아키텍처를 기반으로 설계됨.MySQL 클러스터는 상용 하드웨어의 읽기 및 쓰기 작업을 스케일아웃하기 위해 자동 샤딩(파티션)을 사용하며 SQL 및 Non-SQL(No-SQL) API를 통해 액세스할 수 있음
복제
내부적으로 MySQL 클러스터는 데이터를 커밋할 때 데이터가 여러 노드에 기록되도록 보장하기 위해 2상 커밋 메커니즘을 통해 동기식 복제를 사용한다.(이는 일반적으로 비동기식으로 "MySQL 복제"라고 하는 것과 대조적이다)가용성을 보장하려면 데이터의 두 복사본(복제본으로 알려져 있음)이 필요하다.MySQL 클러스터는 사용자가 지정한 복제본 및 데이터 노드 수에서 자동으로 "노드 그룹"을 생성한다.노드 그룹 멤버 간에 업데이트가 동시에 복제되어 데이터 손실을 방지하고 노드 간 빠른 페일오버를 지원한다.
클러스터 간에 비동기적으로 복제할 수도 있다. 이를 "MySQL 클러스터 복제" 또는 "지리적 복제"라고도 한다.이는 일반적으로 재해 복구를 위해 데이터 센터 간에 클러스터를 복제하거나 물리적으로 사용자 집합에 더 가까운 데이터를 배치하여 네트워크 지연의 영향을 줄이는 데 사용된다.MySQL Cluster의 지리적 복제는 표준 MySQL 복제와 달리 낙관적인 동시성 제어와 Epochs 개념을 사용하여 충돌 감지 및 해결 메커니즘을 [4]제공하므로 데이터 센터 간 액티브/액티브 클러스터링이 가능하다.
MySQL Cluster 7.2부터는 멀티 사이트 클러스터링 기능으로 데이터 센터 간 동기식 복제 지원이 지원되었다.[5]
수평 데이터 파티셔닝(자동 샤딩)
MySQL 클러스터는 완전한 분산형 다중 마스터 데이터베이스로 구현되어 모든 애플리케이션 또는 SQL 노드에 의해 만들어진 업데이트를 클러스터에 액세스하는 다른 모든 노드에서 즉시 사용할 수 있으며, 각 데이터 노드는 쓰기 작업을 허용할 수 있다.
NDB(NySQL Cluster) 테이블 내의 데이터는 시스템의 모든 데이터 노드에 걸쳐 자동으로 분할된다.이것은 테이블의 기본 키에 기초한 해싱 알고리즘에 기초하여 수행되며, 엔드 어플리케이션에 투명하다.클라이언트는 클러스터의 모든 노드에 연결할 수 있으며 쿼리가 쿼리를 충족하거나 트랜잭션을 커밋하는 데 필요한 올바른 조각에 자동으로 액세스하도록 한다.MySQL 클러스터는 상호 공유 쿼리 및 트랜잭션을 지원할 수 있다.
사용자들은 그들만의 분할 방식을 정의할 수 있다.이를 통해 개발자는 실행성이 높은 트랜잭션에 의해 액세스되는 모든 행에 공통적인 하위 키를 기반으로 파티셔닝하여 애플리케이션에 "분산 인식"을 추가할 수 있다.이를 통해 트랜잭션을 완료하는 데 사용되는 데이터가 동일한 샤드에 지역화되어 네트워크 홉을 줄일 수 있다.
하이브리드 스토리지
MySQL 클러스터는 단일 시스템의 용량보다 큰 데이터셋을 여러 시스템에 걸쳐 저장하고 액세스할 수 있도록 허용한다.
MySQL 클러스터는 분산 메모리의 모든 인덱스 열을 유지 관리한다.색인화되지 않은 열도 분산 메모리에 유지하거나 메모리 내 페이지 캐시가 있는 디스크에 유지 관리할 수 있다.Disk에 인덱싱되지 않은 열을 저장하면 MySQL Cluster는 클러스터링된 시스템의 집계 메모리보다 큰 데이터셋을 저장할 수 있다.
MySQL 클러스터는 모든 데이터 변경에 대해 디스크에 Redo 로그를 기록하고 정기적으로 데이터를 Disk로 가리키는지 점검하십시오.이를 통해 클러스터가 전체 클러스터 중단 후에도 지속적으로 디스크에서 복구할 수 있다.Redo 로그는 트랜잭션 커밋과 관련하여 비동기적으로 작성되므로 전체 클러스터가 실패할 경우 일부 트랜잭션은 손실될 수 있지만, 위에서 논의한 지리적 복제 또는 다중 사이트 클러스터를 사용하여 이를 완화할 수 있다.현재 기본 비동기 쓰기 지연은 2초이며 구성 가능하다.일반적인 단일 장애 지점은 클러스터 내의 동기식 데이터 복제로 인한 데이터 손실을 초래하지 않는다.
MySQL 클러스터 테이블이 메모리에 유지되면 클러스터는 Disk 저장소에 액세스하여 Redo 레코드 및 체크포인트를 작성한다.이러한 쓰기는 순차적이며 제한된 랜덤 액세스 패턴이 수반되므로 MySQL Cluster는 제한된 디스크 하드웨어로 기존의 디스크 기반 캐싱 RDBMS에 비해 높은 쓰기 처리량을 달성할 수 있으며, 디스크 기반 지속성이 필요하지 않을 경우 메모리 내 테이블 데이터의 디스크에 대한 체크포인트를 비활성화할 수 있다(테이블 단위).
MySQL 클러스터는 단일 장애 지점이 없도록 설계되어 있다.클러스터가 올바르게 설정된 경우, 모든 단일 노드, 시스템 또는 하드웨어가 전체 클러스터에 장애 없이 실패할 수 있다.공유 Disk(SAN)는 필요하지 않다.노드 간의 상호 연결은 표준 이더넷, 기가비트 이더넷, InfiniBand 또는 SCI 인터커넥트가 될 수 있다.
SQL 및 NoSQL API
MySQL 클러스터는 MySQL Server가 아닌 데이터 노드에 테이블을 저장하므로, 데이터베이스에 액세스하는 데 사용할 수 있는 여러 인터페이스가 있다.
- MySQL 서버를 통한 SQL 액세스
- MySQL 클러스터 라이브러리를 애플리케이션에 내장하여 SQL 계층을 통과하지 않고 데이터 노드에 직접 액세스할 수 있는 NoSQL API여기에는 다음이 포함된다.
MySQL Cluster Manager
상용 MySQL Cluster CGE의 일부인 MySQL Cluster Manager는 온라인 확장, 업그레이드, 백업/복원 및 재구성 등 일반적인 관리 작업을 자동화하여 MySQL Cluster CGE 데이터베이스의 생성 및 관리를 단순화하기 위한 도구다.MySQL Cluster Manager는 MySQL Server 애플리케이션 노드 및 관리 노드뿐만 아니라 MySQL Cluster 데이터 노드도 모니터링하고 자동으로 복구한다.
실행
MySQL 클러스터는 다음과 같은 세 가지 유형의 노드(프로세스)를 사용한다.
- 데이터 노드(ndbd/ndbmtd 프로세스):이 노드들은 데이터를 저장한다.데이터 노드 전반에 걸쳐 테이블이 자동으로 분할되어 로드 밸런싱, 복제, 페일오버 및 자가 복구 기능을 투명하게 처리
- 관리 노드(ndb_mgmd 프로세스):클러스터의 구성 및 모니터링에 사용됨클러스터 노드를 시작하거나 재시작하는 경우에만 필요하며,중재자로도 구성할 수 있지만 이는 필수 사항이 아니다(MySQL Server를 중재자로 대신 구성할 수 있음).[6]
- 애플리케이션 노드 또는 SQL 노드(mysqld 프로세스):데이터 저장 및 검색을 수행하기 위해 모든 데이터 노드에 연결하는 MySQL 서버(mysqld)이 노드 유형은 선택 사항이며, 기본적으로 C++ API 또는 위에서 설명한 추가 NoSQL API 중 하나를 사용하여 NDB API를 통해 직접 데이터 노드를 쿼리할 수 있다.
일반적으로 각 노드는 별도의 물리적 호스트, VM 또는 클라우드 인스턴스에서 실행될 것으로 예상된다(MySQL Server와 관리 노드를 공동 배치하는 것이 매우 일반적이지만).모범 사례를 위해 단일 물리적 호스트에 있는 동일한 노드 그룹 내에서 노드를 공동 배치하지 않는 것이 좋다(단일 장애 지점이 될 수 있음).
버전
8.0 이후 버전에서 MySQL Cluster는 해당 8.0 릴리스의 MySQL Server를 직접 기반으로 한다.이전에 MySQL 클러스터 버전 번호는 MySQL Server 버전 번호에서 분리됨(예: MySQL Cluster 7.6은 MySQL 5.7의 서버 구성 요소에 기반/포함됨)
MySQL 클러스터의 상위 버전에는 하위 버전의 모든 기능과 몇 가지 새로운 기능이 포함되어 있다.
이전 버전(더 이상 개발 중이 아님):
- MySQL 5.1.X 원본 트리에 포함된 Ndb
- MySQL 5.1 기반 MySQL Cluster 6.2a
- 첫 번째 '텔코' 또는 '캐리어 등급판' 출시.255개 노드, 온라인 테이블 변경, 복제 지연 시간 및 처리량 향상 등 지원
- MySQL 5.1 기반 MySQL Cluster 6.3b
- 압축 백업 + LCP, 순환 복제 지원, 충돌 감지/해결, 테이블 최적화 등 포함.
- MySQL 5.1 기반 MySQL Cluster 7.0c
- 멀티스레드 데이터 노드(ndbmtd), 트랜잭션 DDL, Windows 지원 포함.
- MySQL 5.1 기반 MySQL Cluster 7.1d
- ClusterJ 및 ClusterJ 포함PA 커넥터
현재 사용 가능한 버전:
- MySQL 5.5 기반 MySQL Cluster 7.2
- Adaptive Query Localization(데이터 노드로 JOIN 작업을 푸시),[7] Memcached API, 간소화된 Active/Active Geographic 복제, 다중 사이트 클러스터링, 데이터 노드 확장성 향상, 통합 사용자 권한 포함.
- MySQL 5.6 기반 MySQL Cluster 7.3
- 외부 키 제약 조건, Node.js / JavaScript API 및 자동 설치 프로그램 지원 포함.[8]
- MySQL 5.6 기반 MySQL Cluster 7.4
- 향상된 충돌 감지 및 해결, 향상된 노드 재시작 시간, 새로운 이벤트 API 포함.[9]
- MySQL 5.7 기반 MySQL Cluster 7.5
- 대규모 데이터셋 지원 포함(128개 이상)노드당 TB), 읽기 최적화된 테이블을 통해 읽기 확장성 향상, SQL 지원 향상.[10]
- MySQL 5.7 기반 MySQL Cluster 7.6
- 향상된 재시작 및 복구 시간, Disk 공간 사용량 감소, 조인 성능 개선, 새로운 가져오기 도구, 공유 메모리 통신, 클라우드에 대한 토폴로지 인식 개선.[11]
- MySQL 8.0 기반 MySQL Cluster 8.0
- 최대 행 크기를 30kB로 늘림, 최대 144개의 데이터 노드에 대한 지원, 분산 필터링 및 결합 개선, 병렬 외부 조인과 세미 조인에 대한 지원, 스키마 및 ACL 처리 향상, 온라인 열 이름 변경, 단순화된 구성, 멀티스레드 병렬 백업 및 복원, 디스크 성능 향상, 3 및 4에 대한 향상된 지원복제본 구성, 멀티 소켓 메시 네트워킹 지원, 복원 변환 지원, 향상된 Blob 쓰기 성능, 백업 암호화, IPv6 지원, 자동 구성, 복구 성능 향상, 쿼리 멀티스레딩 개선.[12]
요구 사항들
평가를 위해 단일 물리적 서버에서 MySQL 클러스터를 실행할 수 있다.프로덕션 배포의 경우 최소 시스템 요구 사항은 3 x 인스턴스/호스트:
- 2 × 데이터 노드
- 1 × 애플리케이션/관리 노드
또는
- 2 × 데이터 노드 + 애플리케이션
- 1 × 관리 노드
다음과 같은 구성:
- OS: Linux, Solaris, Windows. MacOS(개발 전용)
- CPU: Intel/AMD x86/x86-64, UltraSPARC
- 메모리: 1GB
- HDD: 3GB
- 네트워크: 1개 이상의 노드(표준 이더넷 - TCP/IP)
성능이 뛰어난 생산 등급 클러스터 배포에 대한 팁 및 권장 사항은 MySQL 클러스터 평가 가이드와 MySQL 클러스터 데이터베이스의 성능 최적화에 대한 가이드에서 확인할 수 있다.
역사
MySQL AB는 Ericsson이 시작한 소규모 벤처기업인 Alzato로부터 MySQL Cluster에 대한 기술을 취득했다.NDB는 원래 통신 시장을 위해 설계되었으며 높은 가용성과 높은 성능 요건을 갖추고 있다.[13]
NDB 스토리지 엔진을 기반으로 하는 MySQL Cluster는 이후 MySQL 제품에 통합되었으며, 첫 번째 릴리즈는 MySQL 4.1이다.
지원
MySQL 클러스터는 GPLv2 라이센스에 따라 라이센스가 부여된다.상업적 지원은 MySQL Cluster CGE의 일부로 제공되며, MySQL Enterprise Security 및 MySQL Enterprise Audit 외에도 MySQL Cluster Manager, MySQL Enterprise Monitor와 같은 오픈되지 않은 소스 추가 기능도 포함된다.
참고 항목
- MySQL 및 MariaDB용 일반 동기식 다중 마스터 복제 라이브러리인 Galera Cluster.[1]
- 또한 Percona XtraDB Cluster는 Galera 복제 라이브러리와 다중 마스터를 지원하는 MySQL의 조합이다.
참조
- ^ "MySQL NDB Cluster 8.0 Release Notes". mysql.com.
- ^ 클러스터 CGE.MySQL. 2013-09-18에 검색됨.
- ^ Oracle Corporation. "MySQL Cluster Benchmarks: Oracle and Intel Achieve 1 Billion Writes per Minute". mysql.com. Retrieved June 24, 2013.
- ^ MySQL :: MySQL 5.6 참조 설명서 : 17.6.11 MySQL 클러스터 복제 충돌 해결Dev.mysql.com.2013-09-18에 검색됨
- ^ 데이터 센터 간에 동기식으로 데이터베이스 복제 - 제정신이세요?(오라클의 MySQL 블로그).아마존닷컴(2011-10-03)2013-09-18에 검색됨
- ^ Jon Stephens, Mike Kruckenberg, Roland Bouman(2007):"MySQL 5.1 클러스터 DBA 인증 연구 가이드", 페이지 86
- ^ MySQL Cluster 7.2, MySQL Developer Zone의 새로운 기능
- ^ MySQL Cluster 7.3은 이제 일반적으로 사용 가능 – 개요, MySQL Cluster 7.3 요약
- ^ MySQL Cluster 7.4 GA: 2억 QPS, Active-Active Geographic 복제 등, MySQL Cluster 7.4 요약
- ^ MySQL Cluster 7.5 이제 GA!, Oracle의 MySQL 블로그, 2016년 10월 18일
- ^ MySQL Cluster 7.6은 이제 일반적으로 사용 가능, Oracle의 MySQL 블로그, 2018년 6월 1일
- ^ "MySQL :: MySQL 8.0 Reference Manual :: 22.1.4 What is New in NDB Cluster". dev.mysql.com.
- ^ Todd R. Weiss (October 14, 2003). "MySQL acquiring data management system vendor Alzato". Computerworld.com. Retrieved November 5, 2012.
외부 링크
MySQL
- 공식 MySQL 클러스터 설명서
- MySQL Cluster API 개발자 가이드
- MySQL 클러스터 데모
- MySQL 클러스터 데이터시트
- MySQL 클러스터 FAQ
- MySQL 클러스터 자동 설치 프로그램 튜토리얼
- MySQL 클러스터 블로그
- MySQL 클러스터 시작
- MySQL 클러스터 백서 및 가이드
- MySQL 클러스터 커뮤니티 포럼
기타
- Telecom Applications용 병렬 데이터 서버의 설계 및 모델링 (1997) Original MySQL Cluster 설계 동기 부여.