MyCAT는 MySQL의 읽기와 쓰기의 분리를 실현합니다 (2) -MyCAT 구성 (1)

MyCAT는 MySQL의 읽기와 쓰기의 분리를 실현합니다 (2) -MyCAT 구성 (1)

1. MyCAT 개요

Mycat은 오픈 소스 분산 데이터베이스 시스템입니다. MySQL 프로토콜을 구현하는 서버입니다. 프론트 엔드 사용자는 MySQL 클라이언트 도구 및 명령 줄을 통해 액세스 할 수있는 데이터베이스 프록시로 간주 할 수 있습니다. 백엔드는 MySQL 기본 프로토콜을 사용할 수 있습니다. 여러 MySQL 서버와 통신하거나 JDBC 프로토콜을 사용하여 대부분의 주요 데이터베이스 서버와 통신합니다. 핵심 기능은 테이블 및 데이터베이스 파티셔닝입니다. 즉, 큰 테이블이 N 개의 작은 테이블로 수평 분할되어 백엔드 MySQL 서버 또는 기타 서버에 저장됩니다. 데이터베이스에서. Mycat 백엔드는 MySQL, SQL Server, Oracle, DB2 및 PostgreSQL과 같은 메인 스트림 데이터베이스와 새로운 유형의 NoSQL 스토리지 인 MongoDB를 지원할 수 있습니다. 최종 사용자의 관점에서 Mycat에서는 어떤 종류의 저장 방법이든 상관없이 데이터베이스 작업을위한 표준 SQL 문을 지원하는 전통적인 데이터베이스 테이블입니다.

1. DBA의 경우 Mycat을 다음과 같이 이해할 수 있습니다. Mycat은 MySQL Server이고 Mycat 뒤에 연결된 MySQL Server는 InnoDB, MyISAM 등과 같은 MySQL의 스토리지 엔진과 같습니다. 따라서 Mycat 자체는 데이터를 저장하지 않으며, 데이터는 백엔드 MySQL에 저장되므로 MySQL은 데이터의 신뢰성과 트랜잭션을 보장합니다. 간단히 말해 Mycat은 MySQL의 최고의 동반자이며 MySQL을 어느 정도 허용합니다. Oracle과 PK 할 수 있습니다.

2. 소프트웨어 엔지니어의 경우 Mycat을 다음과 같이 이해할 수 있습니다. Mycat은 MySQL과 유사한 데이터베이스 서버입니다. MySQL에 연결하여 Mycat에 연결할 수 있습니다 (다른 포트를 제외하고 기본 Mycat 포트는 MySQL 3306 대신 8066입니다. , 따라서 연결 문자열에 포트 정보를 추가해야합니다.) 대부분의 경우 익숙한 개체 매핑 프레임 워크와 함께 Mycat을 사용할 수 있지만 최상의 성능을 얻을 수 있으므로 조각난 테이블에 대해 가능한 한 기본 SQL 문을 사용하는 것이 좋습니다. , 특히 수천만 또는 수 천억 개의 기록의 경우.

3. 설계자의 경우 Mycat을 다음과 같이 이해할 수 있습니다. Mycat은 읽기-쓰기 분리, 테이블 및 데이터베이스 파티셔닝, 재해 복구 백업뿐만 아니라 다중 테넌트 애플리케이션 개발에도 사용할 수있는 강력한 데이터베이스 미들웨어입니다. 클라우드 플랫폼 인프라는 아키텍처를 고도로 적응하고 유연하게 만듭니다. Mycat 지능형 최적화 모듈의 도움으로 시스템의 데이터 액세스 병목 현상과 핫스팟을 한 눈에 알 수 있습니다. 이러한 통계 분석 데이터에 따라 자동 또는 수동으로 백엔드를 조정할 수 있습니다. 스토리지, 서로 다른 테이블을 서로 다른 스토리지 엔진에 매핑하고 전체 애플리케이션 코드를 변경할 필요가 없습니다.

