웹사이트 검색

Ubuntu 14.04에서 MySQL 복제로 WordPress 성능을 최적화하는 방법


소개

이 자습서에서는 마스터-슬레이브 데이터베이스 복제 및 WordPress용 HyperDB 플러그인을 사용하여 WordPress MySQL 데이터베이스 서버 설정을 확장하는 방법을 설명합니다. 이러한 방식으로 환경에 더 많은 데이터베이스 서버를 추가하면 WordPress 애플리케이션이 여러 데이터베이스 서버에서 읽을 수 있으므로 읽기 성능이 향상됩니다.

MySQL 복제는 대부분의 WordPress 설치와 같이 빈번한 읽기와 드문 쓰기를 처리하는 시스템에서 가장 큰 성능 이점을 얻습니다. 다중 슬레이브 설정과 함께 단일 마스터를 사용하면 네트워크 대역폭이 부족하거나 마스터가 업데이트 로드를 처리할 수 없을 때까지 시스템을 확장하기 위해 더 많은 슬레이브를 추가할 수 있습니다. 원하는 경우 이 자습서의 복제 섹션에서 "슬레이브\ 부분을 반복하여 하나 이상의 슬레이브를 추가할 수 있습니다.

설정에 별도의 MySQL 데이터베이스 서버에 연결하는 두 개의 부하 분산된 WordPress 애플리케이션 서버가 포함되어 있다고 가정합니다(설정 방법에 대한 자습서의 전제 조건 참조). 이 자습서를 따르기 위해 로드 균형 조정된 애플리케이션 서버가 반드시 필요한 것은 아니지만 MySQL 데이터베이스 서버는 애플리케이션 서버와 분리되어야 합니다.

전제 조건

이 자습서를 계속하기 전에 두 개의 자습서를 완료했거나 유사한 환경이 있어야 합니다.

  • MySQL로 사이트 성능을 최적화하기 위해 원격 데이터베이스를 설정하는 방법\n
  • 선택적으로 HAProxy를 Ubuntu 14.04에서 WordPress 애플리케이션 서버용 레이어 4 로드 밸런서로 사용하는 방법\n

해당 자습서를 따른 후 두 개의 부하 분산 웹 응용 프로그램 서버와 별도의 데이터베이스 서버로 WordPress를 설정하려면 4개의 VPS가 있어야 합니다. 여러 VPS를 다루게 되므로 참고용으로 기존 VPS 4개를 다음과 같이 부릅니다.

  • haproxy-www: WordPress 웹 응용 프로그램 서버를 로드 밸런싱하는 계층 4용 HAProxy 서버입니다. 이것은 귀하의 웹사이트에 대한 진입점입니다
  • wordpress-1: 첫 번째 WordPress 웹 애플리케이션 서버
  • wordpress-2: 두 번째 WordPress 웹 애플리케이션 서버
  • mysql-1: WordPress용 MySQL 서버

즉, 환경은 다음과 같아야 합니다.

현재 환경 외에도 이 튜토리얼을 진행하는 동안 하나의 추가 VPS가 필요합니다. 우리는 그것을 부를 것입니다:

  • mysql-2: 슬레이브 MySQL 데이터베이스 서버

우리의 목표

이 튜토리얼을 마치면 두 개의 데이터베이스 서버가 마스터-슬레이브 구성으로 복제됩니다. WordPress 서버는 HyperDB WordPress 플러그인을 사용하여 마스터에 선택적으로 쓰고 마스터 및 슬레이브 데이터베이스 모두에서 읽습니다. 최종 환경은 다음과 같아야 합니다.

이 자습서를 따르기 위해 부하 분산된 애플리케이션 서버(wordpress-1/wordpress-2)가 필요하지 않으며 원하는 경우 더 많은 슬레이브 데이터베이스를 추가할 수 있습니다.

MySQL 마스터-슬레이브 복제 설정

여러 데이터베이스 서버에서 읽도록 WordPress 애플리케이션을 구성하기 전에 MySQL 복제를 설정해야 합니다.

MySQL 슬레이브 VPS, mysql-2 생성

MySQL 슬레이브 서버 역할을 할 새 VPS를 생성하고 싶을 것입니다. 참고용으로 이 서버를 mysql-2라고 합니다. 슬레이브는 WordPress 데이터베이스를 포함하여 마스터 MySQL 서버의 모든 데이터베이스를 복제하도록 구성됩니다.

mysql-2에서 MySQL 소프트웨어를 설치합니다.

sudo apt-get update
sudo apt-get install mysql-server

MySQL 설치를 위한 루트 암호를 입력하십시오. 다음으로 MySQL 마스터 서버에서 구성합니다.

기존 MySQL 서버를 마스터로 구성

첫 번째 단계는 복제 마스터 구성으로 기존 MySQL 데이터베이스 서버인 mysql-1을 설정하는 것입니다.

