Redis) 이것이 레디스다 16 - 레디스 튜닝 1 (기본)

레디스를 안정적으로 운영하려면 레디스 환경 설정과 운영체제 간의 관계를 이해해야 한다.
운영 환경에 따라서 적절한 설정값을 지정해야 하기 때문이다.

레디스 설정파일

설정파일은 레디스를 시작할 때 사용하는 redis 명령행의 인자로 지정된다.
그렇기 때문에 설정파일을 수정하고 반영하려면 레디스를 재기동 해야한다.
재기동 없이 설정을 변경하고 싶다면 config set 명령을 사용한다.
config set은 레디스 인스턴스가 실행되는 동안 유지되는데 config rewrite를 사용하면 config set을 통해 변경한 설정을 설정파일에도 적용시킬 수 있다.

redis.conf 의 데이터 크기 단위는 k, kb, m, mb, g, gb와 같이 표시하며 대소문자를 구분하지 않는다.

  • kb: 1024
  • k: 1000

기본 설정

  • port
    인스턴스가 사용할 서비스 포트 지정

  • bind

인스턴스가 사용할 네트워크 어댑터 지정

설정을 통해 특정 IP로의 요청만을 받는다.
bind 설정을 하지 않는다면 모든 네트워크로부터 수신되는 명령을 수신한다.

  • timeout (sec)

timeout 지정값 만큼 데이터의 송수신이 발생하지 않으면 해당 클라이언트의 연결을 끊는다.

  • loglevel

debug, verbose, notice, warning

  • logfile

로그가 저장되는 경로와 파일명을 지정한다.

스냅샷 설정

레디스는 데이터를 영구 저장하기 위해 dump.rdb 파일에 메모리 내용을 기록한다.

  • save

스냅샷 이벤트가 발생하는 간격을 지정한다.
스냅샷 이벤트가 발생하면 메모리에 저장된 데이터를 dump.rdb 파일에 저징한다.

1
2
# 300 초 동안 10개의 키가 변경되면 스냅샷 이벤트를 발생시킨다.
save 300 10
1
2
# 빈 문자열을 지정하면 스냅샷 이벤트가 발생하지 않는다.
save ""
  • stop-writes-on-bgsave-error

스냅샷 이벤트에 의해 dump.rdb 파일을 저장하는 도중 오류가 발생하면 레디스는 모든 쓰기 요청을 거부한다.
스냅샷 파일 생성 중 실패하더라도 쓰기 요청을 처리하고 싶다면 해당 설정을 no로 지정한다.
yes로 설정하면 즉시 스냅샷의 오류를 파악할 수 있기 때문에 상황별로 적절한 설정값을 사용하자.

  • rdbcompression

스냅샷 파일의 압축 여부를 설정한다.
압축을 사용하면 CPU 사용량이 늘어나지만 rdb 파일의 크기는 줄어든다.

  • rdbchecksum

스냅샷 파일을 저장할 때 파일의 정합성을 검증하기 위해 체크섬 사용 여부를 설정한다.
사용시 스냅샷 파일 생성/읽을 시 성능이 내려간다.

  • dir

레디스가 생성하는 파일의 기본 위치인 working directory를 지정한다.
기본값은 ./로 redis-server를 실행한 위치이다.

  • dbfilename

스냅샷 파일의 파일명을 지정

AOF 설정

최종 스냅샷이 저장된 이후 장애가 발생하면 그 사이의 데이터의 변경 내역을 잃어버릴 수 있다.
이러한 데이터 유실을 최소화하고 싶다면 AOF 설정을 사용하면 된다.
쓰기 명령어가 실행될 때마다 aof 파일에 명령과 데이터를 기록하여 데이터를 복원하는데 사용된다.

  • appendonly

AOF 기능 사용 여부 설정

  • appendfilename

aof 파일의 파일명 설정

  • appendfsync

fsync 함수는 출력 버퍼의 내용을 디스크에 즉시 기록하도록 강제하는 역할을 한다.
각 쓰기 명령어를 aof 파일에 기록할 때마다 fsync 함수를 호출하면 데이터를 잃어버리지 않지만 상대적으로 파일 기록 성능이 저하되어 레디스의 성능도 저하된다.

설정값

  • no: fsync 함수를 호출하지 않는다.

  • always: 각 명령어를 aof 파일에 기록한 후 항상 fsync 함수 호출

  • everysec: 매 초마다 fsync 함수 호출

  • no-appendfsync-on-rewrite

AOF나 스냅샷 생성을 위해 백그라운드 프로세스가 동작하면 리눅스 운영체제가 fsync 함수를 블록시킬 수 있다.
해당 설정값을 yes로 지정하면 백그라운드 프로세스가 동작하는 동안 appendfsync 설정값이 no인 것 처럼 동작한다.
데이터 유지가 중요하다면 no, 응답시간이 중요하다면 yes를 설정할 수 있을 것이다.

Share