14.18.6 복제에서 InnoDB memcached 플러그인 사용
InnoDB
memcached 데몬 플러그인은 MySQL 바이너리 로그 를 지원하고 있기 때문에 memcached 인터페이스를 통해 마스터 서버 에 수행 한 업데이트는 백업 읽기 집약적 워크로드의 균형 확보 및 고 가용성을 위해 복제 할 수 있습니다 . 모든 memcached 명령은 바이너리 로깅에 지원합니다.
슬레이브 서버 에서 InnoDB
memcached 플러그인을 설치 할 필요가 없습니다. 이 구성의 가장 큰 장점은 마스터에서 쓰기 처리량의 증가입니다. 복제 메커니즘의 속도는 영향을받지 않습니다.
다음 섹션에서는 바이너리 로그 기능을 사용하여 InnoDB
memcached 플러그인 MySQL 복제와 함께 사용하는 방법을 보여줍니다. 섹션 14.18.3 "InnoDB Memcached 플러그인 개요" 에 기재되어있는 기본 설정이 이미 실행되고있는 것을 전제로하고 있습니다.
innodb_api_enable_binlog에 따르면 InnoDB Memcached 바이너리 로그 활성화 :
InnoDB
memcached 플러그인을 MySQL 바이너리 로그 와 함께 사용하려면 마스터 서버 에서innodb_api_enable_binlog
구성 옵션을 사용합니다. 이 옵션은 서버 부팅시에만 설정할 수 있습니다. 또한--log-bin
옵션을 사용하여 마스터 서버에서 MySQL 바이너리 로그를 활성화해야합니다. 이 옵션을my.cnf
등의 서버 구성 파일에 추가하거나 mysqld 명령 줄에 추가 할 수 있습니다.mysqld ... --log-bin --innodb_api_enable_binlog = 1
다음은 섹션 17.1.1 "복제 설정 방법" 에 설명 된대로 마스터 서버와 슬레이브 서버를 구성합니다.
mysqldump를 사용하여 마스터 데이터 스냅 샷을 생성하고이를 슬레이브 서버에 동기화합니다.
master shell : mysqldump --all-databases --lock-all-tables> dbdump.db slave shell : mysql <dbdump.db
마스터 서버에서
show master status
를 실행하여 마스터 바이너리 로그 좌표를 가져옵니다.mysql> show master status;
슬레이브 서버에서
change master to
문을 사용하여 위의 좌표에서 슬레이브 서버를 설치합니다.mysql> CHANGE MASTER TO MASTER_HOST = 'localhost', MASTER_USER = 'root' MASTER_PASSWORD = '' MASTER_PORT = 13000, MASTER_LOG_FILE = '0.000001, MASTER_LOG_POS = 114;
다음 슬레이브를 시작합니다.
mysql> start slave;
다음과 같은 출력이 오류 로그에서 출력되는 경우, 슬레이브는 복제가 준비되어 있습니다.
111002 18:47:15 [Note] Slave I / O thread : connected to master 'root @ localhost : 13000' replication started in log '0.000001'at position 114
memcached telnet 인터페이스에 의한 테스트
위의 복제 설정을 갖춘 서버를 테스트하려면 memcached telnet 인터페이스를 사용하며 SQL을 사용하여 마스터 서버와 슬레이브 서버에 쿼리를 실행하여 결과를 확인합니다.
여기에서 구성 설정 SQL에서 memcached에 의해 사용되는 test
데이터베이스에 하나의 샘플 테이블 demo_test
가 생성됩니다. 이 기본 테이블을 데모 용으로 사용합니다.
set
을 사용하여 키test1
값t1
및 플래그10
레코드를 삽입합니다.telnet 127.0.0.1 11211 Trying 127.0.0.1 ... Connected to 127.0.0.1. Escape character is '^]'. set test1 10 0 2 t1 STORED
마스터 서버에서 행이 삽입 된 것을 확인할 수 있습니다. c1
은 키에 매핑되고 c2
값에 매핑되고 c3
는 플래그, c4
는 cas
값 및 c5
는 기간입니다.
mysql> select * from test.demo_test;
c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|
test1 | t1 | 10 | 2 | 0 |
1 row in set (0.00 sec)
슬레이브 서버에서 복제가 같은 레코드가 삽입 된 것을 알 수 있습니다.
mysql> select * from test.demo_test;
c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|
test1 | t1 | 10 | 2 | 0 |
1 row in set (0.00 sec)
set
명령을 사용하여 키test1
을 새로운 값new
업데이트합니다.
Connected to 127.0.0.1. Escape character is '^]'. set test1 10 0 3 new STORED
슬레이브 서버에서 업데이트가 복제됩니다 ( cas
값도 업데이트됩니다).
mysql> select * from test.demo_test;
c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|
test1 | new | 10 | 3 | 0 |
1 row in set (0.00 sec)
delete
명령에서 레코드를 삭제합니다.
Connected to 127.0.0.1. Escape character is '^]'. delete test1 DELETED
삭제가 슬레이브에 복제되면 슬레이브의 레코드도 삭제됩니다.
mysql> select * from test.demo_test; Empty set (0.00 sec)
flush_all
명령으로 테이블을 삭제합니다.
먼저 telnet으로 마스터 서버에 연결하여 두 개의 레코드를 삽입합니다.
Connected to 127.0.0.1. Escape character is '^]' set test2 10 0 5 again STORED set test3 10 0 6 again1 STORED
슬레이브 서버에서 이러한 두 개의 레코드가 복제되는 것을 확인합니다.
mysql> select * from test.demo_test;
c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|
test2 | again | 10 | 5 | 0 |
test3 | again1 | 10 | 6 | 0 |
2 rows in set (0.00 sec)
telnet 인터페이스에서 flush_all
를 호출하여 테이블을 삭제합니다.
Connected to 127.0.0.1. Escape character is '^]'. flush_all OK
다음 삭제 작업이 슬레이브 서버에 복제 된 것을 확인합니다.
mysql> select * from test.demo_test; Empty set (0.00 sec)
모든 memcached
명령은 복제에서 지원됩니다.
InnoDB Memcached Binlog 고려 사항
Binlog 형식 :
대부분의 memcached 조작 (삽입, 삭제, 업데이트에 유사한) DML 문에 매핑됩니다. MySQL Server에 의해 실제로 처리되는 SQL 문이 없기 때문에 memcached 명령 (
flush_all
제외) 행 기반 복제 (RBR) 로깅을 사용합니다. 이것은 서버의 모든binlog_format
설정과는 무관합니다.memcached
flush_all
명령은TRUNCATE TABLE
명령에 매핑됩니다. DDL 명령 명령문 기반 로깅 만 사용할 수 있기 때문에이flush_all
명령은TRUNCATE TABLE
문을 보냄으로써 복제됩니다.
트랜잭션 :
트랜잭션 의 개념은 지금까지 일반적으로 memcached 응용 프로그램의 일부를 이루는 것은 없습니다. 여기에서는
daemon_memcached_r_batch_size
및daemon_memcached_w_batch_size
를 사용하여 성능을 고려한 읽기 및 쓰기 트랜잭션 일괄 처리 크기를 제어합니다. 이러한 설정은 복제에 영향을주지 않고 기초 테이블에서 모든 SQL 조작은 실행 후 즉시 복제됩니다.daemon_memcached_w_batch_size
의 기본값은 1이기 때문에 memcached 쓰기 작업이 즉시 커밋됩니다. 이 기본 설정은 마스터 서버와 슬레이브 서버에 표시되는 데이터의 불일치를 방지하기 위해 어느 정도의 성능 오버 헤드를 발생시킵니다. 복제 된 레코드는 항상 슬레이브 서버에서 즉시 사용할 수 있습니다.daemon_memcached_w_batch_size
를 1보다 크게 설정하면 memcached 인터페이스를 통해 삽입 또는 업데이트 된 레코드는 마스터 서버에 즉시 표시되지 않습니다. 이러한 레코드가 커밋되기 전에 레코드를 마스터 서버에 표시하려면set transaction isolation level read uncommitted
를 발행합니다.