Front-end_dev
레디스 샤딩 본문
레디스 샤딩에 대해서....
샤딩은 복제(replication)와는 비슷하지만 각 노드가 전부 master의 역할을 함.
복제같은 경우는 클러스터의 특정 노드에 데이터가 쓰여질때마다 클러스터 내의 다른 노드들도 동일한 데이터가 쓰여지는 반면, 샤딩은 해싱기반으로 데이터에 따라 노드를 선택하여 저장하며 조회할때 다른노드에있을경우 찾아줌.
즉, 복제와 달리 동일데이터를 여러번쓰지않고 서로 공유하는 상태.
[설치방법]
샤딩을 실습해보려면 써드파티모듈이 필요함. (여기선 redis-trib.rb 사용함)
1. ruby 2.4 버전 이상 설치 (맥에는 2.0이 기본으로 설치되있어서 2.4로 업데이트해주면됨)
2. gem install redis 혹은, http://download.redis.io/redis-stable/src/redis-trib.rb 여기서 직접 다운로드.
클러스에 노드총 3개를 사용하여 실습할 예정
첫번쪠 노드 config 파일
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
2번쨰 노드 config 파일
port 7001
cluster-enabled yes
cluster-config-file nodes2.conf
cluster-node-timeout 5000
appendonly yes
3번째 노드 config 파일
port 7002
cluster-enabled yes
cluster-config-file nodes3.conf
cluster-node-timeout 5000
appendonly yes
샤딩 하기위해 써드파티모듈로 스크립트실행
ruby redis-trib.rb create --replicas 0 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
샤딩이 잘 됬는지 확인해보면 역시 모든노드가 다 마스터로되있고, 앞에 해쉬값이 나와있으며 맨뒤에는 각 노드가 데이터를 쓸 영역임 (0-5460, 5461-10922, 10923-16383)
redis-stat으로 실시간 노드 모니터링
테스트 스크립트 작성후 각 노드 상태확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | const redis = require("redis"), client = redis.createClient({ host : '127.0.0.1', port : '7000', }); let t1,t2; let str =''; for(let i=0; i<1; i++) { t1 = +new Date; for(let j=0; j<10; j++) str += String.fromCharCode(parseInt(Math.random()*26) + 97); client.set(str,str); t2 = +new Date; str =''; if(t2 - t1 > 1) // output if t2-t1 is less than 1ms console.log(t2-t1); } client.on('connect', () => { console.log('connected ! '); }) | cs |
각각의 데이터가 해쉬값에 따라 노드에 저장된걸 확인 한 후, 조회해보기 ( 클러스터구성했기떄문에 redis-cli에서 -c옵션(cluster option)을 줘야함 안주면 에러~)
7000포트에 연결되있는 노드에서 7001번에 저장되있는 키에 조회를 했는데 리다이렉트되면서 조회된걸 확인해볼수있음.