[Redis] redis.conf 설정 파일

2020. 10. 6. 12:43Database/Redis

1. 기본 설정

항목 설명
daemonize [yes/no] Redis 서버를 데몬으로 실행하려면 yes로 변경해주어야 한다. no로 설정되었을 경우, Redis 서버 실행 시 서버 메시지가 화면에 표시되고 리눅스 프롬프트가 떨어지지 않는 Foreground로 실행된다. 서버를 Background로 실행하기 위해서는 yes로 설정해주는 것이 좋다.
pidfile /var/run/redis.pid
Redis 서버 의 PID가 해당 경로에 텍스트 파일 형태로 저장된다.

kill -9 'cat /var/run/redis.pid' 명령어로 Redis 서버를 강제 종료를 시킬 수 있으며, 그 이외에도 사고 상황 테스트로 다양하게 이용할 수 있다.

Redis 서버를 여러개 띄울 경우 경로에서 redis.pid란 파일 이름 부분을 적당하게 수정해주어야 한다.
port 6379
Redis 서버는 기본적으로 6379 포트를 쓰도록 되어 있다. (변경 가능)
bind 127.0.0.1
샘플상태에서 위 줄은 주석처리 되어 있을 것이다. 랜카드가 하나인 환경이라면 그냥 주석 상태로 두면 된다. 랜카드가 2개 이상인 경우 어느 랜카드(IP)에서 서버가 대기할지 설정해주면 된다.
timeout 0 클라이언트에서 서버에 접속할 때 timeout 값으로 초 단위다. 
loglevel verbose debug > verbose > notice > warning 순으로 로그의 정보의 단계를 설정할 수 있다. (debug 가 가장많은 정보 남김)
logfile stdout 로그파일의 위치를 나타낸다. 기본값인 stdout 로 할 경우 표준출력으로 로그를 남기기되는데, 만약 이 설정에서 데몬 모드로 서버 실행시 /dev/null 로 출력되어 로그는 어디에도 안 남게된다.

stdout 를 적당한 파일 경로로 수정해서 로그가 파일에 남도록 하는게 좋다. 다만 이 설정만으로는 로그 파일을 일자별로 못 만들고 하나의 파일로만 관리할 수 있다.
databases 16 Redis는 SELECT 명령으로 DB를 변경할 수 있는데, 이때 DB는 문자로 된 이름을 가지는게 아닌 0 부터 시작하는 index 값을 가지게 된다. 이 DB를 최대 몇 개 가질수 있는지 설정해주는 부분이다. 16 이라면 0 ~ 15 까지의 DB 를 가지게 된다. (기본 SELECT 0)

 

 

 

2. RDB 지속성 설정

항목 설명
save 60 10000 Redis 서버가 메모리의 내용을 rdb 파일로 자동으로 덤프 하는 시점과 관련된 설정이다. 60초동안 10000건 이상의 키가 변경되었다면 메모리상의 데이터를 모두 rdb 파일로 덤프하라는 뜻이다.

save <초> <변경된키수> 는 여러 줄로 설정가능하다. 이를 이용 자동 rdb 덤프 정책을 설정해줄수 있다. 설정을 인할 경우 서버는 rdb 파일로 덤프를 자동으로 수행하지 않는다. (클라이언트에서 BGSAVE 나 SAVE 명령을 내려야 덤프를 뜨게 됨)

rdb 파일로 덤프하는 것은 메모리의 내용을 통째로 파일로 복사하는 것으로 순간적인 부하를 주게 되므로 위 설정을 조절해주어야 한다.

테스트나 개발시 덤프 파일이 빨리 써지는 것을 보려면 값을 줄이면(save 10 1) 되고, 실제 서비스에서는 너무 자주 동기화가 일어나지 않도록 설정해주어야 한다.
rdbcompression [yes/no]
rdb 파일로 덤프할 때 텍스트 부분을 압축하여 rdb 파일의 사이즈를 줄인다. 사용하지 않을 경우 no로 설정해주면 된다.

