redis_cluster_conf_redis_cli
Redis CLUSTER Configuration by Redis-cli
레디스 클러스터 교육 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise 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으로 구성할때 명령
- 위와 같은 명령을 실행하면 입력한 ip:port 순서대로 세번째까지 마스터가 되고, 나머지는 복제노드가 된다.
- 이번에는 ip:port 순서를 5006번부터 입력해 보자.
- 입력한 순서대로 클러스터가 구성된다.
- replicas를 2로 할 경우, 마스터가 3개이고 각 마스터에 2개의 복제로 구성되므로 9개 노드가 있어야 한다.
- 클러스터가 생성될때 나오는 메시지를 보면 어떻게 구성될지 알 수 있다.
$ 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
$ 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-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
>>> 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-trib
- 구성 결과: 102번 103번 박스는 마스터, 복제노드가 교차되도록 구성되었다. 어느 한쪽 머신이 다운되더라도 계속 운영될것이다. 105번은 다른 머신과 교차할 수 없어 단독으로 마스터, 복제가 구성되었다.
$ 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
3 머신, 12 노드 자동 구성
- 아래와 같이 머신(박스) 1개당 6개 레디스 노드를 넣어 총 12개 레디스 클러서터를 자동 구성해 보았다.
- 실행한 명령 : redis-cli
- 구성 결과: 각 박스의 마스터들은 각각 다른 박스에 복제를 두는 것으로 구성되었다. 따라서 3개 박스중 어느 하나가 다운되더라도 클러스터는 계속 운영될 수 있다.
$ 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 머신, 18 노드 자동 구성과 Failover
- 이제 좀 복잡하게 박스당 6개 레디스 노드를 놓고, 복제(replicas)를 2로 해서 총 18개 노드로 클러스터를 구성해 보자. 클러스터 생성 전 상태는 아래와 같다.
- 실행한 명령 : redis-cli --cluster-create ip:port ... --cluster-replicas 2
- 클러스터 구성 결과: 각 박스당 마스터가 2개씩 잘 할당되었다. 5001번의 경우 복제가 103번, 105번 박스에 잘 나누어 졌다. 그러나 모두 잘된 것은 아니다. 5011번은 복제노드 2개가 모두 102번 박스에 위치해 있다. 5022번 노드도 같은 박스안에 복제노드 1개가 위치해 있다. 잘된 구성이라면 박스 2개가 다운되어도 운영될 수 있어야 하지만, 자동 구성된 상태는 그렇치 못하다.
- 102번 박스가 다운되면 어떻게 될까? 그래서 102번 박스를 다운시켜보았다. 몇 초 동안 클러스터가 다운되기(fail)는 했지만 정상(ok)으로 돌아왔다. 클러스터 구성 상태를 보면 102번 박스에 있던 마스터 2대가 모두 105번으로 이동했다. 5011번 마스터는 같은 박스에 복제를 두게 되었다. 이 상태에서 박스 하나가 다운되면 클러스터가 다운되게 된다.
- 102번 박스를 다시 살리면 어떻게 될까? 그래서 102번 박스를 다시 살리고, 레디스도 재시작을 했다. 모두 복제로 클러스터에 합류했다. 5011번을 보면 처음처럼 5003번과 5004번을 복제로 추가했고, 5021번도 5005번을 복제로 추가해서 처음과 같은 형태가 되었다. 그런데 5011은 복제를 3개 가지게 된 반면 5022는 복제를 하나만 가지게 되었다.
- 여러 개 디렉토리 한번에 만들기
- 7001/redis.conf 파일을 7002 ~ 7006 디렉토리에 한번에 복사하기
- vi에서 바꾸기: :%s/old/new/
- sed로 바꾸기
- 여러 개 디렉토리 한번에 지우기
$ mkdir 7001 7002 7003 7004 7005 7006
$ echo 7002 7003 7004 7005 7006 | xargs -n 1 cp 7001/redis.conf
$ sed -i 's/5001/7001/' 7001/redis.conf
$ rm -r 700*
결론
- redis-cli가 일반적으로 클러스터를 잘 구성하지만, 고가용성을 위해 잘 구성하려면, 직접(manual) 구성해줄 필요가 있다. 특히 노드나 박스 다운 후 구성이 변경되기 때문에 다시 조정해 줄 필요가 있다.
<< Introduction | Configuration | Cluster Redis-cli >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.