#1. Redis 란?
레디스(Redis)는 "Remote Dictionary Server"의 약자로, Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비 관계형 데이터베이스 관리 시스템(DBMS)이다. 2009년 살바토르 산필리포(Salvatore Sanfilippo)가 처음 개발 후, 2015년부터 Redis Labs가 지원하고 있다. 모든 데이터를 메모리에 로드해 처리하는 메모리 기반 DBMS이다.db-engines.com 기준 가장 인기있는 Key-Value Stores이다.
Cassandra, HBase 와 같이 NoSQL로 분류되기도 하고, memcached와 같이 In Memory 설루션으로 분류되기도 한다. 성능이 memcached에 버금가면서 다양한 데이터 구조(String, List, Set, Sorted Set, Hashes)를 지원한다는 장점이 있다.
Message Queue, Shared Memory, Remote Dictionary 용도로 사용될 수 있다. 다양한 회사 서비스(라인, 네이버, 삼성전자, Stackoverflow, 인스타그램 등)에서 널리 사용되고 있어 나름의 안정성 및 성능이 검증된 솔루션으로 인정받고 있다.
- 장점
- 다양한 데이터 구조를 지원한다. (String, List, Set, Sorted Set, Hashes) - 메모리 + 디스크 활용을 통한 영속적인 데이터 보존 가능. - 서버 측 복제 및 샤딩 지원. - 다양한 API를 지원. |
- 단점
- 메모리 사용량이 많다. 기본적으로 memcached 대비 데이터 용량을 지원하기 때문이기도 하지만, 동작 방식에서 오는 메모리 사용량이 많다. - 대규모 트래픽에 대한 응답속도 불안정. 대규모의 트래픽 발생에 따라 많은양의 데이터가 Update 되면 메모리 할당 방식 차이에 따른 메모리 파편화 및 응답속도 저하가 발생된다 (memcached 대비), 다만 응답속도 저하는 극단적인 환경에서 발생한다고 하며 대규모 서비스에서도 Redis를 많이 도입하는 것을 보면 일반적인 상황에서는 문제가 없을 것으로 판단된다. |
#2. 사전 작업
- Memory 설정
메모리 사용량이 허용량을 초과할 경우, overcommit을 처리하는 방식 결정하는 값을 "항상"으로 변경한다. 기본 값은 "0"이다.
0 : 커널 기본값, Heuristic 하게 Overcommit을 허용
(Page Cache + Swap Memory + Slab Reclaimable 값이 요청한 메모리 수 보다 클 경우 허용)
1 : 항상 Overcommit을 허용
2 : 제한적 Overcommit 허용
$ sudo sysctl vm.overcommit_memory=1 $ sudo echo "vm.overcommit_memory=1" >> /etc/sysctl.conf |
적용이 잘 됐는지 확인해 보자.
$ sudo sysctl -a | grep vm.overcommit sysctl: reading key "net.ipv6.conf.all.stable_secret" sysctl: reading key "net.ipv6.conf.default.stable_secret" sysctl: reading key "net.ipv6.conf.enp2s0.stable_secret" sysctl: reading key "net.ipv6.conf.lo.stable_secret" vm.overcommit_kbytes = 0 vm.overcommit_memory = 1 vm.overcommit_ratio = 50 |
설정하지 않으면 Redis 실행 시 아래와 같은 경고가 표시된다.
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. |
To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or |
run the command 'sysctl vm.overcommit_memory=1' for this to take effect. |
- TCP Backlog 설정
서버 소켓에 Accept를 대기하는 소켓 개수 파라미터를 변경해 준다. 기본 Accept limit은 128이다. 1024로 변경해 준다. (최대 65535)
$ sudo sysctl -w net.core.somaxconn=1024 $ sudo echo "net.core.somaxconn=1024" >> /etc/sysctl.conf |
잘 적용됐는지 확인
$ sudo sysctl -a | grep somaxconn net.core.somaxconn = 1024 |
이 역시 변경하지 않으면 Redis 실행 시 경고가 표시된다.
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn |
is set to the lower value of 128. |
- THP 설정
THP(Transparent Huge Pages) 기능이 Enable 되어 있는 경우 Redis에서는 이를 Disable 시킬 것을 권장한다. 재부팅 시 설정을 변경하기 위해 /etc/rc.local 에도 명령어를 추가해 준다.
# echo never > /sys/kernel/mm/transparent_hugepage/enabled # vi /etc/rc.local echo never > /sys/kernel/mm/transparent_hugepage/enabled # <- rc.local 파일에 추가 |
적용 확인은 아래 명령어를 실행해서, AnonHugePages : 0 이면 정상이다.
$ cat /proc/meminfo | grep AnonHugePages AnonHugePages: 0 kB |
이 역시도 Disable 처리하지 않으면 아래와 같은 경고가 발생된다.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage |
issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, |
and add it to your /etc/rc. |
#3. 다운로드 및 설치
Redis 최신 버전 설치하기
redis : A persistent key-value database
- EPEL 및 YUM Utilities 패키지 설치
yum install -y epel-release yum-utils
$ yum install -y epel-release yum-utils |
- remi 저장소 설치
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm |
- remi 저장소를 활성화
yum-config-manager --enable remi
$ yum-config-manager --enable remi |
- 설치전 redis 버전 확인
yum info redis | egrep 'Name|Arch|Version'
$ yum info redis | egrep 'Name|Arch|Version' Name : redis Arch : x86_64 Version : 6.2.6 |
- redis 설치
yum install -y redis
$ yum install -y redis |
- redis 버전
redis-cli --version
$ redis-cli --version redis-cli 6.2.6 |
- redis 서비스를 시작하고 부팅 시 자동으로 시작하도록 활성화
systemctl --now enable redis
$ systemctl --now enable redis |
이로서 캐시 서버가 설치 되었다.
'DataBase > Redis' 카테고리의 다른 글
[Redis] redis 설치 및 사용법 정리 (0) | 2023.02.13 |
---|---|
[Redis/AWS] redis 외부 접속 허용 설정 (0) | 2023.02.10 |