압축을 하는 만큼 약간의 부하가 걸리지만, 장비의 성능에 따라 허용할 만한 수준으로 사용하는것이 좋다. 시스템 부하가 걱정된다면 yes 로 쓰다가 부하가 걸린다면 no로 변경하는것이 좋다.
dbfilename dumb.rdb 덤프할 때 rdb 파일의 경로이다. Redis 서버를 실행할 때 이 부분이 설정되어 있다면, 이 파일에 있는 내용을 메모리에 올리게 된다.
dir ./ dbfilename로 설정해준 rdb 파일이 저장되는 디렉토리이다. 기본값은 서버를 실행한 경로에 rdb 파일이 남게 되어 있는데, 가능하면 rdb 파일을 저장하는 디렉토리를 따로 생성하여 절대 경로로 작성해주는게 좋다.

※ 캐시 용도로만 사용한다면 RDB 파일을 저장하는 옵션인 save는 ""로 설정하는 것을 권장한다. 만약 설정을 켜야할경우 stop-write-on-bgsave-error 옵션을 꺼주어야 한다. 이 옵션이 yes일 경우 RDB 파일 저장에 실패하면 바로 Redis에 write할 수 없게된다.

 

 

 

3. Replication 설정

Master 노드에서의 설정은 방화벽 설정 관련이 아니라면, 보안 영역인 requirepass 비밀번호 설정 이외에는 특별하게 적용할 부분은 없다. 반면 Slave 노드에서 설정해야하는 부분이 있다.

항목 설명
slaveof Master 노드의 IP 와 포트 번호를 적어주면 된다.
masterauth [Master 비밀번호] Master 노드의 설정파일에서 requirepass 부분이 설정되어 있는 경우, Slave 노드의 설정파일에선 이 부분에 Master 노드의 비밀번호를 적어줘야 한다.
slave-serve-stale-data [yes/no] Master 노드와의 연결이 끊겼을 경우 Slave 노드로 들어오는 명령에 어떻게 대처할지 설정해주는 부분이다. 만약 yes라면 Slave 노드에서 읽기나 쓰기 명령을 모두 받고 처리해주고, no일 경우 Slave 노드로 들어오는 모든 명령에 에러 상태를 되돌려준다. (읽기 쓰기 모두 처리 안해줌)
repl-ping-slave-period 10 Slave 노드에서는 주기적으로 Master 노드에 ping 명령을 날려 Master 노드와의 접속상태를 확인하는데 그 주기(초단위)를 설정하는 부분이다. (기본값은 10초)
repl-timeout 60 이 값은 대량의 I/O 와 data 에 대한 timeout 을 설정해주는 부분이다. repl-ping-slave-period 값 보다 크게 설정해주어야 한다. (기본값은 60초)

 

 

 

4. 보안 설정

항목 설명
requirepass [비밀번호] 비밀번호를 설정해주는 부분이다. 사용하지 않으려면 주석 처리 하면된다. 비밀번호가 설정된 경우 Redis 서버에 접속한 후에 AUTH 명령어으로 인증을 받아야 사용이 가능하다.
rename-command CONFIG "" Redis 명령을 다른 이름으로 바꿔주거나 사용을 못하도록 설정하는 부분이다. (SET 명령을 SETTER로 변경할 경우 rename-command SET "SETTER" 명령을 적용) 

※ 보안성을 높이기 위해서는 requirepass 설정과 protected-mode를 허용하고 bind에 Redis에 접속해야하는 서버의 IP를 모두 추가해주는게 좋다.

 

 

 

5. 제한 설정

항목 설명
maxclients 128 Redis 서버에서 클라이언트의 접속을 동시에 몇 개 까지 받아들일지 설정하는 부분이다. 0으로 설정할 경우 무제한으로 접속을 받아들이며, 설정된 수를 초과할 경우 에러를 반환해준다.
maxmemory 서버에서 사용할 물리적 메모리 양을 결정한다. 이 메모리양에는 실제 데이터는 물론 각종 설정 상태를 기억하는 부분까지 포함된다.

