MariaDB Galera 클러스터에 대한 DR 설정
노드가 3개인 MariaDB Galera Cluster 2개가 있습니다.
클러스터 1 : MDB-01, MDB-02, MDB-03 클러스터 2 : MDBDR-01, MDBDR-02, MDBDR-03
이 두 클러스터는 두 개의 지리적 영역에 있는 두 개의 서로 다른 데이터 센터에 있습니다.
클러스터 1은 프로덕션 클러스터이고 클러스터 2는 DR 클러스터입니다.
GTID를 사용한 비동기 복제가 http://www.severalnines.com/blog/deploy-asynchronous-replication-slave-mariadb-galera-cluster-gtid-clustercontrol 링크의 지정된 구성에 따라 MDB-01에서 MDB-01 사이에 설정되었습니다(Link는 MariaDB Galera Cluster to Standalone MariaDB 인스턴스 간의 비동기 복제입니다).그러나 MariaDB Galera Cluster에서 MariaDB Galera Cluster로 비동기 복제를 위해 동일한 구성을 설정했습니다.)
아래 명령으로 현재 슬레이브 MDBDR-01 => MDB-01 => MDB-02로 전환할 수 있습니다.
MASTER를 MASTER_host='로 변경합니다.MDB-02'
그런데 MDBDR-01이 다운된 경우 MDBDR-02 => MDB-01을 가리키는 방법에 어려움을 겪고 있습니다.
MDBDR-02 => MDB-01 또는 MDBDR-03 => MDB-01을 포인팅하기 위한 입력을 해주실 수 있나요?
이 기사는 MariaDB의 각 GTID 구현이 이러한 상황에서 문제를 일으킬 수 있다는 것을 이해해야 합니다.각 노드는 고유한 GTID 목록을 유지하고 galera 트랜잭션에는 고유한 ID가 없으므로 동일한 GTID가 각 서버의 동일한 위치를 가리키지 않을 수 있습니다(이 기사 참조).
그 문제 때문에 MariaDB 10.1 없이는 당신이 하는 일을 시도하지 않을 것입니다.MariaDB 10.1.8은 10.1 라인의 첫 번째 GA 릴리즈입니다. 10.1은 GTID 구현을 변경하여 galera 트랜잭션이 자신의 것을 사용하도록 합니다.server_id
(config variable을 통해 설정).그런 다음 노예에 대한 복제를 필터링하여 갤러리 에이드만 복제할 수 있습니다.
다른 슬레이브 서버로 전환하려면 이전 슬레이브에서 마지막 GTID를 실행해야 합니다.gtid_slave_pos
에 저장됩니다.mysql.gtid_slave_pos
,그렇지만mysql.*
테이블이 복제되지 않습니다.트랜잭션의 원래 GTID가 다른 슬레이브 galera 노드로 전달되는지 여부를 테스트할 방법이 없습니다(즉, 마스터 클러스터의 galera server_id가 1이고 슬레이브 클러스터의 galera server_id가 2이고 MDDR-01이 GTID 1-1-123의 슬레이브 이벤트를 수신하는 경우 MDDR-02가 1-1-123 또는 1-2-456으로 기록할지 여부).새로운 GTID 구현이 server_id를 변경해야 하므로 그렇지 않을 것으로 추측하지만, 당신은 이것을 확인할 수 있을 것입니다.다른 슬레이브 galera 노드에서 마지막으로 실행된 마스터 GTID를 가져올 수 없기 때문에 이전 슬레이브에서 GTID를 가져와야 할 수 있습니다. 이는 이전 슬레이브를 정상적으로 종료하지 않는 한 불가능할 수 있습니다.새 슬레이브의 binlog에서 마지막으로 실행된 트랜잭션의 GTID를 찾아 마스터의 binlog에 있는 트랜잭션과 일치시켜야 할 수도 있습니다.그리고 사용하지 않을 경우에는sync_binlog = 1
, binlog는 신뢰할 수 없고 약간 뒤에 있을 수 있습니다.
각 galera 슬레이브 노드는 실행된 GTID를 모를 수 있고 이전 GTID 이벤트를 건너뛸 수 없기 때문에 사용자는 다음과 같이 플레이해야 할 수도 있습니다.SQL_SLAVE_SKIP_COUNTER
발견한 GTID가 뒤에 있을 경우 올바른 위치로 이동할 수 있습니다.
GTID(또는 추측)를 얻으면 원래 슬레이브에 설정한 방식과 동일하게 새 슬레이브에 복제를 설정합니다.다음 명령을 수행해야 합니다.
SET GLOBAL gtid_slave_pos = "{마지막으로 실행된 GTID}",마스터를 마스터_host="{MasterAddress}", 마스터_port={MasterPort}, 마스터_user="{ReplicationUser}, 마스터_password={ReplicationPassword}, 마스터_use_gtid= slave_pos;로 변경합니다.시작 슬레이브;
또한 이전 슬레이브를 다시 시작하기 전에 이전 슬레이브에서 복제를 실행 중지해야 누락된 이벤트가 두 번 복제되지 않습니다.
실행된 슬레이브 GTID가 galera를 통해 복제될 때까지 이와 같은 페일오버는 복잡한 프로세스가 될 것입니다.
언급URL : https://stackoverflow.com/questions/33032210/dr-setup-for-mariadb-galera-clusters
'programing' 카테고리의 다른 글
Wordpress 페이지 편집 영역에서 "TypeError: c is null"을 제거하는 방법 (0) | 2023.11.06 |
---|---|
.sql 파일에서 SQL 구문을 확인하려면 어떻게 해야 합니까? (0) | 2023.11.06 |
휴대성이란 무엇입니까?자바는 다른 언어보다 어떻게 더 휴대성이 좋습니까? (0) | 2023.11.06 |
HTML 에코 내부에 변수가 있는 큰따옴표 탈출 (0) | 2023.11.06 |
Sqlplus oracle : bash에서 sql 명령을 한 줄로 실행하려면 어떻게 해야 합니까? (0) | 2023.11.06 |