둘째, Mycat의 기본 원리

Mycat의 원리는 복잡하지 않습니다. Mycat의 원리에서 가장 중요한 단어는 "intercept"입니다. 사용자가 보낸 SQL 문을 가로 채서 먼저 SQL 문에 대한 특정 분석을 수행합니다 : 단편화 분석, 라우팅 분석, 읽기-쓰기 분리 분석 , 캐시 분석 등을 수행 한 다음이 SQL을 백엔드 실제 데이터베이스로 전송하면 반환 된 결과가 제대로 처리되고 최종적으로 사용자에게 반환됩니다.

예를 들어 Orders 테이블을 세 개의 샤드 데이터 노드 (줄여서 dn)로 나누면이 세 개의 샤드는 두 개의 MySQL 서버 (DataHost), datanode = database @ datahost에 배포됩니다. 1 ~ N 개의 서버를 사용하여 샤딩 할 수 있습니다. , 샤딩 규칙은 문자열 열거 샤딩 규칙이고 규칙은 샤딩 열 + 샤딩 함수 (규칙 함수)로 정의됩니다. 여기서 샤딩 필드는 prov이고 샤딩 함수는 다음과 같습니다. 문자열 열거 방법. 아래 그림과 같이:

여기에 사진 설명 삽입

Mycat은 SQL을 수신하면 먼저 SQL을 구문 분석하고 관련된 테이블을 찾은 다음이 테이블의 정의를 확인합니다. 조각화 규칙이 있으면 SQL의 조각 필드 값을 가져와 조각화 함수와 일치시킵니다. SQL에 해당하는 샤드 목록을 가져온 다음 실행을 위해 이러한 샤드로 SQL을 전송하고 마지막으로 모든 샤드에서 반환 된 결과 데이터를 수집 및 처리하고 클라이언트에 출력합니다.
예를 들어 SQL 문 : select * from orders where prov = 'Beijing';
sharding 함수에 따르면 Beijing은 dn1을 반환하므로 SQL은 MySQL1로 전송되어 DB1에서 쿼리 결과를 가져와 사용자에게 반환합니다.
예를 들어 SQL 문 : select * from orders where prov in ( 'Beijing', 'Shanghai');
그런 다음 SQL이 실행을 위해 MySQL1 및 MySQL2로 전송되고 결과가 수집되어 사용자에게 출력됩니다. 그러나 일반적으로 SQL에는 Mycat 측에서 결과 집합의 2 차 처리를 포함하는 Order By 및 Limit 절이 있습니다.

세, Mycat의 기본 개념

1. 데이터베이스 미들웨어

Mycat은 오픈 소스 분산 데이터베이스 시스템이지만 Mycat에는 스토리지 엔진이 없기 때문에 Mycat은 완전한 의미에서 분산 데이터베이스 시스템이 아닙니다. Mycat은 데이터베이스 미들웨어로, 데이터베이스와 애플리케이션 간의 데이터 처리 및 상호 작용을위한 중간 서비스입니다. 데이터가 조각난 후 원본 데이터베이스는 여러 조각난 데이터베이스로 분할되고 모든 조각난 데이터베이스 클러스터는 완전한 데이터베이스 저장소를 구성합니다. 아래 그림과 같이:

여기에 사진 설명 삽입

데이터가 여러 샤드 데이터베이스로 분할 된 후 애플리케이션이 데이터를 읽어야하는 경우 여러 데이터 소스의 데이터를 처리해야합니다. 데이터베이스 미들웨어가없는 경우 응용 프로그램은 샤딩 클러스터, 데이터 소스 전환, 트랜잭션 처리, 데이터 집계 등을 직접 직면하게되며 샤딩 문제를 처리하기 위해 많은 작업을 할 것입니다. 데이터베이스 미들웨어를 사용하면 많은 양의 일반 데이터 집계 및 데이터 소스 전환이 모두 미들웨어에 의해 처리되며 애플리케이션은 비즈니스 처리에만 집중하면됩니다.

