■ 세미싱크 소개 일반적으로 MySQL에서 복제라 얘기하면 Master - Slave(Replica)구조의 복제방식입니다. 그리고 이 복제방식은 특별한 설정을 하지 않는다면 비동기 방식입니다. 동기 방식은 크게 반동기(세미싱크) 방식과 비동기 방식 2가지가 있습니다. 이걸 구분하는 방법은 슬레이브 바이너리 로그에 DML이 적용되었는지 여부를 판단하느냐 않하느야에 달려 있습니다. 먼저 비동기 방식에 대해 알아보겠습니다. 비동기 방식은 마스터에서 DML이 발생하면 바이너리 로그에 DML을 작성하고 이 바이너리 로그를 슬레이브로 보냅니다. 이때 비동기 방식은 바이너리 로그가 슬레이브 로그에 적용되었는지 여부에 관련없이 무조건 자신의 DML만 수행합니다. 이 방식은 마스터에서의 수행 여부만 판단하기 때문에 속도..
■ MSR (Multi Source Replication)이란? 간단하게 설명해서 여러개의 마스터 서버 발생하는 데이터를 하나의 슬레이브 서버에서 받아내는 방식입니다. 그림 1. MSR 구성도 이 방식을 이용하면 여러 마스터 서버의 특정 DB만을 슬레이브에서 받아서 한번에 조회가 가능하다는 장점이 있습니다. 예를 들어 MASTER 1번의 특정 DB, MASTER 2번의 특정 DB, MASTER 3은 전체 DB를 복제하여 이 DB들을 한곳에 모아서 조회를 할수가 있습니다. 이것을 응용한다면 아래와 같은 그림으로도 구성할 수 있습니다. 그림 2. MSR 다중 구성도 여러개의 마스터-슬레이브 복제 클러스터들이 있을때 이중에서 특정 마스터의 특정 DB들만을 한곳에 모을 수 있습니다. 또한 이 데이터를 통계데이터..
sync_relay_log sync_relay_log를 1로 설정하면 수신된 각 트랜잭션이 디스크에 기록된 후 릴레이 로그를 디스크에 동기화하도록 복제 I/O 스레드에 지시합니다. 즉 성능은 줄이되 안정성을 높이는 방법입니다. 가능하면 1로 설정을 권고합니다. 0이나 다른 숫자로 바꾸면 성능이 좋아지긴 합니다. 이건 선택적인 문제이기도 합니다. 참고로 sync_relay_log를 1보다 크게 또는 sync_relay_log를 0(여기서 동기화는 운영 체제에서 처리됨)인 경우 복제본이 예기치 않게 중단되는 경우 디스크에 동기화되지 않은 커밋된 트랜잭션이 있을 수 있습니다. 이러한 트랜잭션으로 인해 디스크에 마지막으로 동기화된 릴레이 로그에 있는 정보를 기반으로 복구 중인 복제본이 트랜잭션을 건너뛰는 대신 ..
명령문 기반 복제를 사용하면 마스터에서 실행되는 트리거가 슬레이브에서도 실행됩니다. 행(ROW) 기반 복제를 사용하면 마스터에서 실행된 트리거가 슬레이브에서 실행되지 않습니다. 대신 트리거 실행으로 인한 마스터의 행 변경 사항이 복제되고 슬레이브에 적용됩니다. 행 기반 복제에서 슬레이브에 트리거가 있을 때 마스터 변경사항이 슬레이브에 적용되고 이 넘어온 데이터가 슬레이브 트리거로 인해 다시 수행되게 됩니다. 즉 슬레이브에 두번 적용되어 마스터와 슬레이브에 다른 데이터가 생성됩니다. 그래서 행 기반에서는 트리거가 작동하지 않게끔 설계되어 있습니다. 트리거를 마스터와 슬레이브 모두에서 실행하려면 명령문 기반 복제를 사용합니다. 그러나 슬레이브 트리거를 사용하기 위해 명령문 기반 복제를 독점적으로 사용할 필요..
■ Replication 테이블 성능 스키마는 복제 정보 상태를 보여주는 테이블을 제공합니다. 이는 SHOW SLAVE STATUS 문에서 사용할 수있는 정보와 비슷하지만 테이블 형식으로 표현하는 것이 더 접근하기 쉽고 사용성 이점이 있습니다. 1. SHOW SLAVE STATUS 출력은 직접 보면서 확인하는 검사에 유용하지만 프로그래밍 사용에는 그다지 유용하지 않습니다. 반대로 성능 스키마 테이블을 사용하면 복잡한 WHERE 조건, 조인 등을 포함한 일반 SELECT 쿼리를 사용하여 복제본 상태에 대한 정보를 검색할 수 있습니다. 2. 쿼리 결과는 추가 분석을 위해 테이블에 저장하거나 변수에 할당하여 저장 프로 시저에서 사용할 수 있습니다. 3. 복제 테이블은 더 나은 진단 정보를 제공합니다. 다중 스..
■ GTID를 이용한 복제 설정. 여기에서는 처음으로 GTID를 이용하여 처음 설정하는 "콜드 스타트"방법입니다. 이 포스트를 통해서 복제를 어떻게 설정하고, 주의할점은 무엇인지 알아봅니다. ■ 서버준비 가능하면 같은 사양의 물리서버를 준비합니다. 그리고 같은 버전의 MySQL을 설치합니다. 여기에서는 5.7 위주로 설명을 합니다. 다음의 환경으로 설정되어 있다고 가정합니다. 서버 IP MySQL Version 마스터 192.168.0.101 5.7 슬레이브 192.168.0.102 5.7 ■ 파라미터 설정 마스터 슬레이브 서버 모두에 다음의 파라미터를 설정합니다. ▶ 서버별 설정할 파라미터 mysqld 섹션에 작성합니다. [mysqld] server-id=1 log-bin=binlog gtid-mode..
이 섹션에서는 GTID (Global Transaction Identifier)를 사용한 트랜잭션 기반 복제에 대해 설명합니다. GTID를 사용할 때 각 트랜잭션은 원래 서버에서 커밋되고 슬레이브에 의해 적용될때 식별되고 추적될 수 있습니다. 이는 새 슬레이브를 시작하거나 새 마스터로 Failover가 되었을때 GTID를 사용하여 해당 파일 내에서 로그 파일 또는 위치를 참조 하기 때문에 기존방법인 로그파일과 포지션을 찾아야 하는 작업을 크게 단순화합니다. GTID 기반 복제는 완전히 트랜잭션 기반이기 때문에 마스터와 슬레이브가 일치하는지 간단하게 판단 할 수 있습니다. 마스터에서 커밋된 모든 트랜잭션이 슬레이브에서도 커밋되는 경우 이 둘 사이의 일관성이 보장됩니다. GTID와 함께 Statement 기..
■ Replication Filtering Rule 사용 및 적용방법이전 챕터에서 복제 룰에 대해서 평가하는 방법을 배웠습니다. 이번엔 실제 복제필터링을 적용하는 명령과 환경설정 옵션에서 어떻게 적용하는지에 대해 알아봅니다. 복제 필터링을 하는 방법은 3가지가 있습니다.+ MySQL서버를 시작할 때 관련 옵션을 주고 시작하는 방법서버를 시작할 때 필요한 필터링 옵션을 주고 실행합니다. 스크립트나 기타 관리방법을 만들어야 합니다.+ CHANGE REPLICATION 명령어를 이용하는 방법서버를 시작 후 명령어를 이용해서 필터링을 적용합니다. 서버를 중지하면 설정이 사라집니다. 아래에서 설명합니다.+ my.cnf 환경파일에 옵션을 이용해서 설정하는 방법my.cnf안에 옵션을 설정하여 필터링합..
■ 서버가 복제 필터링 규칙을 평가하는 방법 복제를 구성할때 전체 데이터베이스를 대상으로 하는 방법도 있지만 원하는 데이터베이스만을 선택해서 복제할 수도 있습니다. 반대로 원하는 데이터베이스만을 복제해서 사용할 수 있습니다. 특정 데이터베이스의 특정 테이블만 복제도 가능합니다. 이렇게 원하는 조건을 만들어 복제하는 방법을 복제 필터링이라고 합니다. 복제 필터링을 구성하기 위해선 바이너리 로그 포멧 형식 선택과 복제레벨(데이터베이스 레벨 혹은 테이블 레벨) 그리고 범위등 몇가지 전략을 세워야 할 내용들이 있습니다. 여기에서는 복제필터링을 걸기위헤 사전에 확인해봐야 할 내용들을 확인해 보겠습니다. 다음으로 복제필터링을 하기 위한 환경설정, 혹은 명령문을 알아보도록 하겠습니다. 마스터 서버가 바이너리 로그에 ..
Replication 상태에서 모니터링을 하는 방법에 대해 알아봅니다. 모니터링에서 표시해주는 상태에 따라 그에 맞는 대처를 해서 복제가 지속적으로 이루어 지도록 합니다. ■ Slave 상태 확인 mysql 클라이언트에서 다음의 명령을 입력합니다. mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.30.224.100 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read..
복제를 사용할 때 이진 로그에 대해 어떤 타입을 선택할지 정해야 하는데 이때 아래 내용들을 참고해서 설정하시면 도움이 됩니다. 복제를 할 때 safe(안전한), unsafe(안전하지 않은) 쿼리가 있는데 이것을 알면 업무 특성에 따라 어떤 바이너리 로그로 설정할지 도움이 됩니다. ■ Binary Logging의 종류▶ Statement-based Binary LoggingStaatement-based 바이너리 로깅을 사용할 때 마스터는 SQL 문을 바이너리 로그에 씁니다. 슬레이브에서 마스터를 복제하면 슬레이브에서 SQL 문을 실행합니다. 이를 Statement-based Replication (SBR로 약칭 할 수 있음)이라고하며, 이는 MySQL Statement-based 바이너리 로깅 형식..
MySQL은 여러형태의 복제 솔루션과 HA, 분산기능, 그리고 클러스터링을 지원합니다. Master-Slave구조 + MHA, Multi Master for MySQL, Galera Cluster, MaxScale(MariaDB), Sharding등 참 많은 기능들을 제공한다는 것을 알 수 있습니다. 그중에 대표적인게 Master Slave 구조입니다. Master에서는 DDL, DML 쿼리 및 약간의 SELECT를 수행하고 Slave에서는 Select Query만 지원하는 형태로 구축을 합니다. 보통 Database의 쿼리 수행빈도를 분석해보면 데이터 조회가 보통 60~70%를 사용한다고 합니다. 그래서 마스터 한대에 슬레이브를 여러대를 두어 부하를 분산시키는 전략을 보통 많이 사용합니다. 지금부터 가..