인터넷의 급속한 발전과 함께 백엔드 데이터 저장소의 중요한 부분인 데이터베이스는 웹 사이트의 고가용성과 성능 최적화에 매우 중요합니다. 그중 마스터-슬레이브 복제는 서비스에 영향을 주지 않고 시스템의 안정성과 가용성을 향상시킬 수 있는 일반적으로 사용되는 데이터베이스 고가용성 솔루션입니다.
이 글에서는 주로 PHP를 사용하여 마스터-슬레이브 복제 및 장애 조치를 구현하는 방법을 소개합니다.
1. 마스터-슬레이브 복제의 기본 원리
마스터-슬레이브 복제는 마스터 데이터베이스의 모든 데이터를 여러 슬레이브 데이터베이스에 동기화하는 것을 의미합니다. 마스터 데이터베이스는 데이터를 읽고 쓸 수 있지만 슬레이브 데이터베이스는 읽기 작업만 수행할 수 있으며 슬레이브 데이터베이스의 데이터는 마스터 데이터베이스와 완전히 일치합니다. 마스터-슬레이브 복제는 일반적으로 마스터 데이터베이스의 데이터가 변경된 후 새로 추가된 데이터 로그를 기록한 후 MySQL 슬레이브 스레드가 업데이트 로그를 읽고 이를 슬레이브 데이터베이스에 적용합니다.
마스터-슬레이브 복제 아키텍처에서는 일반적으로 마스터 라이브러리를 쓰기 서버로 사용하고 슬레이브 라이브러리를 읽기 서버로 사용합니다. 쓰기 작업은 일반적으로 읽기 작업보다 더 많은 리소스를 소비하므로 쓰기 작업은 읽기와 쓰기를 분리하기 위해 기본 라이브러리에 배치되어 기본 라이브러리에 대한 부담을 줄이고 기본 라이브러리의 성능을 향상시킵니다.
2. PHP는 마스터-슬레이브 복제를 구현합니다
1. 마스터-슬레이브 복제 구성
MySQL에서는 my.cnf 파일을 구성하여 마스터-슬레이브 복제를 달성할 수 있습니다. 구체적인 구성 단계는 다음과 같습니다.
1) 메인 서버 구성
[mysqld]
log-bin=mysql-bin #바이너리 로그 기능 활성화 및 마스터-슬레이브 복제 활성화
server-id=1 # 고유번호를 설정하고, 각 서버의 번호가 중복되지 않도록 하세요
2) 슬레이브 서버를 설정하세요
[mysqld]
server-id=2 #각 서버의 번호가 중복되지 않도록 고유번호를 설정하세요 Repeated
relay-log=mysql-relay -bin #라이브러리에서 메인 라이브러리의 데이터를 복사하는 데 사용되는 릴레이 로그 파일을 구성합니다.
read_only=1 #슬레이브 라이브러리에서 쓰기 작업을 금지합니다.
2. PHP를 통한 master-slave 라이브러리
PHP에서 master-slave 라이브러리를 연결합니다. 사실 단일 데이터베이스에 연결하는 것과 다르지 않습니다. 데이터베이스에 연결할 때 사용할 데이터베이스만 지정하면 됩니다.
읽기 작업을 수행할 때는 슬레이브 라이브러리를 사용하여 작동하고, 쓰기 작업을 수행할 때는 메인 라이브러리를 사용하여 작동합니다. 구체적인 코드는 다음과 같습니다.
//메인 라이브러리에 연결
$main_db = mysqli_connect("localhost", "root", "123456", "main_db");
//슬레이브 라이브러리에 연결
$slave_db = mysqli_connect(" localhost", "root", "654321", "slave_db");
//슬레이브 라이브러리에서 데이터 읽기
$result = mysqli_query($slave_db, "SELECT * FROM user") ;
//마스터에게 데이터베이스가 데이터를 씁니다
mysqli_query($main_db, "INSERT INTO user(name, age) VALUES('tom', '25')");
3. 장애 조치 구현
메인 데이터베이스에 예상치 못한 장애가 발생한 경우, 데이터베이스에서 서비스 제공으로 전환해야 합니다. 장애 조치 프로세스에는 다음 단계가 필요합니다.
1. 슬레이브 라이브러리에서 메인 라이브러리로 전환
메인 라이브러리가 서비스를 제공할 수 없는 경우 슬레이브 라이브러리에서 메인 라이브러리로 전환하여 서비스를 대신해야 합니다. 주요 도서관의 서비스. 구체적인 단계는 다음과 같습니다.
1) 슬레이브 라이브러리에서 명령을 실행합니다. STOP SLAVE 슬레이브 라이브러리에서 복사 프로세스를 중지합니다.
2) 슬레이브 라이브러리의 데이터를 메인 라이브러리로 복사합니다.
3) 슬레이브 라이브러리의 server-id를 1로 수정하고, my.cnf 파일의 log-bin 및 Relay-log 변수를 수정합니다. 이로써 슬레이브 데이터베이스가 마스터 데이터베이스가 되어 서비스를 제공하게 됩니다.
2. 애플리케이션에서 구성 수정
메인 라이브러리가 장애 조치되면 새로운 메인 라이브러리로 전환하여 서비스를 제공할 수 있도록 애플리케이션에서 구성 정보를 수정해야 합니다.
3. 장애 복구 후 전환
메인 데이터베이스 서비스 재개 시, 메인 데이터베이스를 메인 데이터베이스로 복원하고, 이전 슬레이브 데이터베이스를 슬레이브 데이터베이스로 변경하여 백업해야 합니다. 구체적인 단계는 다음과 같습니다.
1) 슬레이브 라이브러리에서 STOP SLAVE 명령을 실행하여 슬레이브 라이브러리에서 복사 프로세스를 중지합니다.
2) 최신 데이터를 기본 데이터베이스에 동기화합니다.
3) 메인 라이브러리에서 CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='root', MASTER_PASSWORD='xxxx', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=156 명령을 실행합니다. 도서관이 주요 도서관이 됩니다.
이런 방식으로 오류가 복구된 후 마스터 라이브러리와 슬레이브 라이브러리 간의 관계가 다시 설정되어 정상적인 작동 상태로 들어갑니다.
4. 요약
PHP를 통해 데이터베이스 마스터-슬레이브 복제 장애 조치를 구현하면 시스템의 안정성과 가용성을 향상시키는 동시에 애플리케이션 부담을 줄이고 시스템의 전반적인 성능을 향상시킬 수 있습니다. 실제로 전체 전환 프로세스가 원활하게 진행되고 데이터 복구 및 전체 시스템 장애 복구가 최단 시간 내에 완료되도록 장애 조치 프로세스 및 애플리케이션 구성에 주의를 기울여야 합니다.
위 내용은 데이터베이스 마스터-슬레이브 복제 장애 조치를 구현하는 PHP 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!