programing

PHP/PDO MariaDB Galera 클러스터

copyandpastes 2022. 10. 30. 21:00
반응형

PHP/PDO MariaDB Galera 클러스터

4개의 글로벌한 장소에서 액세스 가능한 서비스를 설정하는 최종 단계입니다(나중에 추가할 예정입니다).MariaDB를 탑재한 Ubuntu 12.04 박스에서 서버를 가동합니다.처음에는 4개의 다른 데이터베이스를 사용하여 서로 독립적으로 동작하는 서버를 만들고 사용자가 처음 등록된 서버에만 로그인할 수 있도록 제한했습니다.

그런데 방금 이 기사를 보고...라는 생각이 들었다.

기사에서 제시한 바와 같이 마스터 마스터 리플리케이션을 사용하여 Galera 클러스터를 셋업하면 이동할 수 있는 대규모 데이터베이스는 4대의 서버 전체에서 일관되게 사용할 수 있습니다.클러스터가 올바르게 셋업되어 정상적으로 기능하고 있으면 PHP 코드에서 거의 아무것도 할 필요가 없습니다(4개의 MariaDB 인스턴스는 데이터베이스에 액세스하기 위해 같은 사용자를 가집니다).PDO 접속 스트링도 변경하지 않습니다.

하지만, 이것은 사실이기에는 거의 너무 좋게 들린다.질문은 다음과 같습니다.

  • 합병증을 일으키는 다른 문제가 있나요?
  • PHP PDO 연결 문자열은 중간에 변경해야 합니까?
  • 어플리케이션이 이미 2대의 서버가 동시에 같은 행의 헬프를 쓸 가능성이 전혀 없는 구조로 되어 있는 것은 사실입니까?
  • 마지막으로, MariaDB 문서에서 TokuDB 스토리지 엔진에서는 작동하지 않는다는 내용을 읽으셨습니까?
  • 선택한 테이블의 복제를 특별히 중지할 수 있는 방법이 있습니까?실제로 "Only InnoDB/XtraDB" 제약 조건을 악용하여 복제하지 않을 다른 스토리지 엔진을 테이블에서 사용할 수 있습니까?

합병증을 일으키는 다른 문제가 있나요?

가지 알려진 제한 사항에 유의해야 합니다.일반적으로 클러스터에서는 분할된 뇌 상태를 방지하기 위해 홀수 개수의 노드를 사용하는 것이 이상적이지만 짝수 개수의 노드도 일반적으로 동일하게 작동합니다.

PHP PDO 연결 문자열은 중간에 변경해야 합니까?

아니요. 기존 연결 문자열이 작동해야 합니다.

어플리케이션이 이미 2대의 서버가 동시에 같은 행의 헬프를 쓸 가능성이 전혀 없는 구조로 되어 있는 것은 사실입니까?

기존의 제한 사항을 확인하고 응용 프로그램이 계속 이 작업을 수행하는지 확인하십시오.이름 있는 잠금을 사용하는 경우 응용 프로그램을 변경해야 합니다.

마지막으로, MariaDB 문서에서 TokuDB 스토리지 엔진에서는 작동하지 않는다는 내용을 읽으셨습니까?

TokuDB 지원이 최근 galera 클러스터 배포에 추가되었습니다.InnoDB와 같은 복제를 몇 번 해봤지만 Galera 클러스터 빌드에 새로 추가된 것이기 때문에 의존하지 않습니다.

선택한 테이블의 복제를 특별히 중지할 수 있는 방법이 있습니까?실제로 "Only InnoDB/XtraDB" 제약 조건을 악용하여 복제하지 않을 다른 스토리지 엔진을 테이블에서 사용할 수 있습니까?

리플리케이션에서 테이블이나 데이터베이스를 생략할 수 있는지 문의하는 사람은 많지만, 그 이유는 아직 잘 모르겠습니다.Galera 레플리케이션은 HA를 제공하고 저렴하고 간단하기 때문에 일부 테이블이 중요하지 않더라도 데이터를 복제하지 않을 현실적인 이유를 찾을 수 없습니다.즉, MyISAM/Aria를 사용하여 데이터를 복제하지 않을 수 있습니다.

MariaDB는 중간 규모의 여러 프로젝트에서 galera와 함께 사용해 왔습니다.HA를 위한 최고의 솔루션이며 성능상의 이점도 제공합니다.다른 솔루션은 일반적으로 비용이 많이 들거나 성숙하지 않습니다.HA Proxy, mysql-proxy, glbd(사용하고 있는 것) 등의 데이터베이스 서버에 접속하기 위한 프록시를 셋업하여 퍼포먼스를 위한 용장성과 접속 밸런싱을 향상시키는 것을 고려해야 합니다.


드로이드에 대한 응답OS 코멘트:

  1. 클러스터의 모든 쓰기는 모든 노드에서 동의해야 하므로 노드 간의 지연 시간이 모든 쓰기에 추가됩니다.따라서 기본적으로 모든 쓰기는 쓰기 서버와 쓰기 서버에 추가된 다른 노드 간의 왕복 시간이 가장 길어집니다.

  2. 아니요. Galera 복제는 전체 클러스터에 걸쳐 전부 또는 전혀 없습니다.테이블에 프라이머리 키가 없는 경우처럼 노드에 데이터 기입에 문제가 있는 경우 해당 노드는 데이터가 클러스터의 나머지 부분과 일관성을 유지할 수 없기 때문에 정상적으로 종료됩니다.이 경우 나머지 클러스터는 계속 정상적으로 작동합니다.네트워크에 문제가 있는 경우, 세그먼트 중 하나에 쿼럼이 있는 경우, 정상적으로 동작합니다.쿼럼이 없는 세그먼트는 더 많은 노드가 쿼럼을 가져올 때까지 대기하지만 쿼리를 수락하지 않습니다.이 동작을 통해 쿼리할 수 있는 노드가 클러스터의 나머지 노드와 일치하는지 확인할 수 있습니다.

이것이 매우 인기 있는 질문인 것으로 판명되었기 때문에, 나는 그것에 부딪치는 사람을 위해 코멘트를 덧붙여야 한다고 생각했다.

동기 리플리케이션의 큰 문제는 프로세스에서 발생하는 지연입니다.동기식 레플리케이션이 필요하게 되어, 레이텐시를 관리해, 존속시킬 필요가 있는 경우가 있습니다.그러나, 생각해 보면, 저도 그랬듯이, 느긋한 레플리케이션으로 살아갈 수 있다고 생각할지도 모릅니다.비싼 비용이 들지만 이를 제공하는 상용 솔루션이 있습니다.또, 독자적인 솔루션을 구축할 가능성도 있습니다.생각보다 간단합니다.

언급URL : https://stackoverflow.com/questions/22432633/php-pdo-mariadb-galera-cluster

반응형