Post

개발자를위한레디스 2장 - 레디스 시작하기

개발자를위한레디스 2장 - 레디스 시작하기

설치하기

소스파일을 통한 설치

  • 설치
    1
    2
    3
    4
    5
    
    wget http://download.redis.io/releases/redis-7.0.8.tar.gz
    tar xzf redis-7.0.8.tar.gz
    cd redis-7.0.8
    make
    make PREFIX=/home/centons/redis install
    
  • 실행
    1
    
    bin/redis-server redis.conf
    

centos7에 설치

책 p.44 참고

MacOS에 설치

  • 설치
    1
    
    brew install redis
    
  • 실행
    1
    
    brew services start redis
    

윈도우에 설치

책 p.47 참고

레디스 환경 구성

그 전에 레디스 프로세스는 모두 중단시킨후 환경구성을 진행합니다. 그리고 중요한 몇가지 설정을 알아야합니다.

Open files 확인

레디스의 기본 maxclients 설정값은 10000 (최대 클라이언트 개수)입니다.

레디스 프로세스 내부적으로 사용하기 위해 예약한 파일 디스크립터 수는 32개이므로, maxclients 값에 32를 더한 값보다 서버의 최대 파일디스크립터 수가 작으면 조정해야합니다.

따라서 레디스의 최대 클라이언트 수를 기본값인 10000으로 지정하고싶으면 서버의 파일 디스크립터 수를 최소 10032 이상으로 지정해야합니다.

현재 서버의 파일 디스크립터 수는 아래의 명령어로 확인 가능합니다.

1
ulimit -a | grep open

만약 늘리고 싶다면 etc/security/limits.conf에 아래와 같이 수정하면 됩니다.

1
2
*     hard      nofile      10000
*     soft      nofile      10000

THP 비활성화

리눅스는 메모리를 페이지 단위로 관리하며 기본 페이지는 4096KB로 고정입니다. 메모리 크기가 커질수록 페이지를 관리하는 테이블인 TLB 크기도 커져, 메모리를 사요할 때 오버헤드가 발생하는 이슈로 인해 페이지를 크게 만든 뒤 자동으로 관리하는 THP(Transparent Huge Page)기능이 도입되었습니다.

하지만 레디스와 같은 데이터베이스 어플리케이션에서는 이 기능을 사용할때 퍼포먼스가 떨어지고 레이턴시가 올라가는 현상때문에 사용하지 않는 것을 추천합니다.

  • 일시적 비활성화
    1
    
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    
  • 영구적 비활성화 : /etc/rc.loca에 아래 추가하여 부팅 중 자동으로 실행되도록 설정
    1
    2
    3
    
    if test -f //sys/kernel/mm/transparent_hugepage/enabled; then
      echo never > /sys/kernel/mm/transparent_hugepage/enabled
    fi
    
    1
    
    chmod +x /etc/rc.d/rc.local
    

vm.overcommit_memory = 1로 변경

레디스는 디스크에 파일을 저장할 때 fork()를 이용해 백그라운드 프로세스를 만드는데, 이때 COW(Copy On Write)라는 메커니즘이 동작합니다. 이 메커니즘은 부모 프로세스와 자식 프로레스가 동일한 메모리 페이지를 공유하다가 레디스의 데이터가 변경될 때마다 메모리 페이지를 복사하기 때문에 데이터 변경이 많이 발생하면 메모리 사용량이 빠르게 증가할 수 있습니다.

따라서 레디스 프로세스가 실행되는 도중 메모리를 순간적으로 초과해 할당해야하는 상황이 발생할 수 있으며 이를 위해 m.overcommit_memory = 1로 설정하는 것이 좋습니다. m.overcommit_memory는 기본적으로 0이기 때문에 필요한 메모리를 초과해 할당되는 것을 제한합니다. 1로 바꾸어 레드사가 백그라운드에서 데이터를 저장하는 과넝에서 성능 저하나 오류를 방지할 수 있게 설정해야합니다.

/etc/sysctl.conf에 다음과 같이 추가하면 영구적으로 설정 적용할 수 있습니다.

1
m.overcommit_memory = 1

재부팅 없이 바로 설정 적용하려면 아래의 커맨드를 입력합니다.

1
sysctl m.overcommit_memory = 1

somaxconn과 syn_backlog 설정 변경

레디스 설정파일에서 tcp-backlog는 레디스 인스턴스가 클라이언트와 통신할 때 사용하는 tcp-backlog 큐의 크기를 지정합니다.

tcp-backlog값은 서버의 comaxconn(socket max connection)과 syn_backlog값보다 클수 없습니다.

기본 tcp-backlog 값은 511이므로, 서버 설정이 최소 이 값보다 크도록 설정해야 합니다. 다음의 명령어로 현재 설정 값을 확인 가능합니다.

1
2
3
4
5
sysctl -a | grep syn_backlog
net.ipv4.tcp_max_syn_backlog = 128

sysctl -a | grep somaxconn
net.core.somaxconn = 128

/etc/sysctl.conf에 다음과 같이 추가하면 영구적으로 설정 적용할 수 있습니다.

1
2
net.ipv4.tcp_max_syn_backlog = 1024
net.core.somaxconn = 1024

재부팅 없이 바로 설정 적용하려면 아래의 커맨드를 입력합니다.

1
2
sysctl net.ipv4.tcp_max_syn_backlog = 1024
sysctl net.core.somaxconn = 1024

레디스 설정 파일(redis.conf)

아래의 예시값은 default로 설정해놓았습니다.

1
2
3
4
5
6
port: 6379 # port
bind: 127.0.0.1-::1 # 접근을 허용하는 ip
protected-mode: yes # yes일경우 패스워드 설정해야만 redis에 접근할 수 있음.
requirepass / masterauth : 없음 # requirepass: 서버에 접속하기위한 패스워드. masterauth: 복제 구조를 사용할 때 필요
daemonize: no # redis프로세스를 데몬으로 실행시키려면 yes
dir: ./ # 워킹 디렉토리.

레디스 실행 및 종료

실행

1
bin/redis-server redis.conf

종료

1
bin/redis-cli shutdown

레디스 접속하기

redis cli를 환경변수에 등록하기 접근하면 된다.

환경변수 등록

1
export PATH=$PATH:/home/centos/redis/bin

접속

1
redis-cli -h <ip> -p <port> -a <password>

접속 후 확인

1
2
127.0.0.1:6379 > ping
pong
This post is licensed under CC BY 4.0 by the author.