Redis cluster
개요
Redis Cluster는 데이터가 자동으로 sharding 되우 Redis node로 분산되어 들어가도록 해줍니다.
- 16384개의 hash slot을 사용하고 key modulo 16384를 사용하는 CRC16를 사용하고 hash slot을 계산 합니다.
- 대량의 memory를 사용 하는 경우 scale out을 위해 사용될 수 있습니다.
cluster bus port 는 (client pot + 10000) 으로 설정 되며 다른 node cluster에게 항상 개방되어 있어야 합니다.
구성된 cluster nodes들중 하나가 다운이 되면, 다른 살아 있는 nodes들도 더 이상 입력을 받지 않습니다. 이때 slave가 존재 한다면
해당 slave가 mater node가 되어 대체 되어 정상적으로 동작 합니다.
Redis-trib (the Redis Cluster Manager)
N개의 빈 노드들을시작하기 위해 새로운 클러스터를 설정하는데 사용 됩니다.
클러스터가 잘 작동할때 검사를 하기 위해 사용됩니다.
클러스터에 신규 node가 추가 될때나, 이미 존재하는 master node에 slave node를 추가 할때, 또는 일부 hash slots을 다른 node들로
재분배(re-sharding) 하기 위한 빈 node들을 만들때 사용 됩니다.
테스트 (for windows)
1. Redis 설치 (windows)
https://github.com/MSOpenTech/redis/releases/download/win-3.0.501/Redis-x64-3.0.501.msi
2. Ruby 설치
http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.2.4-x64.exe
3. Redis buby 라이브러리 설치
gem install redis
4. Redis node 배치
replicas가 1이면 6노드가 필요합니다.
replicas가 2이면 9노드가 필요 합니다. (3 master nodes, 6 slave nodes)
redis.windows-service.conf 를 redis.port번호.cnf로 수정 합니다.
예)
파일 : redis.7000.conf
내용 수정 :
port 7000
appendonly yes
appendfilename "appendonly.7000.aof"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
파일 : redis.7001.conf
내용 수정 :
port 7001
appendonly yes
appendfilename "appendonly.7001.aof"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
... 필요한 node 만큼 준비 합니다.
5. Windws 서비스로 Redis node를 등록 합니다.
redis-server --service-install redis.7000.conf --service-name 7000
redis-server --service-start --service-name Redis7000
redis-server --service-install redis.7001.conf --service-name redis7001
redis-server --service-start --service-name Redis7001
redis-server --service-install redis.7002.conf --service-name redis7002
redis-server --service-start --service-name Redis7002
redis-server --service-install redis.7003.conf --service-name redis7003
redis-server --service-start --service-name Redis7003
redis-server --service-install redis.7004.conf --service-name redis7004
redis-server --service-start --service-name Redis7004
redis-server --service-install redis.7005.conf --service-name redis7005
redis-server --service-start --service-name Redis7005
혹은 각 node들을 각각 디렉토리로 만들고 직접 실행 해도 됩니다.
6. Redis cluster 만들기
https://raw.githubusercontent.com/MSOpenTech/redis/3.0/src/redis-trib.rb 스크립트를 redis-trib.rb 로 저장 합니다.
다음 명령으로 Redis cluster를 구성 합니다.
C:\Ruby22-x64\bin\ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
( rb파일 경로\ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005, ruby의 설치 디렉토리는 path에 추가 하시면 됩니다.)
nodes-xxxx.conf 에 각 node들의 ID가 저장 됩니다. 모든 노드들은 ip혹은 port가 아닌 ID로 다른 노드들을 식별 저장 합니다.
다시 구성 하려면 nodes-xxxx.conf 파일들을 삭제후 redis-trib.rb 를 통해 재구성 하면 됩니다.
입력된 순서에 따라 3개의 maste 와 3개의 slave로 cluster가 구성 됩니다.
7. redis-cli 로 접속
해당 디렉토리로 이동하여, redis-cli.exe -c -p 7000 로 실행 합니다.
-c는 cluster를 이용한다는 의미 이며 -p는 cluster nodes의 master port 중 하나를 입력 합니다.
'NoSQL > redis' 카테고리의 다른 글
[Redis, 레디스] 레디스 소개 및 아키텍처, 주의할 점(Redis Overview, Redis Architecture, Tool Tip) (0) | 2023.04.25 |
---|---|
Redis - 조회 명령어 정리 (0) | 2022.05.09 |
Redis Lua Script를 활용 예 (0) | 2021.04.11 |
Redis 의 Lua Script 활용 (0) | 2021.04.11 |
redis Strings (0) | 2021.04.11 |
redis Lists (0) | 2021.04.11 |
redis Sorted Sets (0) | 2021.04.11 |
redis Sets (0) | 2021.04.11 |