2. 논리 라이브러리 (스키마)

실제 응용을 위해서는 미들웨어의 존재를 알 필요가 없으며, 비즈니스 개발자는 데이터베이스의 개념 만 알면되기 때문에 데이터베이스 미들웨어는 하나 이상의 데이터베이스 클러스터로 구성된 논리적 라이브러리로 간주 할 수 있습니다. 아래 그림과 같이:

여기에 사진 설명 삽입

3. 논리 테이블 (테이블)

(1) 논리 테이블

애플리케이션의 경우 데이터를 읽는 것은 논리 테이블입니다. 논리 테이블은 데이터 분할 후 하나 이상의 샤드 라이브러리에 분산되거나 데이터 분할 또는 분할없이 하나의 테이블로만 구성 될 수 있습니다.

(2) 조각화 테이블

분할 된 테이블은 여러 데이터베이스로 분할해야하는 많은 양의 데이터가 포함 된 테이블을 의미합니다. 이러한 방식으로 각 샤드는 데이터의 일부를 가지며 모든 샤드는 완전한 데이터를 구성합니다. 예 : 다음 코드에서 t_node 테이블의 데이터는 규칙에 따라 두 개의 샤드 노드 (dataNode) dn1 및 dn2로 나뉩니다.

<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1" />

(3) 조각화되지 않은 테이블

테이블의 데이터 양이 그다지 크지 않은 경우 분할 할 필요가 없습니다. 분할되지 않은 테이블은 분할 된 테이블, 즉 데이터 분할이 필요하지 않은 테이블에 상대적입니다. 예를 들어 다음 코드는 shard 노드 dn1에 t_node 테이블을 저장합니다.

<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1" />

(4) ER 표

Mycat은 ER 관계를 기반으로 데이터 조각화 전략을 제안했습니다. 자식 테이블의 레코드와 관련 부모 테이블 레코드는 동일한 데이터 조각에 저장됩니다. 즉, 자식 테이블은 부모 테이블에 종속되고 테이블 그룹 (테이블 그룹)을 통과하여 데이터 결합을 보장합니다. 라이브러리간에 작동하지 않습니다. 테이블 그룹화는 교차 샤드 데이터 조인을 해결하는 데 좋은 아이디어이며 데이터 세분화 계획을위한 중요한 규칙이기도합니다.

(5) 글로벌 테이블

실제 비즈니스 시스템에는 사전 테이블과 유사한 테이블이 많은 경우가 많습니다. 이러한 테이블은 거의 변경되지 않습니다. 사전 테이블에는 드문 변경, 전체 데이터의 작은 변경, 작은 데이터 규모 등의 특성이 있습니다.
이러한 유형의 테이블의 경우 분할의 경우 비즈니스 테이블이 스케일로 인해 분할되면 비즈니스 테이블과 이러한 사전 테이블 간의 연관성이 더 어려운 문제가됩니다. Mycat은 데이터 중복성을 통해 이러한 유형의 테이블을 해결합니다. 조인, 즉 모든 샤드에는 데이터 사본이 있으며 사전 테이블 또는 사전 테이블의 특성을 충족하는 일부 테이블은 전역 테이블로 정의됩니다.

4. 샤딩 노드 (dataNode)

데이터 분할 후 큰 테이블은 서로 다른 샤드 데이터베이스로 분할되고 각 테이블 샤드가 위치한 데이터베이스가 샤드 노드입니다.

5. 노드 호스트 (dataHost)

데이터가 분할 된 후 각 샤드 노드 (dataNode)가 반드시 단일 머신을 차지하는 것은 아니며 동일한 머신에 여러 개의 샤드 데이터베이스가있을 수 있으므로 하나 이상의 샤드 노드 (dataNode)가있는 머신이 노드 호스트입니다. (DataHost), 동시 단일 노드 호스트 수에 대한 제한을 피하기 위해 샤드 노드 (dataNode)와 다른 노드 호스트 (dataHost)에 대한 높은 읽기 및 쓰기 압력의 균형을 맞추십시오.

