2017-01-18 4 views
0

내 목표는 내 엔드 투 엔드 스택이 더 많은 TPS를 지원할 수 있도록 내 galera 클러스터에서 두 노드의 충분한 CPU 리소스를 활용하는 것입니다. 현재, 전체 스택은 36vcpu의 단일 mariadb 서버에 의해 제한되며 10000 TPS로 이동할 수 있습니다.galera 클러스터에서 놀랍게도 낮은 성능

Galera 클러스터에서 DB 노드 2 개를 사용하여 거의 20000 개의 TPS를 지원하고자합니다 (1은 약 1 만개의 TPS를 지원할 수 있으므로 CPU으로 제한됨). 이 시점에서 나는 분할 뇌와 다른 복제 또는 경계선 시나리오에 신경 쓰지 않는다. ha 프록시로드 밸런서가있는 galera의 노드 2 개를 테스트했지만 매우 나쁜 결과를 얻었습니다 (3500 TPS 만 해당). 갈레라가 할 수없는 것을 이루기 위해 노력하고 있습니까? 약간의 관점을 바랍니다.

하나의 노드에서 10000 TPS 제한을 초과하는 응용 프로그램에 대해 내 DB를 클러스터 할 수있는 다른 메커니즘은 무엇입니까?

+0

MySQL 클러스터링에 대한 전문가는 아니지만, 복제가 아닌 속도를 목표로하고 있기 때문에 Galera와 같은 복제 중심 클러스터 대신 NDB와 같은 MySQL의 공유 Nothing 클러스터 아키텍처를 고려해야합니다. – JNevill

+0

Production 시스템에서 Galera를 2 노드로 사용할 수 없습니다. 한 노드가 크래시되고 다시 동기화되면 두 번째 노드가 재 동기화에 사용되므로 클러스터가 다운됩니다 !! 그것도 부하를 보는 것이 중요합니다. 높은 읽기로드 Galera가 가장 좋습니다. 또한 네트워크에서 멀티 캐스트에 대해 생각하기 때문에 노드는 각 노드가 아닌 1 개의 주소로만 보내야합니다. my.cnf를 최적화하십시오. 마지막으로 HaProxy 대신 MaxScal을 사용하십시오. –

답변

1

각 트랜잭션 (Galera)은 COMMIT 시간에 트랜잭션이 모든 곳에서 작동하는지 확인하기 위해 다른 모든 노드와 대화해야합니다. 결국 노드는 트랜잭션을 수행해야합니다. 많은 요소에 따라, 이러한 노력은 원래 노드의 노력보다 훨씬 적을 수도 아닐 수도 있습니다.

모든 복제 형태는 슬레이브에서 마스터에서 발생한 '쓰기'를 반복하는 것을 포함합니다. 트릭은 슬레이브의 노력을 최소화하는 것입니다. 그러나 이것은 부분적으로 만 수행 될 수 있습니다.

독립 실행 형 서버가 10K 트랜잭션을 초과 할 경우 복제 설치가 2 노드에서 20K를 수행 할 수 없습니다. 그것은 수 있습니다 3 개 이상의 노드와 20K를 얻을 수 있습니다.

Galera는 4-5 노드에서 가장 잘 나온 것처럼 보입니다. 즉, 동기화가 압도적으로되어 스케일링이 제한됩니다.

오라클의 "InnoDB Cluster"는 5 노드를 넘을 가능성이 높습니다. 그것은 5.7과 8.0에서 다소 사용할 수 있습니다.

NDB 클러스터는 Galera 또는 InnoDB 클러스터의 "비동기"(일반 복제), "준 동기"또는 "동기화"와 매우 다른 모델 인 "최종 일관성"에 의존합니다. 트랜잭션이 서로 충돌하지 않거나 적어도 노드가 아닌 경우 NDB가 빛날 수 있습니다.

10K가 달성 된 실험이있었습니다. this을 시도하십시오.

'거래'를 설명해주십시오. 성능을 향상시키는 다른 기술이있을 수 있습니다. 예를 들어, 하나의 INSERT이 100 개의 행을 갖는 경우는 100 개의 단일 행보다 약 10 배 빠릅니다. INSERTs; CPU의 많은 부분을 절약 할 수 있습니다.