본문 바로가기

OS/LINUX

CentOS (6.8ver) - redis cluster 구성 (master-slave & cluster)

Redis Cluster 를 구성하게 되어서 작업을 하게 되었는데, 사용하는 서버가 CentOS 6.8 버전인지라 


CentOS 7처럼에서는 간단하게 수행될 거 같은 부분들이 조금 복잡하게 구성할 수 밖에없었네요.


제가 투자한 시간들을 통해 다른분들이 수월하길 바라며 작성해봅니다 ^^;

( 제가 작성한 한글 문서를 긁어서 포스팅하는거라 조금 지저분할 수 도 있겠네요 ) 



CentOS(6.8ver) _ redis Cluster 구성

- 장애 복구 및 성능 향상을 위해 사용하는 경우이며, 마스터 노드만 있을 경우에 1노드가 Down 되면,

남은 실행 가능 노드 끼리 서비스를 지속적으로 실행하며, 마스터-슬레이브 구조일 경우에 한 마스터 노드가 Down 되면,

해당 마스터의 Slave 노드가 마스터로 승격되어 서비스를 수행하다가, 마스터 노드가 복구되었을 때, 다시 Slave로 돌아가게 된다.

> Redis 3.x Version 이상에서만 클러스터 기능을 제공하므로, Version Check 필수 ( redis-server --version )

또한, 인터넷 망이 연결된 상태에서 진행되어야만 한다. web 파일들을 불러와 설치해야하기 때문.

그리고, 클러스터를 구성하기 위해서는 적어도 세 개의 마스터 노드가 존재해야 클러스터 구성이 가능




1. Cluster 구성

 

1.1. 기본세팅

- yum update

 

sudo yum -y update

 

>> yum update 실행

 

1.2. EPEL 저장소 활성화

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -Uvh epel-release-6*.rpm

 

1.3. Redis 설치

 

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

 

>> 압축을 푼 후 원하는 장소에 설치 ( 원하는 장소에서 압축 풀어도 됨 )

 

1-2-1. Make 컴파일 오류 해결방안

a. gcc가 없을 때 오류

make[1]: Entering directory `/usr/share/redis/src'

CC adlist.o

/bin/sh: cc: command not found

make[1]: *** [adlist.o] 오류 127

make[1]: Leaving directory `/usr/share/redis/src'

make: *** [all] 오류 2

>> yum -y install gcc

b. jemalloc이 없을 때 오류

make[1]: Entering directory `/usr/share/redis/src'

CC adlist.o

In file included from adlist.c:34:

zmalloc.h:50:31: error: jemalloc/jemalloc.h: 그런 파일이나 디렉터리가 없습니다

zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

make[1]: *** [adlist.o] 오류 1

make[1]: Leaving directory `/usr/share/redis/src'

make: *** [all] 오류 2

>> yum -y install jemalloc

yum -y install epel-release

yum -y install varnish

< 없는 것만 설치 >

 

1.3. redis.conf 파일 수정 ( ctrl + c -> /문자열/ 검색으로 수정 )

먼저, cluster 구성에 들어가는 포트 dir를 만들어줍니다

> conf 파일은 클러스터 모드일 때 각 노드의 정보를 보관하는 파일로, 기록은 Redis-server가 한다.

 

mkdir cluster (폴더이름은 중요하지 않습니다. 분류하기위함.)

cd ../cluster/

mkdir 7001, 7002, 7003, ...

cp ../redis.conf ../cluster/7001/7001.conf ... (포트만큼 만들어 똑같이)

 

 

7001.conf 내용 수정 사항 ( 다른 conf들도 변경해준다 )

 

port 6379 -> port 7001 (임의 포트)

 

> 클러스트(redis) 포트 설정

 

#cluster-enabled yes -> cluster-enabled yes

 

> 클러스트 모드로 시작. no이면 standalone 모드.

 

#cluster-config-file nodes.conf -> cluster-config-file nodes_7001.conf

 

> 클러스터 상태를 기록하는 바이너리 파일로, 상태가 변경될때마다 상태를 기록. 수정불가.

 

