Redis CLUSTER Configuration by Redis-cli

레디스 클러스터 교육 레디스 클라우드 서비스
Redis Cloud Service
레디스 게이트 서버
Redis-Gate Server

CLUSTER   Redis-cli를 사용한 클러스터 자동 구성

한 머신/박스안에서 자동 구성

  • redis-cli --cluster로 클러스터를 만들때
    첫 번째 인수는 'create' 이다.
    두 번째 부터는 ip:port를 모두 입력한다.
    마지막 인수는 --cluster-replicas 1 이다. 숫자는 마스터 노드당 복제를 몇 개 할 것인지를 정하는 것이다. 1로하면 마스터:복제가 1:1이고 2로 하면 마스터:복제가 1:2가 되는 것이다. 이 인수는 생략하거나 0으로 할 수 있다.
  • redis-cli로 클러스터를 생성할때는 마스터가 최소 3 노드 이상이 요구된다.
  • 한 머신(실제 머신 또는 버추얼 머신을 머신 또는 박스라고 부르겠다)안에서 6개 노드로 마스터 3, 복제 3으로 구성할때 명령
  • $ redis-cli --cluster create 127.0.0.1:5001 127.0.0.1:5002 127.0.0.1:5003 127.0.0.1:5004 127.0.0.1:5005 127.0.0.1:5006 --cluster-replicas 1
  • 위와 같은 명령을 실행하면 입력한 ip:port 순서대로 세번째까지 마스터가 되고, 나머지는 복제노드가 된다.
  • Redis Cluster Create redis_trib
  • 이번에는 ip:port 순서를 5006번부터 입력해 보자.
  • $ redis-cli --cluster create 127.0.0.1:5006 127.0.0.1:5005 127.0.0.1:5004 127.0.0.1:5003 127.0.0.1:5002 127.0.0.1:5001 --cluster-replicas 1
  • 입력한 순서대로 클러스터가 구성된다.
  • Redis Cluster Create redis_trib
  • replicas를 2로 할 경우, 마스터가 3개이고 각 마스터에 2개의 복제로 구성되므로 9개 노드가 있어야 한다.
  • Redis Cluster Create redis-trib replicas 2
  • 클러스터가 생성될때 나오는 메시지를 보면 어떻게 구성될지 알 수 있다.
  • $ redis-cli --cluster create 127.0.0.1:5001 127.0.0.1:5002 127.0.0.1:5003 127.0.0.1:5004 127.0.0.1:5005 127.0.0.1:5006 127.0.0.1:5007 127.0.0.1:5008 127.0.0.1:5009 --cluster-replicas 2
    >>> Performing hash slots allocation on 9 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 127.0.0.1:5004 to 127.0.0.1:5001
    Adding replica 127.0.0.1:5005 to 127.0.0.1:5001
    Adding replica 127.0.0.1:5006 to 127.0.0.1:5002
    Adding replica 127.0.0.1:5007 to 127.0.0.1:5002
    Adding replica 127.0.0.1:5008 to 127.0.0.1:5003
    Adding replica 127.0.0.1:5009 to 127.0.0.1:5003

3 머신, 6 노드 자동 구성

  • 아래와 같이 머신(박스) 1개당 2개 레디스 노드를 넣어 총 6개 레디스 클러스터를 자동 구성해 보았다.
  • Redis Cluster Create redis_trib 3boxes 6nodes
  • 실행한 명령 : redis-trib
  • $ redis-cli --cluster create 192.168.56.102:5001 192.168.56.102:5002 192.168.56.103:5003 192.168.56.103:5004 192.168.56.105:5005 192.168.56.105:5006 --cluster-replicas 1
  • 구성 결과: 102번 103번 박스는 마스터, 복제노드가 교차되도록 구성되었다. 어느 한쪽 머신이 다운되더라도 계속 운영될것이다. 105번은 다른 머신과 교차할 수 없어 단독으로 마스터, 복제가 구성되었다.
  • Redis Cluster Create redis_trib 3boxes 6nodes

