본문 바로가기

시스템/REDIS

[REDIS] Config 설정

반응형

기본 설정


bind 0.0.0.0

 - bind IP, default 127.0.0.1

 - 최대 16개 까지 지정가능

port 8301

 - bind port

 - default 6379

 

tcp-backlog 511

 - tcp half open시 저장할 backlog 값

 - 이 값은 sysctl의 syn_backlog, somaxconn값과 연관이 있음.

# redis config
tcp-backlog 1024

# sysctl
sysctl -w net.ipv4.tcp_max_syn_backlog=1024
sysctl -w net.core.somaxconn=1024

 - somaxconn = soket max connection 약어 

 - syn_backlog = tcp half open 시 syn+ack flag packet을 보내고 3-way handshaking 전까지 backlog에 저장
                     
클라이언트에서 ACK 응답이오면 비워지고 오지않으면 timeout 까지 보관
 - redis의 backlog 크기는 syn_backlog , somaxconn 설정값을 넘을 수 없음 

 - syn_backlog 또는 somaxconn = 128 이면 128 +1 = 129  -> 129 *2 = 258 -> 258  근사값 = 256

   즉 redis에서 약 256개 이상 backlog를 가져갈수 없음.

   redis에서는 tcp-backlog 511 이지만 syn_backlog ,somaxconn = 128 이면  256개 밖엔 처리 못함
 

  - syn_backlog ,somaxconn 값을 128 에서 256 으로 변경 할 경우 256 +1 = 257 --> 257 *2 = 514로 근사값 521 설정

 - 소캣당 약 80byte 소모하며 512일때 메모리사용량은 80Byte * 512 = 40MB

 

protected-mode

 - bind, requirepass 파라미터와 연관

 - protected-mode=yes and bind=<지정> => 지정한 bind IP로만 접속 가능

 - protected-mode=yes and bind=<지정X> => 127.0.0.1로만 접속 가능

 - protected-mode=no and bind=<지정> => 지정한 bind IP로만 접속 가능

 - protected-mode=no and bind=<지정X> => 모든 IP로 접속 가능

 

requirepass

 - 접속 패스워드 지정

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

 

timeout

 - client와의 keepalive idle timeout.

 - default 0으로 client에서 끊지 않는 이상 연결을 종료하지 않는다.

 

tcp-keepalive

 - timeout 0으로 설정 되어 있어도 tcp-keepalive 시간마다 연결체크를 하여 응답이 없으면 연결을 종료 한다.

 - 값을 0으로 설정하면 기능을 사용하지 않는다.

 

supervised

 - systemd, upstart redis 서버를 시작,종료 할 경우 사용

 - supervised <no|upstart|systemd|auto>

 - no로 할 경우 /etc/init.d/ 밑에 있는 스크립트로 시작할 수 있음.

 - systemd의 경우 아래 내용으로 시작 할 수 있음.

cat /usr/lib/systemd/system/redis-8301.service 
[Unit]
Description=Redis Standalone 8301
After=network.target

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/redis-server /etc/redis/8301.conf
ExecStop=/usr/local/bin/redis-cli -p 8301 shutdown
Restart=always
Type=notify

[Install]
WantedBy=multi-user.target

databases

 - 데이터베이스 여러개를 가질수 있음.

 - default 16

 - redis-cli 상에서 select <index> 로 데이터베이스 이동이 가능함.

 - 기본적으로 0으로 접속

 - 클러스터 모드에서는 데이터베이스가 1개만 존재.

 

 

 

AOF 관련 설정


appendonly

 - appendonly <yes|no>

 - yes :  AOF 기능을 사용. redis 서버 시작 시 AOF 파일을 읽어 들임.

 - no : AOF 기능을 사용하지 않음. redis 서버 시작 시 AOK 파일이 있어도 읽어 들이지 않음.

 

appendfilename 

 - aof 파일명을 설정 하며 path는 지정할수 없음.

 - path는 working directory에 기록됨

 

appendsync

 - aof에 기록하는 시점

 - appendsync <always|everysec|no>

 - always : 명령 실행 시 마다 AOF에 기록되어 데이터 유실 위험은 줄어 들지만 성능상의 단점이 있음.

 - everysec : 1초마다 AOF에 기록되어 데이터 유실 및 성능상의 단점을 보완함. default 값

 - no : OS에 의존(리눅스는 기본적으로 30초)하며 데이터 유실의 단점이 있음.

 

auto-aof-rewrite-percentage

 - 100% 일 경우 reids가 기동하고 aof파일을 읽어 들일때, 그때의 aof 파일 사이즈를 100%으로 보고 rewrite 수행

 - 만약 redis가 기동할때 AOF 파일 사이즈가 0이면 "auto-aof-rewrite-min-size"를 기준으로 rewrite를 수행.

 - 0으로 설정 하면 rewrite를 하지 않음.

auto-aof-rewrite-min-size

 - 64mb의 경우 aof 파일 사이즈가 64mb 이하일 경우 rewrite 수행하지 않음.

 - 빈번히 일어나는 rewrite를 방지

 

 

 

RDB 관련 설정


save

 - save 900 1 : 900초동안 1번이상 key 변경이 발생하면 저장

 - 중복 설정 가능하며 or 조건

 - replication에서 master, slave모두 save 옵션이 없으면 rdb로 저장하지 않는다.

 

