레디스 튜닝
레디스 튜닝으로 성능을 향상시키는 방법
1. 환경 설정 파일
레디스의 환경 설정하는 방법은 다음과 같다.
- 레디스 프로세스가 시작할 때 환경 설정 파일을 읽도록 한다. ⇒
redis.conf
파일 - 레디스의 명령을 사용하여 실시간으로 설정값을 반영한다. ⇒
config set
명령
기본으로 제공하는 redis.conf
설정 파일은 크게 다음으로 나뉘어진다.
- 기본 설정
- 영구 저장소 설정
- 복제 설정
- 보안 설정
- 제한 설정
- 루아 설정
- 고급 설정
1.1. 기본 설정
네트워크, 로그 및 프로세스와 관련된 설정값을 지정한다.
명령어 | 설명 | 기본값 |
---|---|---|
port | 인스턴스가 사용할 서비스 포트를 지정한다. | port 6379 |
bind | 인스턴스에 접속을 허용할 IP를 지정한다. | bind 127.0.0.1 -::1 |
timeout | 연결된 클라이언트의 idle 대기 시간을 초 단위로 설정한다. | timeout 0 |
loglevel | 로그의 레벨을 지정한다. | loglevel notice |
logfile | 로그가 저장되는 경로와 파일명을 지정한다. | logfile "" |
database | 레디스는 database 라는 이름의 논리적으로 분리된 데이터 저장공간을 제공한다. | database 16 |
1.2. 스냅샷 설정
레디스는 데이터를 영구 저장하기 위해 dump.rdb
파일에 메모리 내용을 기록한다.
명령어 | 설명 | 기본값 |
---|---|---|
save | 레디스의 스냅샷 이벤트가 발생하는 간격을 지정하는 설정 | save "" |
stop-writes-on-bgsave-error | 스냅샷 파일의 생성에 실패했을 경우의 처리 방법 설정 | stop-writes-on-bgsave-error yes |
rdbcompression | 레디스 스냅샷 파일을 저장할 때 파일의 압축 여부를 설정 | rdbcompression yes |
rdbchecksum | 레디스 스냅샷 파일의 체크섬의 사용 여부를 설정 | rdbchecksum yes |
dir | 레디스의 작업 디렉터리를 지정 | dir ./ |
dbfilename | 스냅샷 파일의 파일명을 지정하는 설정 | dump.rdb |
1.3. AOF 설정
데이터의 유실을 최소화하고 싶다면 AOF 설정을 사용하면 된다. aof 파일은 쓰기 명령어가 실행될 때마다 aof 파일에 명령과 데이터를 기록하여 장애에서 데이터를 복원하는 데 사용한다.
명령어 | 설명 | 기본값 |
---|---|---|
appendonly | AOF 기능의 사용 여부를 설정 | appendonly no |
appendfilename | aof 파일의 파일명을 지정 | appendfilename "appendonly.aof" |
appendfsync | AOF 데이터를 디스크에 저장하는 방식을 지정하는 설정 | appendfsync everysec |
1.4. 복제 설정
명령어 | 설명 | 기본값 |
---|---|---|
replicaof | 마스터 노드의 네트워크상의 위치 | |
masterauth | 마스터 노드에 지정된 패스워드 | |
replica-serve-stable-data | 슬레이브 노드에서 마스터 노드에 대한 네트워크 연결이 끊어졌거나 또는 마스터 노드의 전체 데이터를 복제 중일 때 슬레이브 노드의 동작 방법 | replica-serve-stable-data yes |
replica-read-only | 슬레이브 노드의 쓰기 명령 처리 정책을 지정한다. | replica-read-only yes |
1.5. 보안 설정
명령어 | 설명 | 기본값 |
---|---|---|
requirepass | 레디스 서버에 패스워드를 설정 | |
rename-command | 지정된 레디스 명령을 다른 이름으로 변경 |
1.6. 최댓값 제한 설정
명령어 | 설명 | 기본값 |
---|---|---|
maxclients | 레디스 인스턴스에 접속할 수 있는 클라이언트 수 (ulimit으로 파일 디스크립터 수 필수 확인) | maxclients 10000 |
maxmemory | 레디스 인스턴스가 데이터를 저장하기 위해 사용할 메모리의 크기 | maxmemory 0 |
maxmemory-policy | 레디스에 저장된 데이터의 크기가 maxmemory에 지정된 값보다 커졌을 때의 정책 | maxmemory-policy noeviction |
2. 레디스 스냅샷
레디스는 메모리에 저장된 모든 데이터를 디스크로 저장하며 이것을 스냅샷
이라고 부른다.스냅샷의 결과로 dump.rdb
파일이 생성되는데 이 파일을 사용하여 해당 시점의 데이터로 복원할 수 있다.스냅샷이 시작되면 fork
함수를 호출하여 자식 프로세스를 생성하고, 생성된 자식 프로세스가 메모리의 내용을 디스크로 저장한다.
스냅샷이 동작하는 동안에도 레디스는 정상적으로 데이터 처리 명령을 수행하지만, 클라이언트의 응답시간이 증가할 수도 있다. 만약 fork 함수가 호출되어 자식 프로세스가 종료되기 전에 모든 페이지가 변경된다면 레디스는 메모리를 최대 2배만큼 사용하게 된다.
즉, 스냅샷을 사용할 때는 자신의 서비스가 쓰기 위주의 서비스인지를 먼저 확인하여 메모리 사용 정책
을 정의해야 한다.
3. AOF(Append Only File)
AOF(Append Only File)
는 레디스의 데이터 영속화의 기능으로써, 레디스가 수신하는 모든 쓰기 명령을 aof 파일에 기록하여 데이터를 보관한다.
레디스 설정에 appendonly
설정을 yes
로 하고 레디스 인스턴스를 실행하여 aof 파일의 구조를 살펴보자.
먼저 레디스 설정 파일을 작성한다.
1
2
port 6300
appendonly yes
그 후 레디스 인스턴스를 실행한다.
1
$ redis-server master.conf
새로운 터미널 창을 열어서, 실행한 인스턴스에 접속한다. 그리고 새로운 키-값을 지정한다.
1
2
3
4
5
6
7
$ redis-cli -p 6300
127.0.0.1:6300> get temp
(nil)
127.0.0.1:6300> set temp 1
OK
127.0.0.1:6300> get temp
"1"
레디스 인스턴스를 실행한 위치에서 appendonly.aof
파일을 확인한다.
1
2
3
4
5
6
7
8
9
10
11
12
*2
$6
SELECT # 0번째 데이터베이스에 접속
$1
0
*3
$3
set # temp라는 키에 1 값을 저장
$4
temp
$1
1
- 레디스 명령어를 레디스 프로토콜 형식으로 저장한다.
- 레디스가 재시작할 때 다시 동일한 명령어를 실행하여 데이터의 정합성을 유지한다.
- 모든 명령어를 다시 실행하기 때문에 스냅샷에 비하여 데이터 로드 시간이 오래 걸린다.
4. 마치며
레디스를 사용할 때는 메모리 관한 설정에 유의해야 한다. 메모리 설정은 운영체제와 밀접한 관련이 있으므로, 메모리와 디스크에 대한 운영체제 설정을 최적화해야 한다.