Sunday, October 9, 2016

Redis Cluster (레디스 클러스터) 설치 (CentOS 7.2.1511 64-bit)

설치 전 준비사항

  1.  최소 2개 이상의 서버 (또는 VM)에 CentOS 7 설치. 아래의 설명에 사용된 서버들 정보는 아래와 같습니다. 
    1. Server A: 192.168.2.105
    2. Server B: 192.168.3.105
    3. Server C:  192.168.3.102
  2.  Redis 3.0 이상 버전의 패키지를 인터넷에서 다운 받아서 설치. 참고로 Redis Cluster는 3.0 이상 버전부터 지원 가능합니다. 아래는 레디스 3.0.0을 다운 받아서 설치하는 명령어의 예이며 만약 더 최신 버전을 원하시면 http://download.redis.io/releases 페이지에 들어가셔서 최신 패키지 정보를 얻으셔서 다운 받으시면 됩니다. 
    1. mkdir build && cd build
      wget http://download.redis.io/releases/redis-3.0.0.tar.gz
      tar -xvfz redis-3.0.0.tar.gz
      cd redis-3.0.0/
  3.  아래의 패키지들을 yum을 이용해서 설치
    1.  yum install gem ruby ruby-devel ruby gems redis-stat rpm-build

설치 단계

  1. Redis Cluster용 설정파일 생성
    1.  기존의 설정파일인 ‘redis.conf’를 수정해서 사용해도 되나 우선 불필요한 설정들도 많고 Redis를 한 서버에서만 사용하게 되면 (클러스터 모드가 아닌) 다시 수정을 해야 하기 때문에 클러스터용 설정 파일을 새로 생성해서 사용하는게 좋습니다. (예를 들어 파일명은 ‘redis-cluster.conf’) 클러스터용 설정 파일의 예는 아래와 같습니다.
          port 6379
          cluster-enabled yes
          cluster-config-file nodes.conf
          cluster-node-timeout 5000
          append only yes
    2.  위의 설정파일을 이용해서 Redis Server 시작. 만약 클러스터 모드로 정상적으로 시작되었다면 서버 시작 후에 ‘Running in cluster mode’라는 글을 확인할 수 있습니다. 
      1. src/redis-server redis-cluster.conf
    3.  위의 두 사항을 클러스터에 포함될 다른 서버들에 반복해서 수행합니다. 
    4.  위의 과정을 거쳐 클러스터 모드로 시작된 Redis Server들을 아래의 명령어 실행을 통해 연결합니다. 참고로 이 과정은 하나의 서버에서만 수행하면 됩니다. 예를 들어 클러스터를 형성할 서버 A, B, C가 있다고 가정하면 A에서만 아래의 명령어를 실행하면 클러스터가 바로 형성되기 때문에 같은 작업을 B랑 C에서 반복적으로 할 필요가 없습니다. 
      1. src/redis-cli -p 6379 CLUSTER MEET 192.168.3.105 6379
      2. 참고로 위의 명령어는 서버 B의 IP가 192.168.3.105 이고 서버 A에서 클러스터를 형성한 경우의 예입니다.
    5.  ‘redis-trib.rb’라는 Redis 패키지에서 제공하는 유틸리티 프로그램을 이용해서 아래의 명령어를 실행해서 slot들을 할당합니다. 참고로  이 절차는 총 16384개의 슬롯을 오픈하고 오픈된 슬롯들을 클러스터 서버에 N 등분 해서 (여기서 N은 클러스터에 등록된 서버수) 할당하는 과정입니다. 
      1. src/redis-trib.rb create 192.168.2.105:6379 192.168.3.105:6379
    6. 만약 5번 실행 중 문제가 발생했다면 아래의 명령어들을 서버 A에서 실행해보세요. 
      1. for slot in {0..5400}; do redis-cli -h 192.168.2.105 -p 6379 CLUSTER ADDSLOTS $slot; done;
      2. for slot in {5400..10800}; do src/redis-cli -h 17.198.30.160 -p 6379 CLUSTER ADDSLOTS $slot; done;
      3. for slot in {10801..16383}; do src/redis-cli -h 17.198.30.157 -p 6379 CLUSTER ADDSLOTS $slot; done;
    7.  References
      1. http://redis.io/topics/cluster-tutorial
      2. https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-centos-7
      3. https://www.javacodegeeks.com/2015/09/redis-clustering.html
      4. https://ilyabylich.svbtle.com/redis-cluster-quick-overview

No comments:

Post a Comment