Redis 설치 정리

1. Redis ?
레디스 와 항상 같이 다니는? 단어가 있는데 바로 Memcached 이다. 둘은 어떤 관계길래 붙어다녀?
역사로 보면 Memcached 프로젝트가 먼저 시작되었으며, 사용된 곳 또한 많다.
헌데 왠 Redis? 레디스는 Memcached의 단점들을 보완하면서 최근들어 가장 많이 사용되고있는 InMemory Cache 솔루션이다.

기능상 둘의 공통점은 거의 90%이상이라고 봐도 무방하다.
그럼 Memcached 와 Redis의 차이는 무엇일까?

– 처리속도
M : 당연히 데이터가 메모리에만 저장되므로 빠르다
R : 메모리 + Disk에 저장된다. 그러나 속도면에서 Memchaed와 큰차이가 없다.

– 데이터 저장
M : 메모리에만 데이터가 저장되므로 장비가 Fault나거나 프로세스가 죽으면 데이터가 사라진다.
R : 프로세스가 죽거나 장비가 Shutdown 되더라도 Data의 복구가 가능하다.

– 메모리 재사용
M : 만료가 되지 않았더라도 더이상 데이터를 넣을 메모리가 없으면 LRU( Least Recently Used ) 알고리즘에 의해 데이터가 사라진다.
R : 저장소 메모리 재사용 하지 않는다. 명시적으로만 데이터를 제거할 수 있다.

– 저장 타입
M : 문자열만 지원
R : 문자열 , Set , Sorted Set , Hash , List 등의 다양한 Data Type을 지원한다.

2. 레디스를 언제 사용하면 되나?
빠른 응답을 원할경우 ( 캐쉬를 사용해야되는 경우 )
원자단위의 연산이 필요한경우
트랜젝션이 필요한경우
Publish/Subscribe 가 필요한경우
캐쉬이면서 지속성(Persistence)이 필요한경우

3. 사용 예
Job Queue
Session Store
Real time ranking
Local Address book
Cached List

4. Redis는 어떻게 운영하면되나?
Redis 운영방법에는 크게 3가지로 구분됩니다.
1. Standalone
가장 쉽게 접근할수있으며 별다른 설정없이 바로 사용 할 수 있습니다.

redis 최신 안정화버젼 다운로드
1. 소스파일 다운로드
wget http://download.redis.io/redis-stable.tar.gz ( 2013/11/19 현재 2.6.16 )

2. 압축 해제
tar -zxvf redis-stable.tar.gz

3. 빌드
cd redis-stable
make

4. 디렉토리 이동 및 심볼릭 링크 작성
cd ..
mv redis-stable /usr/local
cd /usr/local
ln -s /usr/local/redis-stable redis

5. 실행
./redis-server

2. Replication
만약 Redis를 사용하시려는 곳이 Read 부하가 심하다면 이방법을 사용하시는것을 권장해 드립니다.
설정방법
1. Standalone과 같은 방법으로 설치
2. 설정 파일 세팅
/usr/localredis/redis.conf 파일 수정
마스터 설정파일
daemonize yes -> background daemon으로 프로세스 생성
loglevel verbose -> 로그레벨 수정
logfile /data/logs/redis.log ->로그파일 경로 설정
# save 900 1 -> 스냅샷 이벤트 간격설정 900초동안 최소 1개의키가 변경되면 스냅샷 이벤트를 발생한다.
save

슬래이브 설정 파일
slaveof 1.1.1.1 6379 -> 마스터 ip와 포트
slave-read-only no -> 슬레이브 노드의 쓰기 명령 정책 no로 하면 write가 가능함.

3. 실행
– master redis 실행
redis-server redis.conf
– slave redis 실행
redis-server redis.conf

3. Sentinel
최종적으로 서비스 할경우는 이 방법으로 사용하시는게 좋을 겁니다.
1. Replication과 같은 방법으로 설치 및 설정
2. 설정 파일 세팅
/usr/local/redis/sentinel.conf 수정
센티넬 설정 파일
sentinel monitor mymaster 127.0.0.1 6379 2 -> sentinel monitor
만약 3대의 물리적 서버 구성으로 이루어져있다고 가정한다. 마스터가 다운되면 vote갯수로 표시된 노드에서 master가 다운되었다고 투표되면 마지막 싱크된 슬래이브가 마스터로 전환된다.
sentinel down-after-milliseconds mymaster 5000 -> sentinel down-after-milliseconds
레디스가 다운된 걸 감지한 후 switch가 일어나기까지 걸리는 시간 설정. 일반적으로 3~5초정도가 적당함.

4. 실행
– Replication 실행과 동일
– Sentinel 데몬 실행
redis-sentinel sentinel.conf

5. Sentinel 정상 작동확인 방법
redis-cli -h 1.1.1.1 -p 26379 -> redis-cli -h -p

redis 1.1.1.1:26379> psubscribe *
1) “psubscribe”
2) “*”
3) (integer) 1
1) “pmessage”
2) “*”
3) “+sdown”
4) “master mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+odown”
4) “master mymaster 172.16.7.26 6379 #quorum 1/1”
1) “pmessage”
2) “*”
3) “+failover-triggered”
4) “master mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+failover-state-wait-start”
4) “master mymaster 172.16.7.26 6379 #starting in 12001 milliseconds”
1) “pmessage”
2) “*”
3) “+failover-state-select-slave”
4) “master mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+selected-slave”
4) “slave 172.16.7.28:6379 172.16.7.28 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+failover-state-send-slaveof-noone”
4) “slave 172.16.7.28:6379 172.16.7.28 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+failover-state-wait-promotion”
4) “slave 172.16.7.28:6379 172.16.7.28 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+promoted-slave”
4) “slave 172.16.7.28:6379 172.16.7.28 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+failover-state-reconf-slaves”
4) “master mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+slave-reconf-sent”
4) “slave 172.16.7.27:6379 172.16.7.27 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+slave-reconf-inprog”
4) “slave 172.16.7.27:6379 172.16.7.27 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+slave-reconf-done”
4) “slave 172.16.7.27:6379 172.16.7.27 6379 @ mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+failover-end”
4) “master mymaster 172.16.7.26 6379”
1) “pmessage”
2) “*”
3) “+switch-master”
4) “mymaster 172.16.7.26 6379 172.16.7.28 6379”
1) “pmessage”
2) “*”
3) “+slave”
4) “slave 172.16.7.27:6379 172.16.7.27 6379 @ mymaster 172.16.7.28 6379”
1) “pmessage”
2) “*”
3) “+sdown”
4) “slave 172.16.7.26:6379 172.16.7.26 6379 @ mymaster 172.16.7.28 6379”

참고 :

현재 sentinel 을 사용한다면 2.6.x대 안정화 버전을 사용하기 바랍니다. 2.8.x 대버전은 sentinel 버그가 아직 해결안된 상태입니다.

This entry was posted in NoSQL&MySQL. Bookmark the permalink.

Leave a comment