TIP게시판

제목 MySQL Cluster 사용중 두개의 Data Node에 데이타가 안맞는경우 싱크.
글쓴이 들국화 작성시각 2013/08/26 16:20:07
댓글 : 4 추천 : 1 스크랩 : 0 조회수 : 13843   RSS
MySQL Cluster사용중에 두개의 Data Node에 데이타가 안맞는경우가 발생 했습니다.

정확한 원인은 잘 모르겠구요.

의심가는건 Cluster Bug 인데요.  테이블에 대한 alter 명령을 내리면 즉 DDL 문을 날리면 노들들에 대한 싱크가 한쪽에만 일어나는 현생이 있는것 같네요. 클라이언트도 한쪽 노드 쪽으로만 세션이 유지 되는듯 합니다.
현상으로 데이타 들어가기도 하고 안들어 가기도 해서 계속 보다보니 클라이언트가 붙은 쪽으로만 데이터가 저장되는 기이한 현상이 발생 하네요. ㅎㅎㅎ

아무래도 테이블 락킹이 걸렸을때 DDL문에 의해 싱크를 놓치는듯 합니다.
SQL Node 가 각 Data Node에 쿼리를 동기화 하지 못하는것 같은데요. 현상으로만 구조를 추측해 본다면 MySQL Multi Master Replication과 비슷한듯 하네요.

그래서 입력되는 로그성 데이타 입력을 잠시 중단 현제 Data node들의 데이타를 동기화 했습니다. 
(테이블에 락킹을 걸어서 처리할수도 있을듯 하네요. 그래도 에러가 떨어질듯 하긴 합니다. 데이타 유실이 되면 안되는 경우는 스위칭 기법으로 아래와 비슷하게 임시 테이블 만들어 rename 명령을 한 쿼리로 날리는 방법도 있을듯 하네요.)

-- 임시 동기화 테이블 생성
CREATE TABE tabename_tmp.....

-- 데이타 베이스로 여러번 연결을 시도 각 NODE마다 세션을 연결 모든 노드에서 임시 테이블이 잘 반영 되었는지 확인.
DESC tablename_tmp;

-- 각 노드(세션)마다 동기화 시도
-- key가 중복이 일어 났을경우 무시하는 IGNORE 명령을 사용.
-- 다른 명령으로는 ON DUPLICATE KEY UPDATE 가 있음.
INSERT IGNORE INTO tablename_tmp SELECT * FROM tablename;

-- 각 세션별로 데이타가 잘 들어갔는지 총갯수와 여러 정보로 확인
SELECT COUNT(*) FROM tablename_tmp;

-- 원본 테이블 각 노드별로 drop
DROP TABLE tablename;

-- 테이블 이름 변경
RENAME TABLE tablename_tmp TO tablename;
Cluster 뿐만 아니라 Replication에서도 응용할수 있을듯 하네요.

MySQL Cluster 좋은것  같긴 한데... 아직 버그들이 좀 잇는듯 하네요.

참고로 Autoincrement값이 튀는 현상이 있습니다. 구글링 해봐도 같은 문의가 없어서 짧은 지식으로 추측해 볼때에 Persistant Connection이 문제가 아닌가 합니다. pcon을 사용했을때 rollback이 되면 AI값이 문제가 처음값을로 된다는 문서가 php 메뉴얼에 있던데 그 문제가 아닌가 추측이 되네요.  

이전에 개발했던 분이 pcon을 사용 했네요.
지금 바구려니 또다른 에러를 일으킬까봐 손을 못대는 상황...
태그 mysql cluster,cluster,mysql,insert ignore select
 다음글 helper에서 세션 객체 접근 (2)
 이전글 SQLServer에서 database session 사... (2)

댓글

milosz / 2013/08/26 18:41:03 / 추천 0
 뭔가 전문적인 내용이네요... -_-)b 멋지십니다.
한대승(불의회상) / 2013/08/26 18:53:27 / 추천 0
새로운 것을 해보려 하면 항상 두려움이 일어 나더라구요.
아.. 언제 극복 하려는지...
들국화 / 2013/08/27 10:17:54 / 추천 0
불의회상/ 두려움이 없음면 기쁨도 없겠죠. ^^;

저도 뭐 이전사람이 구성해 놓치 않았으면 새로 하려면 시간도 많이 걸리고 힘들지 않았을까 합니다. 그래서 환경도 중요 한거 같네요.
한대승(불의회상) / 2013/08/27 11:12:02 / 추천 0
들국화/ 두려움이 있어 기쁨이 있다. 
빛과 그림자군요.. ^^