[Practice] Redis Cluster

2020. 10. 8. 23:30Database/Practice

1. Redis Cluster

1) Redis 설치

epel 저장소를 활성화하고 Redis를 다운받고 설치를 진행한다.

sudo yum -y update

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make
make install

Redis 설치 과정에서 필요한 패키지를 설치해준다.

yum -y install gcc

// CentOS 6 jemalloc 설치
yum -y install jemalloc

// CentOS 7 jemalloc 설치
yum -y install epel-release
yum -y install varnish

만약 설치를 해주었음에도 불구하고 Redis make 명령어 적용시 패키지 오류가 발생한다면 deps 파일에 들어가 각각의 패키지에 make 명령어를 적용해준뒤 다시 Redis를 설치한다.

cd redis-3.2.8/deps
make hiredis jemalloc linenoise geohash-int lua

2) 설정 파일 수정 및 실행

각 포트별로 폴더를 생성하고 기본 Redis 설정 파일을 해당 폴더에 복사한다.

mkdir cluster
cd cluster
mkdir 7001 7002 7003 7004 7005 7006
cd /root/redis-3.2.8/
cp redis.conf ./cluster/7001/7001.conf
cp redis.conf ./cluster/7002/7002.conf
cp redis.conf ./cluster/7003/7003.conf
cp redis.conf ./cluster/7004/7004.conf
cp redis.conf ./cluster/7005/7005.conf
cp redis.conf ./cluster/7006/7006.conf

7001, 7002, 7003 각각의 포트에 따른 설정파일을 모두 수정해준다.

// Cluster 포트 설정
port 7001

// Cluster 모드 사용
cluster-enable yes

// Cluster 상태를 기록하는 바이너리 파일로 상태가 변경될 때마다 상태를 기록 (수정 불가)
cluster-config-file nodes_7001.conf

// Redis 노드가 다운되었는지 판단하는 시간
cluster-node-timeout 5000

// 다운된 Master 노드 재시작시 가장 최근 데이터가 저장되어 있으므로 yes로 하는것을 권장
appendonly yes

// Working dir 설정 (nodes-conf 파일이 생성되는 위치)
dir /root/redis-3.2.8/cluster/7001/

이 후, 백그라운드로 실행해준다. 실행 시, nodes_*.conf 파일이 없기때문에 모든 포트에 새 ID를 할당해준다. 

redis-server /root/redis-3.2.8/cluster/7001/7001.conf &
redis-server /root/redis-3.2.8/cluster/7002/7002.conf &
redis-server /root/redis-3.2.8/cluster/7003/7003.conf &
redis-server /root/redis-3.2.8/cluster/7004/7004.conf &
redis-server /root/redis-3.2.8/cluster/7005/7005.conf &
redis-server /root/redis-3.2.8/cluster/7006/7006.conf &

설정 파일 수정 및 실행

※ 클러스터 생성 시 기본적으로 6개의 노드를 요구하기 때문에 6개의 포트 모두 구성해야한다.

3) Cluster 구성

Ruby 프로그램인 Redis Cluster 커맨트 라인 유틸리티를 이용하여 쉽게 수행하기 위해 Ruby 및 gem을 통한 Redis를 설치한다.

yum -y install ruby ruby-devel ruby-irb ruby-rdoc ruby-ri
yum -y install rubygems
gem update
gem update --system

// Redis 설치
gem install redis

gem으로 Redis를 설치할 경우, Ruby 2.3.0 버전을 요구하며 오류가 발생한다. 이럴 경우, 'ruby -v'로 버전 정보를 확인하고, 버전이 1.8.7이라면 기존에 설치된 Ruby를 삭제하고 2.3.4 버전으로 재설치해준다.

yum remove ruby
wget http://www.torutk.com/attachments/download/589 --content-disposition
yum install ruby-2.3.4-1.el6.x86_64.rpm 
ruby -v

4) Cluster 생성

모든 설치가 완료되면, 클러스터를 생성한다.

cd redis-3.2.8/src
./redis-trib.rb create --replicas 1 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 127.0.0.1:7006

6개의 노드를 생성시 3개의 Master와 3개의 Slave의 클러스트 구성 설정 여부에 대한 질문이 나온다. 해당 구성 설정을 허용하고 슬롯을 배정하도록 한다. 슬롯 배정이 완료되면, Master Slave가 1:1로 설정되었음을 확인할 수 있으며 0~16383까지의 슬롯이 3개의 Master에 자동적으로 배정되었음을 확인할 수 있다. Slave의 경우 슬롯이 배정되지 않는데, 만약 Master 노드가 비정상적으로 종료되면 Slave가 자동적으로 Master로 승격하여 해당 임무를 수행하게 된다.

클러스터 생성

5) Cluster 확인

클러스터의 노드 정보를 확인한다.

cd redis-3.8.2/src
./redis-cli -p 7001

127.0.0.1:7001> cluster nodes

클러스터 확인

6) Cluster 테스트

7001, 7002, 7003은 Master 노드이며 7004, 7005, 7006은 Slave 노드로 역할을 수행하고 있을 때, 7001번 포트를 강제 종료하면 Slave였던 7004번이 Master로 승격되는 것을 확인할 수 있다.

fuser -k -n tcp 7001

클러스터 테스트


[참고] binshuuuu.tistory.com/30

 

728x90

'Database > Practice' 카테고리의 다른 글

[Practice] AWS EC2 인스턴스 Redis 설치  (0) 2020.10.15
[Practice] Redis Sentinel  (0) 2020.10.08
[Practice] Redis Replication (Master-Slave)  (0) 2020.10.08
[Practice] 트리거  (0) 2020.09.30