2.8. Galera를 사용하여 MariaDB 복제
Red Hat Enterprise Linux 9에서 Galera 솔루션을 사용하여 MariaDB 데이터베이스를 복제할 수 있습니다.
2.8.1. MariaDB Galera 클러스터 소개
Galera 복제는 여러 MariaDB 서버로 구성된 동기 다중 소스 MariaDB Galera 클러스터 생성을 기반으로 합니다. 일반적으로 복제본이 읽기 전용인 기존의 기본/복제 설정과 달리 MariaDB Galera Cluster의 노드는 모두 쓸 수 있습니다.
Galera 복제와 MariaDB 데이터베이스 간의 인터페이스는 쓰기 세트 복제 API(wsrep API)로 정의됩니다.
MariaDB Galera 클러스터의 주요 기능은 다음과 같습니다.
- 동기 복제
- 액티브-액티브 멀티 소스 토폴로지
- 클러스터 노드에 읽기 및 쓰기
- 자동 멤버십 제어, 클러스터에서 실패한 노드 삭제
- 자동 노드 결합
- 행 수준에서 병렬 복제
- 직접 클라이언트 연결: 사용자가 클러스터 노드에 로그온하고 복제가 실행되는 동안 노드에서 직접 작업할 수 있습니다.
동기 복제는 서버와 관련된 쓰기 집합을 클러스터의 모든 노드에 브로드캐스트하여 커밋 시 트랜잭션을 복제함을 의미합니다. 클라이언트(사용자 애플리케이션)는 기본 MariaDB 와 유사한 DBMS(데이터베이스 관리 시스템)에 직접 연결됩니다.
동기 복제를 사용하면 클러스터의 한 노드에서 동시에 발생한 변경 사항이 클러스터의 다른 노드에서 동시에 수행됩니다.
따라서 동기 복제는 비동기 복제에 비해 다음과 같은 이점이 있습니다.
- 특정 클러스터 노드 간의 변경 사항을 전파하는 데 지연 없음
- 모든 클러스터 노드는 항상 일관성이 유지됩니다.
- 클러스터 노드 중 하나가 충돌하면 최신 변경 사항이 손실되지 않습니다.
- 모든 클러스터 노드의 트랜잭션이 병렬로 실행됩니다.
- 전체 클러스터의 원인
2.8.2. MariaDB Galera Cluster를 빌드하기 위한 구성 요소
MariaDB Galera 클러스터를 빌드하려면 시스템에 다음 패키지를 설치해야 합니다.
-
mariadb-server-galera
- MariaDB Galera 클러스터에 대한 지원 파일 및 스크립트를 포함합니다. -
mariadb-server
- 쓰기 세트 복제 API(wsrep API)를 포함하도록 MariaDB 업스트림에서 패치합니다. 이 API는 Galera 복제와 MariaDB 간의 인터페이스를 제공합니다. Galera -
MariaDB를 완벽하게 지원하기 위해 MariaDB 업스트림에서 패치했습니다.galera
패키지에는 다음이 포함됩니다.- Galera Replication Library 는 전체 복제 기능을 제공합니다.
- Galera Arbitrator 유틸리티를 분리 장애 시나리오의 투표에 참여하는 클러스터 멤버로 사용할 수 있습니다. 그러나 Galera Arbitrator 는 실제 복제에 참여할 수 없습니다.
-
Galera Systemd 서비스 및 Galera 래퍼 스크립트 ( Galera), Galera Arbitrator 유틸리티를 배포하는 데 사용됩니다. RHEL 9는
/usr/lib/systemd/system/garbd.service
및/usr/sbin/garb-systemd
에 있는 이러한 파일의 업스트림 버전을 제공합니다.
2.8.3. MariaDB Galera 클러스터 배포
MariaDB Galera Cluster 패키지를 배포하고 구성을 업데이트할 수 있습니다. 새 클러스터를 생성하려면 클러스터의 첫 번째 노드를 부트스트랩해야 합니다.
사전 요구 사항
MariaDB Galera Cluster 패키지를 설치합니다.
# dnf install mariadb-server-galera
결과적으로 다음 패키지가 종속 항목과 함께 설치됩니다.
-
mariadb-server-galera
-
mariadb-server
galera
MariaDB Galera 클러스터 빌드를 위해 이러한 패키지에 대한 자세한 내용은 MariaDB 클러스터 를 빌드하는 구성 요소를 참조하십시오.
-
MariaDB 서버 복제 구성은 시스템을 클러스터에 처음 추가하기 전에 업데이트해야 합니다.
기본 구성은
/etc/my.cnf.d/galera.cnf
파일에 배포됩니다.MariaDB Galera 클러스터를 배포하기 전에
/etc/my.cnf.d/galera.cnf
파일에서 다음 문자열로 시작하도록wsrep_cluster_address
옵션을 설정합니다.gcomm://
초기 노드의 경우
wsrep_cluster_address
를 빈 목록으로 설정할 수 있습니다.wsrep_cluster_address="gcomm://"
다른 모든 노드의 경우 실행 중인 클러스터의 일부인 모든 노드의 주소를 포함하도록
wsrep_cluster_address
를 설정합니다. 예를 들면 다음과 같습니다.wsrep_cluster_address="gcomm://10.0.0.10"
Galera 클러스터 주소를 설정하는 방법에 대한 자세한 내용은 Galera Cluster Address 를 참조하십시오.
절차
해당 노드에서 다음 래퍼를 실행하여 새 클러스터의 첫 번째 노드를 부트스트랩합니다.
# galera_new_cluster
이 래퍼를 사용하면 MariaDB 서버 데몬(
mariadbd
)이--wsrep-new-cluster
옵션과 함께 실행됩니다. 이 옵션은 연결할 기존 클러스터가 없는 정보를 제공합니다. 따라서 노드는 새 클러스터를 식별하기 위해 새 UUID를 만듭니다.참고mariadb
서비스는 여러 MariaDB 서버 프로세스와 상호 작용하는 systemd 방법을 지원합니다. 따라서 MariaDB 서버가 여러 개 있는 경우 인스턴스 이름을 접미사로 지정하여 특정 인스턴스를 부트스트랩할 수 있습니다.# galera_new_cluster mariadb@node1
각 노드에서 다음 명령을 실행하여 다른 노드를 클러스터에 연결합니다.
# systemctl start mariadb
결과적으로 노드가 클러스터에 연결되고 클러스터 상태와 자체 동기화됩니다.
추가 리소스
2.8.4. MariaDB Galera 클러스터에 새 노드 추가
MariaDB Galera 클러스터에 새 노드를 추가하려면 다음 절차를 사용합니다.
이 절차를 사용하여 기존 노드를 다시 연결할 수도 있습니다.
절차
특정 노드에서
/etc/my.cnf.d/galera.cnf 구성 파일의
[mariadb]
섹션에 있는wsrep_cluster_address
옵션에 있는 하나 이상의 기존 클러스터 구성원에게 주소를 제공하십시오.[mariadb] wsrep_cluster_address="gcomm://192.168.0.1"
새 노드가 기존 클러스터 노드 중 하나에 연결되면 클러스터의 모든 노드를 볼 수 있습니다.
그러나 클러스터의 모든 노드를
wsrep_cluster_address
에 나열하는 것이 좋습니다.결과적으로 하나 이상의 클러스터 노드가 중단된 경우에도 모든 노드가 다른 클러스터 노드에 연결하여 클러스터에 참여할 수 있습니다. 모든 멤버가 멤버십에 동의하면 클러스터 상태가 변경됩니다. 새 노드의 상태가 클러스터 상태와 다른 경우 새 노드는 증분 상태 전송(IST) 또는 SST(상태 스냅샷 전송)를 요청하여 다른 노드와 일관성을 보장합니다.
2.8.5. MariaDB Galera 클러스터 재시작
동시에 모든 노드를 종료하면 클러스터를 중지하고 실행 중인 클러스터가 더 이상 존재하지 않습니다. 그러나 클러스터의 데이터는 여전히 존재합니다.
클러스터를 다시 시작하려면 MariaDB Galera 클러스터 구성에 설명된 대로 첫 번째 노드를 부트스트랩합니다.
클러스터가 부트 스트랩되지 않고 첫 번째 노드에서 mariadbd
를 systemctl start mariadb
명령으로 시작하는 경우 노드는 /etc/my.cnf.d/galera.cnf
파일의 wsrep_cluster_address
옵션에 나열된 노드 중 하나 이상에 연결을 시도합니다. 현재 실행 중인 노드가 없으면 재시작이 실패합니다.
추가 리소스