기본 설정
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 알고리즘 기반으로 키를 삭제한다.
'시스템 > REDIS' 카테고리의 다른 글
[REDIS] Sentinel + Haproxy + Keepalived를 이용한 Redis HA LoadBalance 구축 (1) (0) | 2022.05.11 |
---|---|
[REDIS] 메모리 단편화(memory fragmentation) 해소 (0) | 2022.05.11 |
[REDIS] AOF & RDB (0) | 2022.05.10 |
[REDIS] 기본 명령어 (0) | 2022.05.10 |
[REDIS] 설치 (0) | 2022.05.10 |