이 값이 0일 경우 SWAP 메모리를 사용할 때까지 메모리는 계속 ㅓ질 수 있다. Persistence 기능을 사용한다거나 Replica 노드를 가질 경우에는 fork()가 발생할 수 있기에 주의해야한다. 권장하는 값은 가용 메모리의 60 - 70%에서 설정한다.
maxmemory-policy volatile-lru maxmemory에서 설정한 메모리를 초과된 후 데이터를 쓰려고 할 때의 정책 설정 옵션이다.
maxmemory-samples 3 LRU 알고리즘이나 만기시각으로 키를 선택할 때, 정확하게 조건에 맞는 키를 선택하는게 아닌 효율을 위해 몇 개의 키들을 선택해, 그 중 최근에 덜 사용한 키를 선택하는 방식을 사용한다. 이때 효율을 위해 선택한 키의 수를 설정해주는 부분이다.

maxmemory 정책 옵션

항목 설명
volatile-lru 기본값으로, 만기시각이 설정된 키들 중에서 LRU 알고리즘에 의해 키를 선택하여 삭제하는 옵션이다. 즉, 가장 최근에 사용하지 않은 값을 삭제하는 정책이다. 캐시용도로 사용할 경우 필요없는 값을 삭제하고 새로운 입력을 받아들이는 것이 좋기에 해당 옵션을 권장한다.
allkeys-lru LRU 알고리즘에 의해 키를 선택하여 삭제하는 옵션이다.
volatile-random 만기시각이 설정된 키들 중에서 랜덤 키를 선택하여 삭제하는 옵션이다.
allkeys-random 랜덤하게 키를 선택하여 삭제하는 옵션이다.
volatile-ttl 만기시각이 설정된 키들 중에서 만기시각이 가장 가까운 키를 선택하여 삭제하는 옵션이다.
noeviction 어떤 키도 삭제하지 않고, error on write operations를 돌려주는 옵션이다. 즉, 메모리가 가득 찰 경우 더이상 새로운 입력을 받지 않는 정책이다.

※ LRU(Least Recently Used) 알고리즘은 최근에 가장 적게 사용한 메모리 공간을 비워버리고 활용하는 Oracle 메모리 관리 방법이다.

 

 

 

6. AOF 지속성 설정

RDB 지속성 설정과는 달리, AOF 지속성 설정은 파일 write와 메모리 read를 따로 설정할 수 없다.

항목 설명
appendonly [yes/no] AOF 모드를 쓸지 여부를 설정한다.
appendfilename /usr/local/redis/dump/master_appendonly.aof AOF 파일의 경로 설정 부분이다. RDB 설정과는 달리, 경로와 파일명을 따로 쓰지 않는다.
appendfsync everysec AOF 파일에 쓰는 주기를 결정하는 설정이다. 주기는 매 명령마다 파일에 쓰는 always (잦은 I/O로 시스템에 부하), 매 초마다 파일에 쓰는 everysec (기본값), 파일에 쓸 내용들을 OS의 출력버퍼에 넣어 파일에 쓰는 시점을 OS에 맡기는 옵션 3가지가 있다.
no-appendfsync-on-rewrite [yes/no] Redis 서버의 동작 중 디스크에 큰 파일을 쓰는 작업에는 Log rewritng 과 bgsave가 있다. apendfsync 옵션으로 always 나 everysec 를 사용중인 상태에서 "Log rewritng" 이나 "bgsave" 를 하게 되면 서로 디스크 I/O 에 방해가 될 수 있게 된다. 이를 방지하는 옵션으로, yes로 할 경우 Log rewritng이나 bgsave을 하는 중에는 AOF 파일에 쓰기를 하지 않게 된다.

