Redis CLUSTER Configuration

<< Cluster Introduction Cluster redis-trib.rb 사용법 >>

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

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

  • redis-trib.rb 클러스터를 만들때 첫 번째 인수는 'create' 이다.   두 번째 인수는 --replicas 1 이다. 숫자는 마스터 노드당 복제를 몇 개 할 것인지를 정하는 것이다.   1로하면 마스터:슬레이브가 1:1이고 2로 하면 마스터:슬레이브가 1:2가 되는 것이다.   이 인수는 생략하거나 0으로 할 수 있다.   세 번째 부터는 IP:PORT를 입력한다.
  • redis-trib로 클러스터를 생성할때는 마스터가 최소 3 노드 이상이 요구된다.
  • 한 머신(실제 머신 또는 버추얼 머신을 머신 또는 박스라고 부르겠다)안에서 6개 노드로 마스터 3, 슬레이브 3으로 구성할때 명령
  • $ src/redis-trib.rb create --replicas 1 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
  • 위와 같은 명령을 실행하면 입력한 IP:PORT 순서대로 세번째까지 마스터가 되고, 나머지는 슬레이브가 된다.
  • Redis Cluster Create redis_trib
  • 이번에는 IP:PORT 순서를 5006번부터 입력해 보자.
  • $ src/redis-trib.rb create --replicas 1 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
  • 입력한 순서대로 클러스터가 구성된다.
  • Redis Cluster Create redis_trib
  • replicas를 2로 할 경우, 마스터가 3개이고 각 마스터에 2개의 슬레이브로 구성되므로 9개 노드가 있어야 한다.
  • Redis Cluster Create redis-trib replicas 2
  • 클러스터가 생성될때 나오는 메시지를 보면 어떻게 구성될지 알 수 있다.
  • $ src/redis-trib.rb create --replicas 2 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
    >>> Creating cluster
    Using 3 masters:
    127.0.0.1:5001
    127.0.0.1:5002
    127.0.0.1:5003
    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
  • $ src/redis-trib.rb create --replicas 1 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
  • 구성 결과: 102번 103번 박스는 마스터, 슬레이브가 교차되도록 구성되었다. 어느 한쪽 머신이 다운되더라도 계속 운영될것이다. 105번은 다른 머신과 교차할 수 없어 단독으로 마스터, 슬레이브가 구성되었다.
  • Redis Cluster Create redis_trib 3boxes 6nodes

3 머신, 12 노드 자동 구성

  • 아래와 같이 머신(박스) 1개당 4개 레디스 노드를 넣어 총 12개 레디스 클러서터를 자동 구성해 보았다.
  • Redis Cluster Create redis_trib 3boxes 12nodes
  • 실행한 명령 : redis-trib
  • $ src/redis-trib.rb create --replicas 1 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
  • 구성 결과: 각 박스의 마스터들은 각각 다른 박스에 슬레이브를 두는 것으로 구성되었다. 따라서 3개 박스중 어느 하나가 다운되더라도 클러스터는 계속 운영될 수 있다.
  • Redis Cluster Create redis_trib 3boxes 12nodes

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

  • 이제 좀 복잡하게 박스당 4개 레디스 노드를 놓고, 복제(replicas)를 2로 해서 총 18개 노드로 클러스터를 구성해 보자.   클러스터 생성 전 상태는 아래와 같다.
  • Redis Cluster redis_trib 3boxes 18nodes replicas 2
  • 실행한 명령 : src/redis-trib.rb create --replicas 2 IP:PORT ...
  • 클러스터 구성 결과: 각 박스당 마스터가 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

결론

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



<< Introduction Configuration redis-trib.rb 사용법 >>

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

Email 返事がかかってなれば、メールでお知らせします。