mysql-1에서 MySQL 구성 파일을 편집합니다.

sudo vi /etc/mysql/my.cnf

다음 세 줄을 검색합니다.

<예비>

  • bind-address: MySQL이 청취할 IP 주소. 원래 설정에서 이미 mysql-1의 사설 IP 주소로 설정되어 있어야 합니다
  • server-id: 고유한 서버 ID입니다. 이것은 마스터 서버이므로 값을 "1\로 두고 이 줄의 주석을 제거해야 합니다.
  • log_bin: 바이너리 로그 파일의 위치. 바이너리 로그는 복제를 위해 마스터에서 슬레이브로 데이터 변경 사항을 보내는 데 사용됩니다. 이 줄의 주석을 제거하십시오

세 줄은 다음과 같아야 합니다(강조 표시된 부분을 데이터베이스 서버의 사설 IP 주소로 대체해야 함).

<예비>

선택적으로 복제를 wordpress 데이터베이스로 제한하려는 경우 특히 구성에 다음 줄을 추가합니다(강조 표시된 부분을 원하는 데이터베이스 이름으로 대체).

<예비>

저장하고 종료합니다. 이러한 변경 사항을 적용하려면 다음 명령을 사용하여 mysql을 다시 시작하십시오.

sudo service mysql restart

다음 명령을 사용하여 MySQL 콘솔에 연결한 다음 프롬프트가 표시되면 비밀번호를 입력하십시오.

mysql -u root -p

복제 목적으로 슬레이브 MySQL 서버에서 사용할 사용자를 생성합니다. 이 사용자를 repl이라고 합니다. repl_password를 자신의 강력한 암호로 바꾸십시오. %는 이 사용자의 소스 IP가 무엇이든 될 수 있음을 지정하지만 %를 슬레이브 MySQL 서버 mysql-의 사설 IP 주소로 대체할 수 있습니다. 2, 이 사용자와의 연결을 특정 서버로 제한하려면:

<예비>

아직 MySQL 콘솔을 종료하지 마십시오!

MySQL 마스터 백업 내보내기

다음으로, 우리는 복제를 시작하기 전에 동일하도록 슬레이브 데이터베이스로 가져오기 위해 MySQL 마스터 데이터베이스의 백업을 내보낼 것입니다. 데이터 덤프를 수행하려면 데이터베이스를 잠가야 합니다. mysql-1MySQL 콘솔에서 다음을 실행합니다.

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
EXIT

이제 명령 셸에서 다음 명령을 실행하여 마스터 MySQL 서버의 데이터베이스 백업을 masterdump.sql이라는 파일로 내보냅니다.

mysqldump --lock-all-tables -u root -p --all-databases > masterdump.sql

scp를 사용하여 masterdump.sql 파일을 슬레이브 서버인 mysql-2에 복사합니다.

<예비>

다시 한 번 mysql-1의 MySQL 콘솔에 들어갑니다.

mysql -u root -p

MySQL 프롬프트에서 데이터베이스 잠금을 해제합니다.

SET GLOBAL read_only = OFF;
UNLOCK TABLES;

이제 다음 명령문을 실행하여 MySQL 슬레이브를 구성하는 데 필요한 정보를 출력합니다.

<예비>

슬레이브 서버를 구성할 때 필요하므로 FilePosition의 값을 기록해 두십시오. 이제 mysql-2로 전환하겠습니다.

MySQL 슬레이브 구성

이제 복제 준비를 위해 마스터 데이터베이스를 슬레이브로 가져와서 동기화하려고 합니다.

mysql-2에서 다음 명령을 실행하여 masterdump.sql 파일을 가져옵니다.

mysql -u root -p < /tmp/masterdump.sql

다음으로 mysql-2를 복제 슬레이브로 설정합니다. mysql-2에서 MySQL 구성 파일을 편집합니다.

sudo vi /etc/mysql/my.cnf

다음 두 줄을 검색합니다.

<예비>

  • bind-address: MySQL이 청취할 IP 주소. mysql-2의 개인 IP 주소로 설정
  • server-id: 고유한 서버 ID입니다. 이것은 마스터 서버이므로 이 값을 2로 변경하고 이 줄의 주석을 제거하십시오

두 줄은 다음과 같아야 합니다(강조 표시된 부분을 데이터베이스 서버의 사설 IP 주소로 대체해야 함).

<예비>

저장하고 종료합니다. 변경 사항을 적용하려면 MySQL을 다시 시작하십시오.

sudo service mysql restart

MySQL 콘솔을 입력합니다.

mysql -u root -p

