* cluster(shard) 구성





- 주요 특징

7000 포트 리슨할 경우 17000 포트는 클러스터 내부 통신용 포트로 사용됨.

최소한 3개의 master 필요. (테스트 추천 구성은 master 3개, slave 3개)

cluster 구성시 sentinel은 필요 없습니다. (혼용되지 않음)

최대 1000 노드.(master + slave)





- 주요 설정

# 클러스터 활성화

cluster-enabled yes

# 클러스터 상태 기록 파일. 자동 관리되므로 직접 편집하면 안됨.

cluster-config-file nodes.conf

# 장애 판단 시간

# 밀리세컨드 (msec)

cluster-node-timeout 5000

# 해당 시간동안 통신이 안되는 slave는 master로 failover 제외

# 0인 경우 항상 slave 에서 master로 failover 시도

# 초 단위(sec)

cluster-slave-validity-factor

# slave 최소 개수(기본 1)

cluster-migration-barrier

# yes(기본값) 인 경우 하나의 master 만 장애가 생겨도 클러스터 미동작 

# no 인 경우 장애가 없는 master는 정상 동작

cluster-require-full-coverage 





- 구성

- 예시

master 3대, slave 3대


- redis.conf 설정

port 7000

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

- 설정 및 시작

1. base directory : /home/user1/redis/cluster

2. 노드 설정용 폴더 생성 : mkdir 7000, 7001, 7002, 7003, 7004, 7005


3. 각 폴더에 redis.conf 작성 후 redis 실행

> redis-server ./7000/redis.conf

> redis-server ./7001/redis.conf

> ...

cluster-config-file 설정으로 지정된 nodes.conf 파일이 없기 때문에 모두 cluster 설정이 안된 상태.

로그엔 "No cluster configuration found" 와 node id가 기록되며 해당 node id 로 어떤 node 인지 구분 됨.(ip, port 무관)

4. 클러스터 생성

4-1. master, slave 자동 지정 생성

어떤게 master도 slave가 될지는 정할 수 없다.

> redis-cli --cluster create 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 --cluster-replicas 1

# yes 입력


4-2. master, slave 지정 생성

master 1 (7000) - slave 1 (7003)

master 2 (7001) - slave 2 (7004)

master 3 (7002) - slave 3 (7005)


master 3개로만 cluster 생성 후 각각 slave 로 추가 등록

> redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

> redis-cli --cluster add-node 127.0.0.1:7003 127.0.0.1:7000 --cluster-slave --cluster-master-id $(redis-cli -p 7000 cluster nodes | grep 127.0.0.1:7001 | grep master | awk '{print $1}')

> redis-cli --cluster add-node 127.0.0.1:7004 127.0.0.1:7000 --cluster-slave --cluster-master-id $(redis-cli -p 7000 cluster nodes | grep 127.0.0.1:7002 | grep master | awk '{print $1}')

> redis-cli --cluster add-node 127.0.0.1:7005 127.0.0.1:7000 --cluster-slave --cluster-master-id $(redis-cli -p 7000 cluster nodes | grep 127.0.0.1:7003 | grep master | awk '{print $1}')




- 참고. 

https://redis.io/topics/cluster-tutorial

https://coding-start.tistory.com/128

http://kimyongjin.com/post/1909