Pagerduty, 신흥 인터넷 시작 화면 포함 하 여 서버에 알림을 보낼 수 있는 제품 표시, 전화 통화, SMS 통지, 이메일 공지 등 이다. 현재, AdMob, 37Signals, StackOverflow, Instagram와 메시지 알림 뿐만 아니라 갑자기 이벤트 처리 도구 pagerduty를 채택 했다. 더 그 바스,이 문서의 저자는 어떻게 Pagerduty 성공적으로 마이그레이션 기존의 시스템 MySQL 프로세스의 장단점 및 XTRADB 클러스터 공유.
6 개월 전, Pagerduty 성공적으로 xtradb 클러스터에 MySQL에서 기존 시스템 마이그레이션 되었고 그것에 아마존 e c 2를 실행 합니다.
오래 된 시스템 구성 분석
구성의 관점에서 이것은 매우 일반적인 MySQL 환경:
Percona 서버 쌍 DRBD 볼륨에 데이터를 쓰기 위한 책임이 있습니다.
DRBD 볼륨 주요 부-EBS 2-기계와 함께 백업 됩니다.
수 비즈니스 시스템을 전송 보조 서버는 주 서버에 문제가 있을 때 하는 두 개의 동기 복제 데이터베이스를 설정 합니다.
비동기 복제 기계의 주요 재해, 비상 백업 및 유지 관리 급격 한 변화에 대응 하는 시리즈를 구성 합니다.
문제
전용된 된 시스템 서비스의 년 후에 점점 저명한 신뢰성 문제의 얼굴 힘 표시 하기 시작 했다. 또한, 주요 서버 전환 때마다 거기는 의심의 여지가 비극: DRBD 호스트 전환, 우선, 수행을 MySQL, 오프 라인 DRBD 볼륨을 방해 하는 주요 서버에서 서버 상태에서 주 서버를 변경, DRBD, 다시 로드 하 고 마지막으로 MySQL을 다시 시작. 이 모든 과정은 MySQL은 재 부 팅, 중단 과정에서 냉각 버퍼 풀 냉각 장치 전에 시스템 서비스 다시 궤도에 워밍업 시간이 필요 하기 때문에 서비스 중단 발생할 수 있습니다.
우리 Percona 버퍼 풀 복구 (버퍼 풀 복원)에 의해 중단 시간을 줄이기 위해 하 려 하지만 이것은 그녀는 우리의 큰 버퍼 풀으로. 동시에이 기능은 추가 시스템 리소스 오버 헤드를 추가합니다. 또 다른 문제는 그 예기치 않은 주 서버 스위치 발생 하면 서버에서 비동기 작동 중지 됩니다 수동으로 다시 시작 해야 합니다.
Xtradb 클러스터를 수용을 위한 이유
XTRADB 클러스터 기능: 이전 2-기계 시스템에 단계, 클러스터는 동기 백업 22 동시에 3 기계 작업. 따라서, 스위칭 시간 연결 크게 감소 된다.
여러 마스터 서버를 지 원하는 동시에 온라인, 각 호스트 서버는 뜨거운 버퍼 풀. 서버에서 비동기 호스트 노드를 선택할 수 있습니다, 그리고 노드 간에 전송 백업 복제 프로세스를 중단 하지 않습니다.
자동된 노드 메커니즘 우리의 현재 자동화 시스템 잘 작동합니다. 새 노드를 구성한 후 우리만 필요가 노드 주소를 제출, 새로운 노드의 데이터 백업 세트를 자동으로 받게 됩니다, 그리고 주요 서버 팜으로 동기화 된 데이터를 로드 됩니다.
사전 준비
그것은 현재 시스템에 액세스 하려면 XTRADB 클러스터를 준비 하는 데 필요한입니다. 일부 간단한 MySQL 튜닝의 나머지는 몇 가지 기초 작업 이다.
MySQL에 대 한 작업:
InnoDB 데이터 시트에 기본 키를만 설정 하는 다는 것을 확인 하십시오.
쿼리 캐시 클러스터는 지원 되지 않습니다 때문에 사용 되지 않습니다 있는지 확인 합니다.
복제 기반 선 접근 문 기반으로 접근에서 변경 됩니다.
위의 MySQL 쪽 작업 뿐만 아니라 DRBD 서버에 독립적인 테스트를 수행 하려면 응용 프로그램 시스템 측면 필요가 다음과 같이 변경:
MySQL 클러스터 노드에 로컬 예를 사용 하기 때문에 분산된 잠금 메커니즘이 사용 됩니다: 선택에 대 한 UPDATE 문을 실행.
동물원의 사육 담당자 잠금에 MySQL 잠금을 바꿉니다.
모든 노드에서 모든 작성 된 데이터를 동기화 할 수 확인, 우리는 소규모 데이터 처리의 많은 수와 일회성 대규모 데이터 처리를 대체 하는 작업 논리를 변경 합니다.
다양 한 패턴 변경
그것은 XTRADB 클러스터에서 변경 모드 수 있도록 멀리입니다. 클러스터를 구현 하는 방법은 두 가지, 하나는 총 주문 절연 (토이, 일반적인 시퀀스 구분), 다른 롤링 스키마 업그레이드 (RSU, 롤링 업그레이드 모드)입니다.
RSU 모드에서 노드는 개별적으로 업데이트할 수 있습니다. DDL 문을 실행할 때 시퀀스에서 각 노드를 동기화 다음 실행 완료 된 후 클러스터에 다시 가입 합니다. 그러나,이 기능은 불안정, 그리고 데이터 새로 고침 작업은 피할 수, RSU DDL 문을 캐시 완료 기다릴 필요 하기 때문에 많은 수에 의해 발생 하는 시스템 문제를 발생 시킵니다.
반면, 토이 업데이트 작업 업데이트가 완료 될 때까지 클러스터 통신을 차단 하는 모든 노드의 시간 동기화입니다. 그것은 무게, 후 우리는 토이 모델을 채택 하기로 결정 했다. 클러스터는 짧은 시스템 중단으로 인해이 시간 차단 하지 되었습니다.
마이그레이션 프로세스
우선, 우리는 현재 DRBD 데이터베이스의 부하로 현재 시스템에 클러스터 구축. 하위 데이터베이스 모든 쓰기 작업을 받으면 우리 관련 데이터를 분석 하 고 수집 하 고 어떻게 볼 운반 능력, 스트레스 테스트를 수행할 수 있습니다.
후에 일련의 관련된 벤치 마크 테스트, 우리는 두 기술 세부 정보는 마이그레이션 이전과 이후에 시스템에 일관성을 달성을 도울 수 있었다 발견:
최적의 쓰기 성능 0 또는 2로는 Innodb_flush_log_at_trx_commit의 값을 설정 하 여 얻을 수 있습니다. 때문에 모든 변경 내용이 3 노드 실패의 경우에 발생 하는 데이터 손실 없이 복제 됩니다.
Innodb_log_file_size 값 보다 큰 값으로 설정할 수, 우리가 1GB로 설정 합니다.
테스트, 후 XTRADB 클러스터의 지표 했다 만족, 그리하여 우리가 실제로 전환.
첫째, 모든 구성 백업 환경 테스트. 때문에 클러스터 온다, 일단 우리는 단일 노드 클러스터를 신속 하 게 그것을 복구할 수 있습니다. 우리는 구체적인 운영 절차를 준비 하 고 관련 된 스트레스 테스트를 실시.
기존 시스템의 두 DRBD 서버에 대 한 보조 서버 설정 후 우리는 또한 나머지 서버 (예: 재해 복구, 백업, 및 등)에 대 한 하위 설정을 설정합니다. 우리가 준비 했다, 우리는 새로운 환경에 시스템을 전환 하는 일반 하위 업그레이드 수행.
스키마 변경 전과 후는 스위치는 다음 그림에 나와 있습니다.
전환 후 이점의 분석
다시 시작 하 고 실행 중인 클러스터를 업데이트 하는 경우 당신은 성공적으로 이전 인 한 통신 장애의 영향을 하지 마십시오. 스키마 변경 토이 모드 (Pt-온라인-스키마-변경)에 성공 했다. 충돌 처리를 작성 하는 능력에 최적화 되어 있습니다. 충돌이 발견 되 면 XTRADB 클러스터 토이 모드에서 DDL 문이 실행 될 때 또한 오류 메시지를 트리거할 수 있는 교착 상태 오류 메시지를 반환 합니다. 그 후, 충돌 오류로 인해 응용 프로그램 서버는 503 오류를 반환 하 고 우리의 로드밸런싱 레이어 설정 오류를 catch 한 다음 다른 서버에서 다시 쓰기 요청을 제출 하려면.
전환 후 단점의 분석
일부 클러스터 키 상태 카운터 상태에 의해 변경, 예를 들어 디스플레이 글로벌 상태 지시문 (글로벌 상태 보기)을 수행한 후 그 값은 0으로 다시 설정 합니다. 이것은 정확 하 게 (문제를 해결할 수 사용 하 여 XTRADB 클러스터 5.6 Galera 3.x 시스템에서) 시스템의 상태를 모니터링 하는 무 능력 값에서 자주 변경 될 수 있습니다 때문에 중요 한 카운터, 흐름 제어 등을 기반으로 상태 모니터링 수행 하기 어려운 할 수 있다. 쓰기 작업이 충돌이 발생 하면, MySQL 동적 레코드 어댑터 대화형 문에서 throw 된 예외를 무시 합니다.
열 문제를 냉각 시스템 개선 더 남아 있다. 현재, 우리의 응용 프로그램 서버 클러스터 노드를 자체 연결 데이터를 전송 하는 로컬 haproxy 인스턴스에 연결 된다. 예약 된 유지 관리 작업을 수행할 때 우리만 천천히 그것은 완전히 전체 시스템 부하를 호스팅할 수 있습니다 전에 버퍼 풀을 예 열 하 다른 노드로 데이터를 밀 수 있다. 미래에, 우리가 완전히 전환 됩니다 다중 호스트 환경 설정 모든 노드 준비 버퍼 풀 갖도록 계획 대로.