stop-writes-on-bgsave-error 

 - <yes|no>

 - 저장하다가 실패 할 경우 쓰기요청을 거부

 - default yes

 - no 일 경우 실패하더라도 쓰기 요청을 포함한 모든 동작을 정상적으로 처리

 - 실패 했을때 info persistence 명령에서 rdb_last_bgsave_status 값이 err로 표출

 - 이 값은 save에만 해당되고 bgsave에는 해당하지 않는다.

 

rdbcompression 

 - <yes|no>

 - rdp 파일 압축

 - 압축률이 높지 않음.

 - default yes

 

rdbchecksum 

 - <yes|no>

 - crc checksum

 

dbfilename

 - rdb 파일명을 설정 하며 path는 지정할수 없음.

 - path는 working directory에 기록됨

 

 

Replication


 - redis replication은 slave -> master로 동기화 요청을 보내는 구조

 

slaveof [masterip] [master port]

 

slave-read-only [yes|no]

  • yes이면 슬레이브일때 read 만 처리
  • 마스터는 쓰기 슬레이브는 읽기 만 설정하는 식으로 역할을 나누어 운영하는 것이 좋음.

 

slave-serve-stale-data

  • 슬레이브 노드에서 마스터 노드에 대한 네트워크 연결이 끊어지거나, 마스터 노드의 전체 데이터를 복제 중일 때 슬레이브 노드로 들어오는 요청을 어떻게 처리 할지 결정

              yes : 슬레이브 노드에서 읽거나 쓰기 요청을 모두 처리 함.

              no : 에러 메세지를 전달 함

 

masterauth

  • 마스터 노드가 requirepass 설정에 의해서 패스워드로 보호되고 있을 때, 슬레이브 노드에서 설정 하며, 마스터 노드의 requirepass 설정에 지정된 패스워드를 설정

 

repl-ping-slave-perid [seconds] (기본값: 10)

  • Slave → Master로 지정된 시간마다 PING을 보내도록 설정

 

repl-timeout [seconds] (기본값 : 60)

  • 마스터와 슬레이브 간 연결이 끊어졌다고 인식하는 시간 이며, repl-ping-slave-period보다 값이 커야함

 

repl-diskless-sync [yes|no]

  • 마스터에서 디스크 쓰기 없이 슬레이브로 전송
  • 예를 들면 마스터의 디스크 IO가 많이 떨어지는 경우

 

repl-diskless-sync-delay [seconds]

  • 슬레이브가 마스터로 동기화 요청 시 n초 후부터 동기화 진행

 

repl-disable-tcp-nodelay [yes|no]

  • 마스터와 슬레이브간 전체동기화 진행시 사용
  • yes : 큰패킷으로 전송
  • no : 작은 패킷으로 나눠 전송

 

slave-priority

  • 마스터가 다운되었을때 슬레이브 여러대가 있으면 어느 서버가 마스터가 될지 우선순위
  • 숫자가 작을 수록 우선순위가 높음.
  • 0은 마스터가 되지 않도록 설정

 

info replication

127.0.0.1:8301> info replication
# Replication
role:slave
master_host:10.10.10.240
master_port:8300
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
# 부분동기화를 위한 offset 값
slave_repl_offset:3500
# 마스터가 다운되고 경과한 시간
master_link_down_since_seconds:415
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9c6461fb398bdd00cd653f51dfac1c1ad6707501
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3500
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3500

 

Memory 운영


Maxmemory : 메모리 사용량 제한

 - 32bit 환경에서는 초기값이 3GB로 설정되어 최대 3GB 메모리만 사용 가능

 - 64bit 환경에서는 초기값이 0으로 설정되어 메모리 사용량 제한이 없으며 운영체제의 가상메모리(스왑)까지 사용

 - 논리적으로 사용되고 있는 메모리의 크기가 maxmemory보다 커지는 경우 메모리 정책(Memory-policy)에 따라 아래 방식처럼 처리된다.

1.   메모리 정책이 설정되어 있지 않은 경우, 에러가 발생한다.

2.   메모리 정책이 설정되어 있는 경우, 값이 추가될 때마다 메모리 정책에 따라 데이터가 삭제된다.

Maxmemory-policy : 메모리 정책

 - Redis 서버는 4.0 버전부터 LRU(Least Recently Used: 가장 최근에 사용되지 않은 것) 알고리즘과 LFU(Least-Frequently-Used: 가장 적게 사용된 것) 알고리즘을 제공

1.   noeviction : 캐시를 지우지 않는 정책이다. 메모리가 maxmemory 이상을 사용하게 되면 error를 발생시킨다.

2.   allkey : 각 정책에 따라 모든 키를 대상으로 정리한다.

  allkeys-lru : LRU 알고리즘 기반으로 키를 삭제한다.

  allkey-random : 랜덤하게 키를 삭제한다.

  allkeys-lfu : LFU 알고리즘 기반으로 키를 삭제한다.

3.   volatile : 각 정책에 따라 EXPIRE SET에 있는 키들을 대상으로 정리한다.

  volatile-lru : LRU 알고리즘 기반으로 키를 삭제한다.

  volatile-random : 랜덤하게 키를 삭제한다.

  volatile-ttl : TTL이 짧은 순으로 삭제한다.

  volatile-lfu : LFU 알고리즘 기반으로 키를 삭제한다.

반응형