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 node가 down 되게 되면 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 node가 down 되었음을 인지하고, 재연결 시도
... 시도...시도...시도..
>> 재연결 실패하자, slave(port7004) 가 master로 승격되어 클러스터 재구성
4. slave가 master로 승격 (되었음을 확인 할 수 있네요 )
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 |