Mysql Cluster에 관련하여 질문좀 드려요.
Mysql Cluster로 리눅스에서 구현 했는데요.
Fail over 부분의 확인해는데..
Access 속도가 한대 일때 보다 두대가 빨라 져야 하는거 아닌가요?
Cluster Management System : 192.168.0.1, 192.168.0.2
Main Mysql API System : 192.168.0.1, 192.168.0.2
Node1 : 192.168.0.1
Node2 : 192.168.0.2
위와 같이 구했습니다..
node1 만 켜놓고 외부에서 insert로 데이터 2만개를 삽입하고 select 로 보았습니다.
-> Insert Time to Run : 030.82 sec
-> Select Time to Run : 002.16 sec
-> Total Time to Run : 032.98 sec
위와 같이 나왔구요.
node2를 켜서 node 1, node 2 를 다 켠 상태에서 똑같이 프로그램을 돌려 보았습니다.
[root@cluster0 MysqlTest]# ndb_mgm -e "show"
Connected to Management Server at: 192.168.0.1:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.0.1 (Version: 4.1.22, Nodegroup: 0, Master)
id=4 @192.168.0.2 (Version: 4.1.22, Nodegroup: 0)
[ndb_mgmd(MGM)] 2 node(s)
id=1 @192.168.0.1 (Version: 4.1.22)
id=2 @192.168.0.2 (Version: 4.1.22)
[mysqld(API)] 2 node(s)
id=5 @192.168.0.1 (Version: 4.1.22)
id=6 @192.168.0.2 (Version: 4.1.22)
위와 같이 만들고..
했을 때 밑에 와 같은 결과가 나왔습니다.
-> Insert Time to Run : 071.82 sec
-> Select Time to Run : 004.16 sec
-> Total Time to Run : 075.98 sec
왜 이런 결과가 나오는지 모르겠습니다.
뭔가 잘 못 이해하고 계신듯 합니다.
뭔가 잘 못 이해하고 계신듯 합니다.
DB를 떠나서 어떤 A 데이터를 실시간으로 B로 복제를 한다면.
A에 대해서 write i/o가(DB에서는 insert) 발생한다면 그것을 B에 똑같이 적용하는 부하가
추가로 발생하게 됩니다. 그래서 A하나만 돌렸을때 보다 A,B가 모든 작업을 완료하기 까지
시간이 더 걸립니다.
반면 read i/o (DB에서는 select) 의 경우는 부하를 반으로 줄일 수 있는데 이것은 read 작업을
A,B 양쪽으로 반씩 분산 시켰을때 적용됩니다. 복제를 걸어놓고 하나에 대해서 read만 한다면
A 하나만 썼을때와 차이는 없습니다.
DB를 단순히 미러해서 클러스트링 한다면 write 작업에 대한 이점은 없습니다. 2대가 아니라
3대 4대 몇백대로 늘인다고 해도 각 DB에 걸리는 write 부하는 똑같이 주어집니다.
정리하면 write(insert) 부하를 줄이려면 데이터를 쪼개서 별도의 DB로 나누어야 합니다.
read의 부하를 줄이려면 복제하고 복제된 갯수만큼 read작업에 대해서 1/n로 작업을 분산시켜야 합니다.
http://www.slideshare.net/vishnu/livejournals-backend-a-history-of-scaling/
의 20페이지 부터 보시면 제가 무슨 말을 하려는지 이해가 가실겁니다.
fail over 기능이...
그런기능이 아니죠.. 하나가 죽으면 자동적으로 다른 하나가 동작하는....DNS 처럼 master와 slave 개념입니다.
그렇군요..감사합니다.
aero // 답변 감사 합니다. 큰 도움이 되었습니다.
querrillalds // 제가 질문을 이상하게 드렸네요. fail over 기능을 알고 있고요. 테스트해서 직접 확인 해봤습니다.^^
근데 access 속도 관련 문제 때문에 질문 드렸습니다.
그런데요..
mgm node 있고 node 1, node 2 가 있을 때..
select 문으로 데이터를 2만개 정도 요청한다고 하면...
어떤 방식으로 데이터를 가져 오는지 궁금합니다.
node 1, node 2에서 각각 만개씩 가져오나요?
두대를 연결해서 더
두대를 연결해서 더 빨라지는건 분산처리 시스템 아닌가요..
지금 설정하신 클러스터는 클러스터 매니저가 기동되어 있고........
어느 한 노드가 죽으면 failover가 발생하여 다른 노드가 올라오는..
그런 개념입니다.
디비는 공유디스크에 저장되어 있겠죠 ???
노드1/2를 모두 올려놓고 실행시키신거라면 클러스터 노드 확인이나
기타등등에 쓰여지는 cpu+memory때문에 살짜쿵 느려지는게
아닐려나.. 하고 생각해봅니다만.. ㅡㅡ?
댓글 달기