반응형

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 - 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

+ Recent posts