Redis Cluster on Windows

레디스 서버 교육 신청 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

Redis Cluster : Tporadowski 버전 레디스 5.0.14

준비

  • 레디스 서버 6대를 설치할 것입니다. 포트는 8000~8005을 사용합니다.
  • "C:\app\redis"에 8000~8005 폴더를 만듭니다.
  • 클러스터용 redis.conf 파일은 6000\redis.conf 파일을 복사해서 사용합니다.
    bind 127.0.0.1
    port 8000
    logfile "c:\\app\\redis\\8000\\redis.log"
    dir "c:\\app\\redis\\8000"
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-require-full-coverage no

서비스 등록하고 시작하기

  • 서비스 등록하기: [명령 프롬프트]에서 다음 명령을 입력합니다. 서비스 이름은 redis-cluster-8000,...,8005로 합니다.
  • 레디스 서버 시작하기: [명령 프롬프트]에서 다음 명령을 입력해서 시작하거나, [작업 관리자] [서비스]에서 해당 서비스를 우클릭해서 시작할 수 있습니다.

레디스 클러스터 구성하기

  • redis-cli로 구성(생성)합니다. 8000~8002번은 마스터로, 나머지는 복제로 구성합니다.
  • 클러스터 구성 상태를 조회합니다.
  • 8000번 마스터 로그
    [12352] 11:06:53.421 # Server initialized -> 레디스 서버 시작
    [12352] 11:08:21.784 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH -> 클러스터 생성
    [12352] 11:08:24.221 * Replica 127.0.0.1:8005 asks for synchronization -> 복제 요청 받음
    [12352] 11:08:26.760 # Cluster state changed: ok -> 클러스터 정상
  • 8005번 복제 로그
    [14444] 11:07:04.296 # Server initialized -> 레디스 서버 시작
    [14444] 11:08:21.801 # configEpoch set to 6 via CLUSTER SET-CONFIG-EPOCH -> 클러스터 생성
    [14444] 11:08:23.854 # Cluster state changed: ok -> 클러스터 정상
    [14444] 11:08:24.211 * Connecting to MASTER 127.0.0.1:8000 -> 복제 요청
    [14444] 11:08:24.577 * Background append only file rewriting started 3440 -> AOF rewirte 시작
    [14444] 11:08:24.881 * Background AOF rewrite finished successfully -> AOF rewirte 성공
  • 레디스 클러스터가 잘 구성되었습니다.

장애복구(failover) 테스트

  • 8000번 마스터: 다운
    [12352] 14:33:11.030 # User requested shutdown...
  • 8005번 복제 로그
    [14444] 14:33:11.033 # Connection with master lost. -> 8000 Master Down
    [14444] 14:33:17.127 * Marking node 4689bb094c4d76...403 as failing (quorum reached).
    [14444] 14:33:17.234 # Start of election delayed for 509 milliseconds (rank #0, offset 1918).
    [14444] 14:33:27.838 # Currently unable to failover: Failover attempt expired.
    [14444] 14:33:38.895 # Starting a failover election for epoch 8. -> 장애복구 시작
    [14444] 14:33:38.912 # Failover election won: I'm the new master.
    [14444] 14:33:38.912 # configEpoch set to 8 after successful failover -> 장애복구 성공(완료)
  • 8000번 마스터가 다운되고, 8005번 복제가 마스터로 승격되었습니다.
    장애복구(failover)가 잘 처리되었습니다.
  • 주의: 레디스 클러스터 내 레디스 서버(마스터/복제)가 다운되면 나머지 모든 레디스 서버 로그 파일에 아래와 같이 2초 마다 기록됩니다.
    8001번 마스터 로그
    [8692] 14:33:13.059 # Error writing to socket fd 9
    [8692] 14:33:15.098 # Error writing to socket fd 29
    [8692] 14:33:17.234 # Error writing to socket fd 12

8000번 서버 다시 시작

  • 다시 시작하면 마스터로 시작했다가 클러스터에 의해 복제로 변경됩니다.
    [25256] 14:37:53.511 # Server initialized -> 서버 시작
    [25256] 14:37:53.515 # Cluster state changed: ok -> 클러스터 상태 OK
    [25256] 14:37:54.583 * Connecting to MASTER 127.0.0.1:8005 -> Master -> Replica
    [25256] 14:37:54.723 * Background append only file rewriting started by pid 1976 -> AOF rewrite
    [25256] 14:37:55.044 * Background AOF rewrite finished successfully -> AOF rewrite 성공
  • ROLE 명령으로 확인
  • 8001번 Master Log, 다른 서버의 로그도 같다.
    [8692] 14:37:47.876 # Error writing to socket fd 9 -> 8000번 서버가 다운된 동안 발생한다.
    [8692] 14:37:50.012 # Error writing to socket fd 14
    [8692] 14:37:52.123 # Error writing to socket fd 12
    [8692] 14:37:53.764 * Clear FAIL state for node 4689bb094c4d7669d80340a1627e698addff3403: master without slots is reachable again.