지연 문제가 발생하지 않으면 기본값인 no, 문제가 생기면 yes를 사용하도록 권장한다. yes로 할 경우 최악의 시나리오일때 30초 이상의 변경내용을 잃어버릴 수 있다. (보통 사고가 발생해도 AOF 지속성 사용시 1초 미만의 변경내용을 잃는다)
auto-aof-rewrite-percentage 100 Log rewriting이 발생했을 때, AOF 파일 크기에 비해 현재 AOF 파일 크기가 설정해준 값보다 커야 Log rewriting이 일어난다.

최소한 AOF 파일의 크기가 auto-aof-rewrite-min-size에 설정해준 값보다는 큰게 우선 조건이다. Log rewritng을 사용하지 않으려면 이 값을 0으로 설정하면 된다.
auto-aof-rewrite-min-size 64mb Log rewriting이 일어나기 위한 AOF 파일의 최소 크기이다.

※ 캐시용으로 사용할 경우 AOF appendonly를 꺼주는게 좋다.

※ appendonly한 AOF 파일은 rewrite를 하지 않으면 계속 늘어나기 때문에 auto-aof-rewrite-percentage는 100으로 설정하여 주기적으로 rewrite될 수 있도록 해야한다.

 

 

 

7. Slow Log, Virtual Memory 설정

1) Slow Log

slowlog-log-slower-than 10000

slowlog-max-len 128

2) Virtual Memory 

vm-enabled no

vm-max-memory 0

vm-page-size 32

vm-pages 134217728

vm-max-threads 4

set-max-intset-entries 512

 

 

 

8. Advanced Config 설정

String을 제외한 4개의 데이터형은 폼하고 있는 요소의 개수나, 가장 긴 요소의 길이에 따라 인코딩 방식이 달라진다.

항목 설명
hash-max-zipmap-entries 512 Hash에 포함된 필드의 종류가 설정한 값보다 크면 Hash Table 혹은 Zip Map 으로 인코딩된다.
hash-max-zipmap-value 64 Hash에 포함된 필드의 값중 가장 긴 값의 길이가 설정한 값보다 크면 Hash Table 혹은 Zip Map 으로 인코딩된다.
list-max-ziplist-entries 512 List에 포함된 요소의 개수가 설정한 값보다 크면 Linked List 혹은 Zip List로 인코딩된다.
list-max-ziplist-value 64 List에 포함된 요소중 가장 긴 요소의 길이가 설정한 값보다 크면 Linked List 혹은 Zip List로 인코딩된다.
set-max-intset-entries 512 Set에 포함된 요소의 개수가 설정한 값보다 크거나 정수가 아닌 요소가 하나라도 포함되어 있다면 Hash Table 혹은 Int Set으로 인코딩된다.
zset-max-ziplist-entries 128 Sorted Set에 포함된 요소의 개수가 설정한 값보다 크면 Skip List 혹은 Zip List로 인코딩된다.
zset-max-ziplist-value 64 Sorted Set에 포함된 요소중 가장 긴 요소의 길이가 설정한 값보다 크면 Skip List 혹은 Zip List인코딩된다.
activerehashing yes Hash Table의 Rehashing을 돕기위해 CPU 시간 100 밀리초 마다 1 밀리초를 사용하도록 설정하는 옵션이다.

 

 

 

9. Include 설정

설정파일을 여러 조각의 파일로 나누어 쓸 경우 Include를 사용한다.

항목 설명
include /path/to/local.conf 포함시킬 설정 파일의 경로이다.

[참고] kerocat.tistory.com/1

[참고] medium.com/garimoo/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%A0%88%EB%94%94%EC%8A%A4-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-04-17256c55493d

728x90

'Database > Redis' 카테고리의 다른 글

[Redis] 서버, 연결 명령어  (0) 2020.10.06
[Redis] 키 명령어  (0) 2020.10.06
[Redis] 실습용 Redis 서버 설치  (0) 2020.10.06
[Redis] Expire, Persistence, Pub/Sub Model, Replication  (0) 2020.10.05