Redis Server Process 프로세스

레디스 서버 교육 신청 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

레디스 서버 프로세스

프로세스 2개가 동시에 실행중인 경우

리눅스의 top 명령으로 프로세스를 보고 있으면, 분명 레디스 서버는 하나만 실행중인데, 레디스 프로세스 2개가 보일때가 있습니다.   이것은 스레드가 아니고 레디스 프로세스 2개가 동시에 실행중인 것입니다.
레디스 서버는 RDB 파일을 저장할때와 AOF 파일을 다시 쓸 때(rewrite) 자식 프로세스를 생성해서 작업합니다.
  • RDB 파일을 저장할때
    • BGSAVE 명령을 실행해서 RDB 파일을 저장할때
    • redis.conf 파일의 save option에 의해서 RDB 파일을 저장할때
    • SLAVEOF host port 명령을 실행해서 복제하려고 RDB 파일을 저장할때
    • redis.conf 파일의 slaveof 설정으로 슬레이브 노드의 요청에 의해 RDB 파일을 저장할때
  • AOF 파일을 저장할때
    • BGREWRITEAOF 명령을 실행해서 AOF 파일을 rewrite할때 저장할때
    • redis.conf 파일의 auto-aof-rewrite-percentage 옵션에 의해서 AOF 파일을 rewrite할때 저장할때

Child Process 확인

  • Child Process가 실행 중 일 때 ps 명령으로 확인할 수 있다.
  • 구분은 CMD와 NLWP개수(1개)로 확인할 수 있다. CMD에 세 가지가 표시된다.
    • redis-aof-rewrite
    • redis-rdb-bgsave
    • redis-rdb-to-slaves: replication 용으로 RDB 파일을 생성할 때

BGSAVE 명령을 실행해서 RDB 파일을 저장할때

  • redis-cli 에서 bgsave 명령을 실행한다.
  • RDB 파일 저장 시 서버 메시지: M은 부모 프로세스이고 C는 자식 프로세스이다.   이때는 2개의 프로세스가 동시에 동작한다.   Top 명령으로 보면 redis-server 프로세스가 2개 보인다.
  • 45928:M * Background saving started by pid 61975   자식 프로세스를 생성한다
    61975:C * DB saved on disk   자식 프로세스가 RDB파일 저장 완료
    61975:C * RDB: 0 MB of memory used by copy-on-write   저장중 부모 프로세스에서 데이터 번경이 없었다
    45928:M * Background saving terminated with success

redis.conf 파일의 save option에 의해서 RDB 파일을 저장할때

  • redis.conf save 설정
  • save 900 1
    save 300 10
    save 60 10000
  • RDB 파일 저장 시 서버 메시지: 메시지는 위와 같고 시작 시 어떤 save 조건에 의해서 시작했는지가 나온다.
  • 45928:M * 10 changes in 300 seconds. Saving...

SLAVEOF host port 명령을 실행해서 복제하려고 RDB 파일을 저장할때

  • 5002번 redis-cli 에서 slaveof 127.0.0.1 5001 명령을 실행한다.
  • RDB 파일 저장 시 서버 메시지
  • 45928:M * Slave 127.0.0.1:5002 asks for synchronization
    45928:M * Full resync requested by slave 127.0.0.1:5002
    45928:M * Starting BGSAVE for SYNC with target: disk
    45928:M * Background saving started by pid 62045   자식 프로세스 시작
    62045:C * DB saved on disk
    62045:C * RDB: 0 MB of memory used by copy-on-write
    45928:M * Background saving terminated with success
    45928:M * Synchronization with slave 127.0.0.1:5002 succeeded

redis.conf 파일의 slaveof 설정으로 슬레이브 노드의 요청에 의해 RDB 파일을 저장할때

  • 슬레이브 노드가 시작할때 슬레이브 노드에서 마스터 노드에 데이터를 요청하고 마스터 노드는 RDB 파일을 만들어서 전달한다.   서버에서 나오는 메시지는 위와 같다.
  • 슬레이브 노드와 diskless 방식으로 통신을 해도 자식 프로세스가 생성되는 것은 동일한다.
    Diskless 방식은 레디스 복제를 참조하세요.

BGREWRITEAOF 명령을 실행해서 AOF 파일을 rewrite할때 저장할때

  • 자식 프로세스를 생성해서 rewrite 한다. 다음은 aof rewrite 시 나오는 서버 메시지이다.
  • 3849:M * Background append only file rewriting started by pid 3909 자식 프로세스 시작
    3849:M * AOF rewrite child asks to stop sending diffs.
    3909:C * Parent agreed to stop sending diffs. Finalizing AOF...
    3909:C * Concatenating 32.41 MB of AOF diff received from parent.
    3909:C * SYNC append only file rewrite performed
    3909:C * AOF rewrite: 47 MB of memory used by copy-on-write
    3849:M * Background AOF rewrite terminated with success
    3849:M * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)
    3849:M * Background AOF rewrite finished successfully

redis.conf 파일의 auto-aof-rewrite-percentage 옵션에 의해서 AOF 파일을 rewrite할때 저장할때

  • redis.conf 파일의 auto-aof-rewrite-percentage 옵션을 100 으로 하면 aof 파일 크기가 100%씩 늘어날때마다 aof 파일을 다시 쓴다.   이때 자식 프로세스를 생성한다.
  • 위 메시지와 동일하고 첫번째 줄에 다음 내용이 추가된다.
  • 3849:M * Starting automatic rewriting of AOF on 100% growth

<< POSIX Thread Processes Threads Concept >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.