2017-11-12 2 views
0

고 가용성 SQL 솔루션을 찾고 있습니다! 내가 읽은 기사 중 하나는 갈레 클러스터에 "실질적으로 동기화"에 대해이었다 https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/Galera Cluster가 일관성을 보장하는 방법은 무엇입니까?

그는 말한다 writeset 실제로, 주어진 노드에서 열려으로 감지 어떤 잠금 충돌을 적용

(not-yet-committed) 트랜잭션을 에서 실행하면 그 열린 트랜잭션이 롤백됩니다.

Writesets는 항상

는 무엇 커밋 된 트랜잭션을 가진 경우 WriteSet 충돌이 일어날 승리 복제 스레드에 의해 적용되는?

그는 또한 말한다 :

Writesets 다음 (순서대로) 모든 노드에 "인증"하는

.

Galera Cluster는 클러스터를 통해 WriteSet을 어떻게 주문합니까? WriteSets을 주문한 숨겨진 마스터 노드가 있습니까? 사육사 같은 거? 또는 무엇을?

답변

0

(이 답변이 직접하지 당신의 질문을 해결 않지만, 갈레가 '좋은'것을 당신에게 신뢰를 줄 수 있습니다.)

갈레 (PXC 등)에서

, 일반적으로 두 시간이있을 때 트랜잭션 실패 할 수 있습니다. 트랜잭션이 실행되고있는 노드에서

  1. 이 조치는 현재 같은 노드에서 실행되는 것과 비교된다. 충돌이 발생하면 두 트랜잭션 중 하나가 중지되거나 (innodb_lock_wait_timeout으로 생각됨) 데드락이 발생하고 롤백됩니다.

  2. COMMIT 시간에 정보는 다른 모든 노드로 전송됩니다. 노드의 트랜잭션이나 보류중인 트랜잭션 (gcache)을 확인합니다. 충돌이 있으면 문제가 있음을 알리는 메시지가 다시 전송됩니다. 따라서 원래 노드의 노드는 COMMIT입니다. 이러한 이유로 COMMIT 성명에서도 오류를 확인해야합니다.

는 단일 노드 시스템과 마찬가지로, 교착 상태가 은 일반적으로 전체 트랜잭션을 재생하여 해결됩니다.

autocommit의 경우 구성 가능한 작지만 재시도 횟수가 적어 진후 실패합니다. 다시 오류를 확인하십시오. 그러나 재시도가 이미 시도되었으므로 프로그램을 중단 할 수 있습니다.

현재 Galera는 최소한 3 개의 다른 물리적 위치에 최소 3 개의 노드가 있으며 MySQL에 가장 적합한 HA 솔루션입니다. 단일 장애 지점 (single-point-of-failure)에서 효과적으로 견딜 수 있습니다. (오라클의 Group Replication/InnoDB Cluster는 조만간 출시 될 예정이며 매우 유망하다.)

"중요한 읽기"문제는 Galera의 해결책이 있지만 중요한 것은 조치를 취해야한다는 것입니다. wsrep_sync_wait을 참조하십시오. (이 글을 쓰는 시점에서 InnoDB Cluster는 해결책이 없습니다.)

PXC/Galera로 이동할 때의 코딩 차이에 대한 팁 (위에 포함 된 것 중 일부)은 http://mysql.rjweb.org/doc.php/galera을 참조하십시오.

1

두 번째 질문입니다 (Galera가 쓰기 세트를 주문하는 방법).

Galera는 토템 프로토콜을 기반으로하는 EVS (Extended Virtual Synchrony)을 구현합니다. Totem 프로토콜은 토큰이있는 노드 만 새로운 요청을 보낼 수있는 토큰 전달 형식을 구현합니다 (이해함). 따라서 한 번에 하나의 노드 만 토큰을 갖기 때문에 쓰기가 정렬됩니다. 학문적 배경에 대한

, 이러한 볼 수 있습니다 :

The Totem Single-Ring Ordering and Membership Protocol

The database state machine and group communication issues

관련 문제