[Redis] 설정

배세훈·2022년 7월 27일
0

redis

목록 보기
2/2

1. redis 설정파일 위치

# yum으로 설치한 경우
vi /etc/redis.conf

# 직접 설치 한 경우
vi /etc/redis/6379.conf

2. Replication

  • Replication은 레디스의 데이터를 거의 실시간으로 다른 레디스 노드에 복사하는 작업입니다.
    따라서 서비스를 제공 중이던 레디스 노드(마스터)가 다운되더라도 데이터를 받은 레디스 노드(슬레이브)가 서비스를 계속 할 수 있습니다.
    실제 운영환경이라면 마스터-슬레이브로 구성하는 것이 권장되며, 마스터와 슬레이브는 물리적으로 다른 머신에 두어야 합니다.
    레디스는 비동기(asynchronous) 복제를 하며, 마스터는 슬레이브를 여러 개 둘 수 있고 슬레이브는 또 여러 슬레이브를 둘 수 있습니다.
    또한 마스터에 있는 대량의 슬레이브에 보내는 작업은 자식 프로세스가 처리하기 때문에 복제 중에도 마스터는 멈추지 않고 정상적으로 요청을 할 수 있습니다.

  • 마스터의 부하를 줄이기 위해서, persistence(AOF, RDB)기능을 슬레이브에서 수행하는 것도 좋은 방법입니다.
    하지만 서버가 리부트할 때마다 마스터를 자동 재시작하도록 설정했다면 데이터를 잃지 않기 위해서는 마스터에 persistence(AOF, RDB)기능을 사용해야 하는데, 그 이유는 아무리 슬레이브에 persistence(AOF, RDB) 기능을 사용한다고 해도 마스터가 자동 시작되면 마스터의 빈 데이터들이 슬레이브로 복제되므로 데이터가 모두 사라지기 때문입니다.

3. Replication 방식

전체 동기화(full synchronization)

  1. 마스터는 자식 프로세스를 시작해 백그라운드로 RDB 파일에 데이터를 저장합니다.
  2. 데이터를 저장하는 동안 마스터에 새로 들어온 명령들은 처리 후 복제버퍼에 저장됩니다.
  3. RDB 파일 저장이 완료되면, 마스터는 파일을 슬레이브에게 전송합니다.
  4. 슬레이브는 파일을 받아 디스크에 저장하고, 메모리에 로드합니다.
  5. 마스터는 복제버퍼에 저장된 명령을 슬레이브에게 전송합니다.

부분 동기화(partial resynchronization)

  • 마스터와 슬레이브는 각 서버의 run id와 replication offset을 가지고 있는데, 마스터와 슬레이브 간 네트워크가 끊어지게 되면, 마스터는 슬레이브에 전달할 데이터를 backlog-buffer에 저장했다가 다시 연결 되었을 때, run id와 offset을 비교해서 그 이후부터 동기화합니다.
    이를 부분 동기화(partial resynchronization) 이라고 합니다.
    만약, 네트워크가 끊어진 시간이 길어져서 마스터의 backlog-buffer가 넘치게 되면 다시 연결 때 전체 동기화하며 마스터나 슬레이브 중 한 쪽이 재시작 한 경우에도 전체 동기화를 합니다.

4. Redis.conf

1) replicaof

4. Redis.conf

1. replicaof

replicaof <masterip> <masterport>

  • 마스터-슬레이브 복제에서 마스터의 IP와 Port를 설정합니다.
  • 마스터 서버의 데이터를 실시간으로 슬레이브 서버로 복사합니다.
  • redis 4.x 이전버전은 slaveof 입니다.

2. replica-serve-stale-data

replica-serve-stale-data yes

  • 마스터 노드와의 연결이 끊겼을 경우 슬레이브 노드로 들어오는 명령에 어떻게 대처할지 설정합니다.
  • yes: 슬레이브 노드에서 읽거나 쓰기 명령을 모두 받고 처리해줍니다.
  • no: 슬레이브 노드로 들어오는 모든 명령에 에러상태로 되돌려줍니다.
  • redis 4.x 이전버전은 slave-serve-stale-data 입니다.

3. replica-read-only

replica-read-only yes

  • 슬레이브 서버에 클라이언트가 접속해서 데이터 write 명령을 수행하게 할지를 설정합니다.
  • default는 yes로 읽기(조회)만 가능합니다.
  • redis 4.x 이전버전은 slave-read-only 입니다.

4. repl-diskless-sync

