Spider For MySQL 실전사용기 피망플러스유닛최윤묵
Spider For MySQL Data Sharding By Spider Storage Engine http://spiderformysql.com/
성능 8 만 / 분 X 4 대 32 만 / 분 많은 DB 중에왜 spider 를?
Source: 클라우드컴퓨팅구 선택의기로 Consistency RDBMS Bigtable HBase C.A.P. Availability Dynamo MongoDB Cassandra Partition Tolerance 출처 : 클라우드컴퓨팅구현기술
중요한것은비용 Image source : http://antialiasfactory.deviantart.com/gallery/#/d27e3ga
Spider 선택기준 비용이적게드는장비로고성능 DB 구성 확장성이좋음 개발자에게익숙한 SQL 사용가능 도전! ( 국내에참고할곳이거의없음 )
Spider 를이용한구성 Spider 노드 데이터노드 Spider node 를통해하나의 DB 로보임 Spider node 데이터를갖지않음 Data node 로중계역할 Schema 변경이쉬움 Image source :http://barrymieny.deviantart.com/gallery/#/d1pxdae
Spider 동작 SELECT name FROM member WHERE id = 11 id name 1 Name_1 2 Name_2 9 Name_9 id name 10 Name_10 11 Name_11 id name 19 Name_... 20 Name_... 29 Name_... id name 30 Name_... 31 Name_... 39 Name_... 19 Name_...
Schema 작성 데이터노드용은기존 MySQL 과동일 Spider 노드용은 Primay Key 값에따른데이터노드정보입력필요
데이터노드 Schema CREATE TABLE `noc_member` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Spider 노드 Schema CREATE TABLE `noc_member` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=SPIDER DEFAULT CHARSET=utf8 CONNECTION='database "noc", table "member", user "nocuser"' /*!50100 PARTITION BY RANGE (id) PARTITION pt1 VALUES LESS THAN (10) COMMENT = 'host "db1", port "7001"' ENGINE = SPIDER, PARTITION pt2 VALUES LESS THAN (20) COMMENT = 'host "db2", port "7001"' ENGINE = SPIDER, PARTITION pt3 VALUES LESS THAN (30) COMMENT = 'host "db3", port "7001"' ENGINE = SPIDER, PARTITION pt4 VALUES LESS THAN (40) COMMENT = 'host "db4", port "7001"' ENGINE = SPIDER) */
Spider schema 작성자동화 Schema 작성하는반복적인작업을줄임 일반 schema 에서파싱을통해서 spider schema 생성 Partition DB 서버정보추가
2011 년 10 월 - Resharding Resharding Table 의데이터를여러 node 로분산시키는작업 적용내용 Log table 을 8 개의 node 로분산시킴 약천만건의 log 무정지 oak-online-alter-table 사용 Openark kit 중하나
Log resharding 방법 log table을 sharding 된 log2로복제 Oak-online-alter-table 의 ghost option 복제완료후 table name을변경 주의점 table rename 시유실 대안 : spider VP 사용
성능개선은데이터노드에서 MySQL 를묶어주는기능을하는 Spider 데이터노드성능을높여주는것이중요 Random PK Clustered Index
2012 년 1 월 - Re-indexing Random PK 제거 적용내용 1. 서비스에서는임시 table 을쓰도록변경 2. 원래데이터를 dump 3. Random pk를쓰지않는새로운 table 작성 4. 새로운 table 에 dump한내용새롭게 load 5. 임시 table에쌓인데이터보정
DB 노드관리스크립트 흩어져있는 DB 노드를관리 SQL Command 실행 Master 와 Slave 교체 장애처리 참고 Jetpants : Tumblr
Spider 에서의 Table Join Spider 사용시에는 Table Join 은좋지않은선택 Application Layer 에서처리유도
2012 년 2 월 메모리증설 메모리증설을하기위해, DB 장비를재시작 작업내용 무정지 Spider 의 partition 정보를차례대로 slave 로돌린후재시작후원복
Replication 구조 Data Node Spider 에서는한 partition 당한대의 date node 만보고있지만
Replication 구조 Master master master replication Date node 들은복제되고있음 Slave 필요시에실시간으로 Spider 는 Slave 를쓸수있도록변경가능
장비재시작전 CREATE TABLE ) ENGINE=SPIDER CONNECTION='database noc", table "member", user nocuser"' /*!50100 PARTITION BY RANGE (id) PARTITION pt1 VALUES LESS THAN (10) COMMENT = 'host db1", port 7001"' ENGINE = SPIDER. Spider 에서 slave 로사용하도록변경 /*!50100 PARTITION BY RANGE (id) PARTITION pt1 VALUES LESS THAN (10) COMMENT = 'host db4", port 7020"' ENGINE = SPIDER.
장비재시작 Master master master replication Slave 1. Master 장비메모리증설후재시작 2. 완료후, Spider 가 master 쓰도록 shcema 변경
고가용성 (HA) Master 역할의 DB 가정지된경우, Slave 가자동으로 Master 가되지는않음 수동으로처리중 Master, Slave 변경하는스크립트사용
2012 년 5 월 장비추가 DB 장비추가 저장공간확보, 메모리확보 작업내용 무정지 대당 4개 node -> 2개 node Percona Xtrabackup 사용
백업툴 Percona Xtrabackup DB 정지없이 Data image 를백업 MySQL 에 data directory로바로사용가능 순차백업가능
Master Node 교체 OLD 2 - Replication 1- Xtrabackup dump NEW
Master Node 교체 OLD 4 더이상데이터가오지않는것을확인후 replication 제거 3 Spider schema 교체 NEW 필요시마다장비추가하여성능확대
여러대의 Spider 사용 현재 4대의 Spider node 사용 4대의 Spider 가같은 schema 를쓰도록유의 Data consistency 가깨질수있음 주기적으로 schema 를 export 후비교
DB 서버들 IDC 이전 Image source :http://www.veryicon.com/icons/emoticon/icontexto-emoticons/surprised.html
DB 서버들 IDC 이전 취소됨 Image source : http://www.superwpthemes.com/facebook-like-button/
마무리 효율적인비용으로구축하는고성능 DB 만족 절감한비용 = 도전하는사람에대한투자 = 성장
고맙습니다!