다음으로 슬레이브를 마스터에 연결합니다. 다음 다섯 가지 값이 필요합니다.

  • MASTER_HOST: mysql-1의 사설 IP로 설정
  • MASTER_USER: 마스터에서 생성한 복제 사용자로 설정, repl
  • MASTER_PASSWORD: repl의 비밀번호로 설정합니다. 이 비밀번호는 자신의 비밀번호로 대체해야 합니다.
  • MASTER_LOG_FILE: 마스터 MySQL 서버에서 SHOW MASTER STATUS;를 실행할 때 나열된 "파일\로 설정
  • MASTER_LOG_POS: 마스터 MySQL 서버에서 SHOW MASTER STATUS;를 실행할 때 나열된 "Position\으로 설정

다음 명령문은 슬레이브를 마스터 서버에 연결하며 강조 표시된 모든 필드를 적절한 값으로 대체해야 합니다.

<예비>

해당 명령문이 제대로 실행되면 다음 명령을 실행하여 슬레이브 연결을 시작하십시오.

START SLAVE;

이제 mysql-2 서버가 슬레이브로 연결되어야 합니다! 다음 명령을 실행하여 복제가 작동하는지 확인합니다.

SHOW SLAVE STATUS\G

슬레이브 사용자의 쓰기 권한 취소

이것은 HyperDB 플러그인이 슬레이브 데이터베이스 서버에서만 읽도록 구성할 수 있기 때문에 선택 사항이지만 슬레이브 데이터베이스의 wordpressuser 데이터베이스 사용자의 쓰기 권한을 취소할 수 있습니다(슬레이브에 대한 업데이트가 실수로 어떻게든 슬레이브를 업데이트한 경우 마스터에 복제되지 않음).

mysql-2의 MySQL 콘솔에서 다음 명령문을 실행하여 데이터베이스 사용자를 나열하십시오.

<예비>

위의 코드 블록과 유사한 출력이 표시되어야 합니다. 다음 명령을 사용하여 각 사용자의 권한을 볼 수 있습니다.

<예비>

이 예에서는 각 WordPress 서버에 대해 하나의 wordpressuser가 있으므로 삽입, 업데이트삭제를 취소합니다. 각각의 권한("wordpress\는 이 예에서 데이터베이스의 이름임):

<예비>

이제 MySQL 복제 설정이 완료되었습니다. 두 데이터베이스 서버를 모두 올바르게 사용하도록 WordPress 설정으로 이동하겠습니다.

HyperDB 설치 및 구성

HyperDB를 사용하여 업데이트(마스터 데이터베이스) 및 읽기 요청(마스터 및 슬레이브)을 보낼 위치를 결정합니다. WordPress Plugin Directory에서 홈 디렉토리로 다운로드해 보겠습니다(압축 해제를 위해 zip/unzip도 설치).

cd ~; wget http://downloads.wordpress.org/plugin/hyperdb.zip
sudo apt-get install zip
unzip hyperdb.zip

홈 디렉터리에 있는 "hyperdb”라는 디렉터리에 보관 해제해야 합니다. 샘플 구성 파일을 WordPress 설치에 복사하고(강조 표시된 부분을 WordPress 설치 경로로 대체) 편집을 위해 엽니다.

<예비>

DB_HOST의 두 번째 발생을 찾으십시오. 이는 슬레이브 설정을 설명하는 일부 주석 바로 뒤에 있어야 하며 정확히 다음과 같아야 합니다.

<예비>

DB_HOST의 첫 번째 항목은 마스터 데이터베이스 서버를 정의하고 두 번째 항목은 슬레이브 데이터베이스 서버를 정의합니다(write => 0,로 표시됨). DB_HOST의 두 번째 항목을 DB_SLAVE_1로 바꿉니다.

<예비>

저장 및 종료. 다음으로 HyperDB가 슬레이브 데이터베이스 호스트로 사용할 wp-config.php에서 DB_SLAVE_1을 정의해야 합니다. 편집을 위해 wp-config.php 열기:

<예비>

DB_HOST를 정의하는 줄을 찾아 그 아래에 슬레이브의 개인 IP 주소(mysql-2)를 대체하여 다음 줄을 추가합니다.

<예비>

그런 다음 저장하고 종료하십시오.

db.php 파일을 WordPress 설치의 wp-content 디렉토리에 복사한 다음 쓰기 액세스를 비활성화하여 HyperDB 설치를 완료합니다.

<예비>

그런 다음 WordPress 파일의 소유권을 적절한 값으로 업데이트합니다(이 자습서에서는 사용자/그룹 소유권에 대해 www-data를 사용했습니다).

<예비>

이제 WordPress 읽기 요청은 마스터 및 슬레이브 데이터베이스 모두에서 제공되며 업데이트는 마스터로 전송됩니다(다음에 슬레이브로 복제됨).

결론

이제 MySQL 복제 및 HyperDB 설정을 완료했으므로 데이터베이스 환경에서 증가된 읽기 트래픽, 즉 더 많은 동시 사용자를 처리할 수 있습니다! 데이터베이스 제공 용량을 훨씬 더 확장하려면 MySQL 슬레이브를 더 추가할 수 있습니다.

작성: Mitchell Anicas