Redis cluster

2021. 4. 11. 03:23 NoSQL/redis

개요

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 중 하나를 입력 합니다.

 

출처 : code-factory.tistory.com/12?category=724511

'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