반응형

Redis 3.0에서 Cluster 기능을 기본으로 지원한다는 얘기를 2달전엔가 들었던 것 같은데,

R&D할 시간이 나오지 않아서, 인수인계 시점을 기점으로 시작해보았다.


클러스터 구성은 Redis 공식홈에 있는 튜토리얼만으로 충분할 것 같아서,

Redis 공식홈의 Cluster Tutorial 부분을 참고하였다.

(http://redis.io/topics/cluster-tutorial)



1. Redis 3.0.2 (포스팅 당시 최신버전) 설치

  - tar.gz 받아서 압축풀고, make, make install만 하면 끝.


2. Redis.conf 작성

port 7000                                          // 클러스터 노드로 구성될 Redis의 포트

cluster-enabled yes                        // 클러스터를 활성화

cluster-config-file nodes.conf        // 클러스터 노드에 대한 정보

cluster-node-timeout 5000            // 접속 타임아웃 (ms)

appendonly yes                               // 데이터 유실 방지를 하기 위해 AOF방식으로 파일을 남길 것인가에 대한 옵션


3. 테스트 환경 구축 (총 6개의 클러스터 노드에 대한 설정)

$ mkdir cluster-test

$ cd cluster-test

$ mkdir 7000, 7001, 7002, 7003, 7004, 7005


4. Redis.conf 파일을 각 노드 폴더에 붙여넣기

 - port부분은 각 노드 포트에 맞게 변경 필요


5. 각 클러스터 노드를 실행시킨다.

$ cd 7000

$ ../../src/redis-server ./redis.conf &

 - 일일히 & 붙이기 귀찮으신 분들은 daemonize옵션을 켜주시면 안붙여도 됨.


6. 이제 각 클러스터 노드들을 redis-trib로 묶어주어야 한다.

※ Tip : 사전에 ruby, gem이 설치가 되어 있어야 하며, 

gem install redis명령어로 ruby에서 사용할 수 있는 redis 라이브러리 설치가 필요함.

redis-trib는 src폴더에 있음.

※ Tip2 : Jedis를 client로 이용하시는 분들은 127.0.0.1로 띄우면 too many redirections exception이 발생함.

해당 머신의 private ip나 public ip로 띄우시는 걸 권장!

이유는 JedisCluster는 순수하게 설정파일에 지정된 아이피 (예를 들면 192.168.0.123)로만 노드를 검색하게 되는데,

실제 cluster가 구성된 trib에서는 127.0.0.1로 되어 있기 때문에, 제대로 찾지 못하는 듯한데.. 아직 jedis가 cluster 기능을 지원한지 얼마 안되서 그런것 같고, 추후 버전에는 수정이 될 것으로 보임.


$ ./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

 


7. 임의 노드에 붙어서 데이터 SET GET을 해보자.

※ Tip : redis-cli 실행 시 -c 명령어를 빼도 접속은 가능하나, 대부분 명령어 입력 시 error가 떨어질 것임.

cluster로 구성되어 있는 redis에 접속해서 뭔가를 하려면 -c 옵션을 붙여야 되는 듯 하다.

$ ./redis-cli -c -p 7000

127.0.0.1:7000> SET my "hello"

127.0.0.1:7000> GET my

"hello"


$ ./redis-cli -c -p 7003

127.0.0.1:7003> GET my

-> Redirected to slot [xxx] located at 127.0.0.1:7000     

hello

127.0.0.1:7000>


 - 아무 노드에서나 get을 해도 해당 key가 있는 노드에 가서 데이터를 찾아준다.


8. 개인적인 생각

 - 위 테스트로 유추해볼 수 있는 것은, redis-cluster는 sharding방식으로 동작을 하며, 

sentinel구성을 했을때와 달리 (replication 방식) 데이터, 메모리 사용량에서 이득을 볼 수 있을 것으로 보인다.

 - redis-cluster가 나오면서 zookeeper(장애 모니터링)나 twemproxy (sharding)까지 굳이 붙여서 사용할 필요가 없어질 것으로 보인다.





반응형

'개발 > Redis' 카테고리의 다른 글

[PHPRedmin] Windows 세팅  (0) 2016.06.11
[Jedis] Cluster Configuration  (0) 2016.06.11
[Redis] Copy Key  (0) 2016.06.11
[Redis Cluster] FailOver 테스트  (0) 2016.06.11
,