cluster-node-timeout 15000 -> cluster-node-timeout 5000

 

> 레디스 노드가 다운되었는지 판단하는 시간. (millisecond 단위)

 

appendonly no -> appendonly yes

 

> 다운되었던 마스터 노드 재시작시 가장최근 데이터가 저장되어 있으므로 , yes 설정이하는 것을 권장

 

dir/path/7000/ -> ../cluster/7001/ ...

 

> working directory 설정 < nodes-conf 파일이 생성되는 위치 >

 

 

1.4. cluster redis 실행

 

../redis-server ../cluster/7001/7001.conf &

../redis-server ../cluster/7001/7002.conf &

../redis-server ../cluster/7001/7003.conf &

 ...


nodes.conf 파일이없기 때문에 모든 노드(port)에 새 ID 할당 id 할당.

 

 

 

1.5. 클러스터 구성

1.5.1 gem을 통해서 redis 설치 ( Ruby 설치 및 Gem을 통한 Redis 설치 )

> Ruby 프로그램인 Redis Cluster 커맨드 라인 유틸리티를 이용하여 쉽게 수행하기 위함.

 

yum install ruby ruby-devel ruby-irb ruby-rdoc ruby-ri

yum install rubygems

gem update

gem update --system

gem install redis

 

 

 

1.5.2 클러스터 구성하기

 

 

 

../path/src/redis-trib.rb create --replicas 1 [ip]:[port] ...

>> redis-trib.rb 파일은 설치된 redis 폴더에 src 폴더안에 있으며, 링크를 걸어 사용

Create 명령을 통해 새로운 클러스터를 만듭니다.



>> 6개의 노드를 create하게 되면 기본 구성 속성이 3마스터와 3슬레이브의 클러스트

구성이 설정되어있습니다. 따라서, 해당 6노드를 3마스터-3슬레이브를 할것이냐에 대한 질문을 하게되며,

yes입력시 설정되있는데로 구성하고, 슬롯을 배정하게 됩니다.

 

 

 

Master - slave 1 : 1로 설정되었음을 확인할 수 있으며, 0~16383까지의 슬롯이 3-마스터에 자동적으로 배정되었음을 확인할 수 있습니다. slave의 경우에는 슬롯이 배정되지 않는데, 만약 master nodedown 되게 되면 slave가 자동적으로 master로 승격하여 해당 임무를 수행하게 됩니다.

그리고 다시 master node가 복귀하게되면, 승격했던 slave는 다시 slave로 내려오는 방식입니다.

 

 

 

1.5.3 cluster nodes들의 정보확인



 

1.6.1. 클러스트 Test 1


 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.6.2. 클러스트 Test 2

 

 1. 현재 클러스터 상태 ( 7000,1,2 master 상태, 3,4,5 slave )

 


2. 7001 (master node) 포트 강제종료


3. master nodedown 되었음을 인지하고, 재연결 시도


... 시도...시도...시도..


>> 재연결 실패하자, slave(port7004) master로 승격되어 클러스터 재구성

 

4. slavemaster로 승격 (되었음을 확인 할 수 있네요 )


 

 

5. 7001포트 재연결

> (7001포트) 재연결시 master node가 다시 master 자리로 복귀하게되고, master로 승격했던 7004(slave)는 다시 slave로 돌아가고, 재동작함을 확인할 수 있습니다.

 

 

* 참고 https://redis.io/topics/cluster-tutorial

>> 서버 설정 정리 참고 : 

http://moss.tistory.com/entry/Redis-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%A0%95-%EC%A0%95%EB%A6%AC#bind







너저분한 포스팅이지만 누군가에게 도움이 되었으면 좋겠네요 ^^


물론 저도 다시보고 기억나는 용도로 사용하겠지만 













'OS > LINUX' 카테고리의 다른 글

Linux _ 시스템 터미널 명령어  (0) 2017.04.28
Linux _ 버전 체크  (0) 2017.04.28
Linux 특정포트 Kill  (0) 2017.04.24
Linux _ vmwar 해상도 변경 _CentOS  (0) 2017.04.21
Linux vi편집기 _ 검색기능  (0) 2017.04.20