2020. 10. 8. 23:30ㆍDatabase/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
'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 |