원상복구: 8000번 서버를 마스터로 변경

  • 명령으로 8000번 서버를 마스터로 변경합니다.
  • 8000번 서버 Log
    [25256] 15:07:55.725 # Manual failover user request accepted. -> 명령 받음
    [25256] 15:07:55.772 # Starting a failover election for epoch 9. -> 장애복국 시작
    [25256] 15:07:55.779 # Failover election won: I'm the new master.
    [25256] 15:07:55.780 # configEpoch set to 9 after successful failover
    [25256] 15:07:55.954 * Replica 127.0.0.1:8005 asks for synchronization -> 동기화 요청 받음 (부분동기화로 완료)
  • 8000번 서버가 마스터로 변경되었을 확인합니다.
  • 8005번 서버 Log: 마스터에서 복제로 변경됩니다.
    [14444] 15:07:55.726 # Manual failover requested by replica 4689bb094c4d7669d80340a1627e698addff3403. -> 명령 전달 받음
    [14444] 15:07:55.950 * Connecting to MASTER 127.0.0.1:8000 -> 8000번 서버에 동기화 요청
    [14444] 15:07:55.956 * MASTER <-> REPLICA sync: Master accepted a Partial Resynchronization. -> 동기화 완료

정리

  • Tporadowski 버전 레디스 5.0.14: 레디스 클러스터 구성(생성) 시작, 장애복구 등 모두 문제없이 실행됩니다. 사용하는데 문제없습니다. 테스트: 2024년 2월

Redis Cluster : Microsoft 버전 레디스 3.0.5

Ruby 설치

  • redis-trib.rb를 이용하기 위해 아래와 같이 ruby를 설치하고 redis-trib.rb 파일을 받는다.
  • Ruby 파일을 받아 설치 -> rubyinstaller-2.2.4-x64.exe
    설치 후 ruby.exe가 있는 디렉토리를 path에 추가한다. 예) D:\Ruby22-x64\bin
  • Redis Ruby 라이브러리 설치
    > gem install redis
    에러가 발생할 경우 아래처럼 수정해서 실행하세요.
    D:\Ruby22-x64\bin>gem sources --remove https://rubygems.org/
    https://rubygems.org/ removed from sources
    D:\Ruby22-x64\bin>gem sources -a http://rubygems.org/
    https://rubygems.org is recommended for security over http://rubygems.org/
    Do you want to add this insecure source? [yn] y
    http://rubygems.org/ added to sources
    D:\Ruby22-x64\bin>gem install redis
    Fetching: redis-4.0.1.gem (100%)
    Successfully installed redis-4.0.1
    Parsing documentation for redis-4.0.1
    Installing ri documentation for redis-4.0.1
    Done installing documentation for redis after 1 seconds
    1 gem installed
  • redis-trib.rb 받기 -> redis-trib.rb
    스크립트를 redis-trib.rb로 저장. 예) D:\2_Redis_on_Windows\redis-trib.rb

redis-trib.rb를 이용한 클러스터 생성

  • redis-trib.rb 실행 -> 리눅스와 다르게 윈도우에서는 ruby로 시작한다.   redis-trib.rb의 사용방법은 리눅스와 동일하다.
    D:\2_Redis_on_Windows>ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.:7004 127.0.0.1:7005

Cluster 기능

  • Get/Set 같은 DB 저장/조회 명령, Pub/Sub 기능 그리고 클러스터에서 가장 중요한 Failover 관련 기능은 리눅스 버전과 동일하게 잘 동작한다.
  • 단, cluster mode로 실행했을 경우 redis.log에 아래와 같은 에러가 지속적으로 발생한다.   아래 로그는 1초 안에 발생한 것으로 몇 개월 지속되면 로크 파일이 수 기가바이트로 커지게 된다.
    [24720] 10 Jan 17:38:46.042 # WSA_IO_PENDING writing to socket fd 22
    [24720] 10 Jan 17:38:46.043 # clusterWriteDone written 2520 fd 22
    [24720] 10 Jan 17:38:46.211 # WSA_IO_PENDING writing to socket fd 23
    [24720] 10 Jan 17:38:46.211 # clusterWriteDone written 2520 fd 23
    [24720] 10 Jan 17:38:46.887 # WSA_IO_PENDING writing to socket fd 18
    [24720] 10 Jan 17:38:46.889 # clusterWriteDone written 2520 fd 18
  • Microsoft 버전 레디스 3.0.5를 사용할 경우 위 로그 발생 문제에 주의하시기 바랍니다.

<< Sentinel Cluster

Email 답글이 올라오면 이메일로 알려드리겠습니다.

혹시 처음이세요?
레디스게이트에는 레디스에 대한 많은 정보가 있습니다.
레디스 소개, 명령어, SQL, 클라이언트, 서버, 센티널, 클러스터 등이 있습니다.
혹시 필요한 정보를 찾기 어려우시면 redisgate@gmail.com로 메일 주세요.
제가 찾아서 알려드리겠습니다.
 
close
IP를 기반으로 보여집니다.