repl-diskless-sync no

  • RDB 파일을 디스크에 쓰지 않고 직접 소켓으로 전송하는 여부를 설정합니다.
  • 네트워크 성능은 좋고 디스크 성능이 좋지 않을 경우 사용하도록 고안되었습니다.
  • 마스터에서 슬레이브로 데이터가 복제될 때 서버가 RDB 파일을 디스크에 생성해서 슬레이브 서버로 전송하지만 repl-diskless-sync를 yes로 하면 RDB 파일을 디스크에 쓰지 않고 직접 소켓으로 전송합니다.

5. repl-diskless-sync-delay

repl-diskless-sync-delay 5

  • 슬레이브 서버에서 동기화 요청 후 동기화를 진행하기 전의 지연 시간을 설정합니다.
  • default는 5초이며 슬레이브 서버가 동기화 요청 후 5초 후에 마스터 서버는 동기화를 시작합니다.

6. repl-ping-replica-period

repl-ping-replica-period 10

  • 슬레이브 노드에서는 주기적으로 마스터 노드에 ping 명령을 날려 마스터 노드와의 접속상태를 확인하는데, 그 주기(초)를 설정합니다.
  • redis 4.x 이전버전은 repl-ping-slave-period 입니다.

7. repl-timeout

repl-timeout 60

  • 마스터 서버와 슬레이브 서버간에 연결이 끊겼다고 인식하는 시간이며, 이는 repl-ping-replica-period로 설정된 값보다 커야합니다.

8. repl-disable-tcp-nodelay

repl-disable-tcp-nodelay no

  • 마스터와 슬레이브 간 전체 동기화가 수행될 경우 적용되는 설정입니다.
  • yes면 nodelay false를 적용하는 것으로 데이터를 모아서 큰 패킷으로 전송합니다.(여러 네트워크 장비가 있고 대역폭이 작고 원거리인 경우 유리합니다.)
  • no면 대역폭을 좀 더 사용하여 데이터를 작은 패킷으로 나누어서 전송합니다.

업로드중..

9. repl-backlog-size / repl-backlog-ttl

# backlog-buffer size
repl-backlog-size 1mb

# backlog-buffer free time
repl-backlog-ttl 3600
  • repl-backlog-size: 부분 동기화에 사용되는 backlog-buffer의 사이즈를 설정합니다.

  • repl-backlog-ttl: 마스터는 슬레이브와 연결 해제된 후 repll-backlog-ttl로 설정한 일정 시간이 지나면 백로그 메모리를 해제(free) 합니다.

  • 슬레이브는 백로그를 해제하지 않는데 이유는 나중에 마스터로 승격했을 때 다른 슬레이브와 부분 동기화를 하기 위해서입니다. 따라서 슬레이브는 항상 데이터를 백로그에 쌓아놓습니다.

10. replica-priority

replica-priority 100

  • 마스터 노드가 다운되었을 때 슬레이브가 여러 대 있으면 어느 서버가 마스터가 될지 우선순위를 설정합니다.
  • default는 100이고, 숫자가 적을 수록 우선순위가 높습니다.
  • 0은 특별한 값으로 마스터가 되지 않도록 하는 값입니다.
  • redis 4.x 이전버전은 replica-priority 입니다.

11. min-replicas-to-write / min-replicas-max-lag

min-replicas-to-write 3
min-replicas-max-lag 10
  • min-replica-to-write: 복제가 성공적으로 수행되어야 하는 최소한의 슬레이브 수를 설정합니다. 슬레이브가 설정보다 적으면 마스터는 쓰기 명령을 수행하지 못하고 에러를 리턴합니다.
  • min-replica-max-lag: 복제가 성공적으로 수행되어야하는 시간(초)를 설정합니다. 이 시간은 마스터가 슬레이브에 1초마다 보내는 replconf의 ack로 확인합니다.
  • 둘 중 하나만 0으로 설정해도 이 기능은 비활성화 됩니다.
  • redis 4.x 이전버전은 min-slaves-to-write / max-slaves-to-write 입니다.

12. replica-announce-ip / replica-announce-port

replica-announce-ip 5.5.5.5
replica-announce-port 1234
  • 슬레이브는 replica-announce-ip / replica-announce-port 를 사용해서 docker와 NAT를 지원합니다.
  • redis 4.x 이전버전은 slave-announce-ip / slave-announce-port 입니다.

https://www.happykoo.net/@happykoo/posts/51
https://www.happykoo.net/@happykoo/posts/53
https://www.happykoo.net/@happykoo/menus/51
https://www.happykoo.net/@happykoo/posts/54
https://www.happykoo.net/@happykoo/posts/55
https://www.happykoo.net/@happykoo/posts/58

https://proad.tistory.com/entry/Redis-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

profile
성장형 인간

0개의 댓글