반응형
Linux에 설치
들어가기 전
- Redis Cluster는 최소 3개의 Master Node가 필요함
- Slave Node가 필요하면 최소 6개의 Node가 필요함(Master 3개, Slave 3개)
- Redis Cluster에서 도메인은 지원하지 않음 (IP로 사용해야함)
- Node간의 통신을 위해서 지정한 port에 10000을 더한 포트를 사용한다. (ex. port=6379, Node 통신 포트=16379)
- 따라서 방화벽 사용시 Redis 포트 뿐만 아니라 Node 통신 포트도 신경써서 관리해줘야한다.
- Replication 작업은 비동기로 처리되어 성능이 좋지만, Master에 쓰기 작업 후 Slave에 Replication 되기 전에 Master에 장애가 발생할 경우 데이터가 유실될 수 있기 때문에 장애 내성에는 좋지 못하다.
- 해당 예제에서는 Master 3개, Slave 3개로 진행
- Master
- 192.168.56.224
- 192.168.56.225
- 192.168.56.226
- Slave
- 192.168.56.227
- 192.168.56.228
- 192.168.56.229
- Master
Master - Slave (fail over)
- master1의 정보를 slave1이 replica하고있음
- master1이 drop될 경우 slave1이 master1로 전환됨
- 이전에 master1이었던 노드가 복구되면 slave1로 전환됨
Redis 설치
- 참고
- https://sg-choi.tistory.com/177
redis.conf 수정
- protected-mode
- no로 설정하는 이유는 cluster create 단계에서 wait 상태로 멈추는 현상이 발생하여 설정
- 실 운영시에는 yes로 사용할 수 있는 방법을 찾아봐야함
- bind
- 주석으로 제외 처리
vi /home/ubuntu/app/redis/redis.conf
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-require-full-coverage yes
protected-mode no
#bind 127.0.0.1
서버 6대 준비
- 위 과정까지 동일하게 설정한 서버를 6대 준비
- 모두 실행
redis-server /home/ubuntu/app/redis/redis.conf
cluster 설정
- redis-cli가 설치된 서버에서 아래 명령어 실행
# master, slave 모두 설정할 경우
redis-cli \
--cluster-replicas 1 \
--cluster create \
192.168.56.224:6379 \
192.168.56.225:6379 \
192.168.56.226:6379 \
192.168.56.227:6379 \
192.168.56.228:6379 \
192.168.56.229:6379
# master만 설정할 경우
redis-cli \
--cluster create \
192.168.56.224:6379 \
192.168.56.225:6379 \
192.168.56.226:6379
cluster 모드로 접속
- 클러스터 노드 중 하나에 접속해 아래 명령어를 수행
redis-cli -c -p 6379
redis-cli -c -h 192.168.56.224 -p 6379
cluster 명령어
- 상태 확인
127.0.0.1:6379> cluster info
- 노드 확인
127.0.0.1:6379> cluster nodes
참고
- 설정 : https://y0c.github.io/2018/10/21/redis-cluster/
- 설정 : http://redisgate.kr/redis/cluster/cluster_start.php
- fail over : http://redisgate.kr/redis/cluster/cluster_failover.php
Docker로 설치
redis.conf
- 경로 : ~/config/redis.conf
#cluster 사용 여부
cluster-enabled yes
#cluster 설정 파일 이름
cluster-config-file node.conf
#timeout 시간 지정 (ms)
cluster-node-timeout 5000
#failover된 redis node 재실행 시 이전 데이터를 다시 로드해올 수 있음
appendonly yes
docker-compose.yml
version: '3.7'
services:
redis-node-1:
container_name: redis-node-1
image: redis:7.2.3
environment:
TZ: Asia/Seoul
volumes:
- ./config/redis.conf:/redis/redis.conf
command: redis-server /redis/redis.conf --port 7001
ports:
- "7001-7006:7001-7006"
redis-node-2:
container_name: redis-node-2
image: redis:7.2.3
environment:
TZ: Asia/Seoul
volumes:
- ./config/redis.conf:/redis/redis.conf
command: redis-server /redis/redis.conf --port 7002
network_mode: "service:redis-node-1"
redis-node-3:
container_name: redis-node-3
image: redis:7.2.3
environment:
TZ: Asia/Seoul
volumes:
- ./config/redis.conf:/redis/redis.conf
command: redis-server /redis/redis.conf --port 7003
network_mode: "service:redis-node-1"
redis-node-4:
container_name: redis-node-4
image: redis:7.2.3
environment:
TZ: Asia/Seoul
volumes:
- ./config/redis.conf:/redis/redis.conf
command: redis-server /redis/redis.conf --port 7004
network_mode: "service:redis-node-1"
redis-node-5:
container_name: redis-node-5
image: redis:7.2.3
environment:
TZ: Asia/Seoul
volumes:
- ./config/redis.conf:/redis/redis.conf
command: redis-server /redis/redis.conf --port 7005
network_mode: "service:redis-node-1"
redis-node-6:
container_name: redis-node-6
image: redis:7.2.3
environment:
TZ: Asia/Seoul
volumes:
- ./config/redis.conf:/redis/redis.conf
command: redis-server /redis/redis.conf --port 7006
network_mode: "service:redis-node-1"
redis-cluster-entry:
container_name: redis-cluster
image: redis:7.2.3
environment:
TZ: Asia/Seoul
command: redis-cli --cluster create localhost:7001 localhost:7002 localhost:7003 localhost:7004 localhost:7005 localhost:7006 --cluster-replicas 1 --cluster-yes
network_mode: "service:redis-node-1"
depends_on:
- redis-node-1
- redis-node-2
- redis-node-3
- redis-node-4
- redis-node-5
- redis-node-6
실행
docker-compose up -d
redis-cli 접속
- 아래는 7003 노드에 접속했는데, 아무 노드에 접속을 시도해도 됨
- 명령어 수행시 해당 데이터가 존재하는 노드로 자동으로 리다이렉트되기 때문
redis-cli -c -p 7003
명령어 실행
get aaa
get bbb
참고
반응형
'Development > Redis' 카테고리의 다른 글
[Redis] Sentinel (0) | 2020.12.30 |
---|---|
[Redis] Master-Slave Replication (0) | 2020.12.30 |
[Redis] 명령어 (0) | 2019.03.11 |
[Redis] 스프링 연동 (0) | 2019.03.10 |
[Redis] 설치 (0) | 2019.03.09 |