6. 조각화 규칙 (규칙)

데이터 분할에는 특정 규칙이 필요하며, 특정 업무 규칙에 따른 데이터 분할 규칙이 샤딩 규칙입니다. 데이터가 분할 될 때 적절한 분할 규칙을 선택하는 것이 매우 중요합니다.

7. 글로벌 시퀀스 번호 (시퀀스)

데이터 분할 후에는 원래 관계형 데이터베이스의 기본 키 제약 조건을 분산 조건에서 사용할 수 없으며 데이터의 고유 한 식별을 보장하기 위해 외부 메커니즘을 도입해야합니다. 글로벌 데이터의 고유 한 식별을 보장하는이 메커니즘은 글로벌 일련 번호입니다.

8. 다중 테넌시

다중 테넌트 기술 또는 다중 테넌트 기술은 소프트웨어 아키텍처 기술입니다. 다중 사용자 환경에서 동일한 시스템 또는 프로그램 구성 요소를 공유하고 사용자간에 데이터를 격리하는 방법입니다. 다중 테넌트 데이터 저장소에는 세 가지 주요 솔루션이 있습니다.

(1) 독립 데이터베이스

하나의 테넌트에는 하나의 데이터베이스가 있습니다.이 솔루션은 가장 높은 사용자 데이터 격리 수준과 최상의 보안을 제공하지만 비용도 높습니다. 이 솔루션은 한 고객에 대해 한 세트의 데이터를 배포하는 기존 방식과 유사하지만 소프트웨어가 운영자에게 균일하게 배포된다는 점이 다릅니다. 매우 높은 데이터 격리 수준이 필요한 은행 및 병원과 같은 세입자는이 모델을 선택할 수 있습니다.
장점 : 서로 다른 테넌트에 대해 독립적 인 데이터베이스를 제공하면 서로 다른 테넌트의 고유 한 요구 사항을 충족하기 위해 데이터 모델의 확장 설계를 단순화하는 데 도움이됩니다. 장애가 발생하면 데이터를 복원하는 것이 비교적 간단합니다.
단점 : 데이터베이스 설치 수를 늘리고 유지 관리 비용과 구입 비용을 높입니다.

(2) 공유 데이터베이스, 격리 된 데이터 구조

즉, 여러 또는 모든 테넌트가 데이터베이스를 공유하지만 각 테넌트에는 스키마가 있습니다.
장점 : 완전한 격리가 아닌 보안 요구 사항이 더 높은 테넌트에 대해 일정 수준의 논리적 데이터 격리를 제공합니다. 각 데이터베이스는 더 많은 테넌트를 지원할 수 있습니다.
단점 : 데이터베이스 복원에 다른 테넌트의 데이터가 포함되기 때문에 오류가 발생하면 데이터 복구가 더 어려워지고, 교차 테넌트 통계가 필요한 경우 특정 어려움이 있습니다.

(3) 공유 데이터베이스, 공유 데이터 구조

즉, 테넌트는 동일한 데이터베이스와 동일한 스키마를 공유하지만 테넌트 ID는 테이블에서 테넌트 데이터를 구별하는 데 사용됩니다. 공유 수준이 가장 높고 격리 수준이 가장 낮은 모델입니다.
장점 : 유지 관리 및 구입 비용이 가장 낮으므로 각 데이터베이스에서 지원하는 테넌트 수가 가장 많습니다.
단점 : 포맷 수준이 가장 낮고 보안 수준이 가장 낮으며 설계 및 개발 과정에서 보안 개발 량을 늘릴 필요가 있으며 데이터 백업 및 복구가 가장 어렵고 하나씩 백업과 복원이 필요합니다.

추천

출처blog.csdn.net/weixin_44377973/article/details/108202317