3 머신, 12 노드 자동 구성

  • 아래와 같이 머신(박스) 1개당 6개 레디스 노드를 넣어 총 12개 레디스 클러서터를 자동 구성해 보았다.
  • Redis Cluster Create redis_trib 3boxes 12nodes
  • 실행한 명령 : redis-cli
  • $ redis-cli --cluster create 192.168.56.102:5001 192.168.56.102:5002 192.168.56.102:5003 192.168.56.102:5004 192.168.56.103:5011 192.168.56.103:5012 192.168.56.103:5013 192.168.56.103:5014 192.168.56.105:5021 192.168.56.105:5022 192.168.56.105:5023 192.168.56.105:5024 --cluster-replicas 1
  • 구성 결과: 각 박스의 마스터들은 각각 다른 박스에 복제를 두는 것으로 구성되었다. 따라서 3개 박스중 어느 하나가 다운되더라도 클러스터는 계속 운영될 수 있다.
  • Redis Cluster Create redis_trib 3boxes 12nodes

3 머신, 18 노드 자동 구성과 Failover

  • 이제 좀 복잡하게 박스당 6개 레디스 노드를 놓고, 복제(replicas)를 2로 해서 총 18개 노드로 클러스터를 구성해 보자.   클러스터 생성 전 상태는 아래와 같다.
  • Redis Cluster redis_trib 3boxes 18nodes replicas 2
  • 실행한 명령 : redis-cli --cluster-create ip:port ... --cluster-replicas 2
  • 클러스터 구성 결과: 각 박스당 마스터가 2개씩 잘 할당되었다.   5001번의 경우 복제가 103번, 105번 박스에 잘 나누어 졌다.   그러나 모두 잘된 것은 아니다. 5011번은 복제노드 2개가 모두 102번 박스에 위치해 있다.   5022번 노드도 같은 박스안에 복제노드 1개가 위치해 있다.   잘된 구성이라면 박스 2개가 다운되어도 운영될 수 있어야 하지만, 자동 구성된 상태는 그렇치 못하다.
  • Redis Cluster redis_trib 3boxes 18nodes replicas 2
  • 102번 박스가 다운되면 어떻게 될까?   그래서 102번 박스를 다운시켜보았다.   몇 초 동안 클러스터가 다운되기(fail)는 했지만 정상(ok)으로 돌아왔다.   클러스터 구성 상태를 보면 102번 박스에 있던 마스터 2대가 모두 105번으로 이동했다.   5011번 마스터는 같은 박스에 복제를 두게 되었다.   이 상태에서 박스 하나가 다운되면 클러스터가 다운되게 된다.
  • Redis Cluster redis_trib 3boxes 18nodes replicas 2
  • 102번 박스를 다시 살리면 어떻게 될까?   그래서 102번 박스를 다시 살리고, 레디스도 재시작을 했다.   모두 복제로 클러스터에 합류했다.   5011번을 보면 처음처럼 5003번과 5004번을 복제로 추가했고, 5021번도 5005번을 복제로 추가해서 처음과 같은 형태가 되었다.   그런데 5011은 복제를 3개 가지게 된 반면 5022는 복제를 하나만 가지게 되었다.
  • Redis Cluster redis_trib 3boxes 18nodes replicas 2
  • 여러 개 디렉토리 한번에 만들기
  • $ mkdir 7001 7002 7003 7004 7005 7006
  • 7001/redis.conf 파일을 7002 ~ 7006 디렉토리에 한번에 복사하기
  • $ echo 7002 7003 7004 7005 7006 | xargs -n 1 cp 7001/redis.conf
  • vi에서 바꾸기: :%s/old/new/
  • sed로 바꾸기
  • $ sed -i 's/5001/7001/' 7001/redis.conf
  • 여러 개 디렉토리 한번에 지우기
  • $ rm -r 700*

결론

  • redis-cli가 일반적으로 클러스터를 잘 구성하지만, 고가용성을 위해 잘 구성하려면, 직접(manual) 구성해줄 필요가 있다.   특히 노드나 박스 다운 후 구성이 변경되기 때문에 다시 조정해 줄 필요가 있다.

<< Introduction Configuration Cluster Redis-cli >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.