Redis Monitoring(mon.sh)


redisGate Enterprise Server에서는 레디스 서버 모니터링을 위해서 mon.sh를 제공합니다.
ent-7.4.6, ent-7.4.8 버전의 mon.sh와 이후 개선된 (ent-7.5.0 or ent-8.0.0) mon.sh를 소개합니다.


ent-8.0.3

1. mon.sh

헤더 정보

  • 레디스 서버 버전 정보: Server(8.0.3)
  • IP:port, sync_port 정보: 127.0.0.1:18504,sync_port:28504
  • process id: pid: 2679
  • 시작 시간: uptime: 45 sec
  • CPU 정보: CPU E3-1230 v6 @ 3.50GHz 8 Cores
  • OS 정보: CentOS Linux 7 (Core)
  • H/W 모델 정보: Dell Inc. PowerEdge R230
  • 메모리 정보: Mem: 7.75G, used: 2.80G, free: 1.05G, shared: 134M, buff/cache: 3.90G, avail: 5.54G
  • Swap 정보: Swap: 8.00G, used: 3.25G, free: 4.75G
  • Disk Redis home:/ size:230G, used:88.3G, avail:142G, used%:38%.
  • data:/data size:931G, used:367G, avail:564G, used%:39%

데이터

  • time: 15:12:35
  • keys: 0
  • cpu: 0.2%
  • mem(used memory): 1M
  • rss(rss memory): 5M(0%)
  • swap: 0B(0%) -> 메모리를 다 사용하면 swap 영역을 사용한다.
  • clients: 1 -> 접속한 클라이언트 수
  • commands: 2(0%) -> 초당 실행한 명령 수, 퍼센트는 redis.conf "benchmark-commands 100000"를 기준으로 한다.
  • input: 52B -> 일반 클라이언트로 부터 받은 명령(바이트)
  • output: 8K -> 일반 클라이언트로 리턴한 결과(바이트)
  • send: 0B -> 동기화중인 서버에 보낸 데이터(바이트)
  • recv: 0B -> 동기화중인 서버로 부터 받은 데이터(바이트)
  • child: N/A -> AOF Rewrite, 전체동기화일 경우
  • cpu: child process CPU 사용율
  • rss: child process rss 메모리 사용량
  • write: child process write 바이트(초)

ent-7.4.6

1. Disk to Disk

• repl-diskless-sync no
• repl-diskless-load disabled

• 1번 서버 mon.sh: RDB 생성, 파일 전송(SEND) 상태는 표시되지 않습니다.


• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)

• from, to 항목: 동기화 서버와 연결이 끊기면 '0'을 표시하고, 연결되면 '1'을 표시합니다.
• SEND, RECV는 표시되지 않습니다. ent748부터는 표시됩니다.



ent-7.4.8

1. Disk to Disk

• repl-diskless-sync no
• repl-diskless-load disabled

• 1번 서버 mon.sh: RDB 생성과 생성된 RDB 파일 전송(SEND)


• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)

• from, to 항목: 동기화 서버와 연결이 끊기면 '0'을 표시하고, 연결되면 '1'을 표시합니다.
• SEND, RECV가 표시되고, 진행률(%)도 표시됩니다.



ent-7.5.0, ent-8.0.0

이전 버전과 차이(개선)점

  • 반복되는 date, role을 제거했고, ip:port는 header로 옮겼습니다. header에 서버 메모리와 스왑을 표시했습니다.
  • 클라이언트로부터 받은 데이터량(input), 클라이언트로 내보낸 데이터량(oupput) 항목을 추가했고, from, to 항목은 동기화 서버 연결 여부(1/0)에서 동기화 서버와 주고 받는 데이터량(바이트)를 표시하는 것으로 변경했습니다.
  • rss, swap을 추가했고, child의 cpu와 rss를 추가했습니다.
  • 이전 버전은 'Disk to Disk' 동기화 방식만 지원했지만, ent750부터는 'Memory to Memroy' 방식을 지원하고, 이 방식을 기본(default)로 합니다.

1. Disk to Disk

• repl-diskless-sync no
• repl-diskless-load disabled

• 1번 서버 mon.sh: RDB 생성과 생성된 RDB 파일 전송(SEND)

• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)

항목 설명

  • Mem: 메모리 사용량을 나타낸다. top 명령의 내용과 같습니다.
  • Swap: 스왑영역 사용량을 나타낸다. top 명령의 내용과 같습니다.
  • IP:Port: 레디스 서버의 IP와 port를 나타냅니다. mon.sh 화면을 여러 개 띄웠을 때 'IP:Port'로 레디스 서버를 구분합니다.
  • Pid: 레디스 서버의 'process id'. top 명령 또는 레디스 로그를 같이 볼 때 pid로 서버를 확인합니다.
  • time: 시각(시:분:초) 표시
  • keys: 키 개수
  • cpu: 레디스 서버가 사용하는 CPU 사용률
  • mem: 레디스 서버가 요청한 메모리 량
  • rss(Resident Set Size): OS가 할당한 메모리 량
  • mem과 rss의 메모리 사용량은 다를 수 있습니다.
    Case1: 레디스 서버가 100바이트를 요청하면 OS는 1page(4KB)를 할당합니다. 이런 경우 rss가 큽니다.
    Case2: 레디스 서버가 버퍼용으로 100MB를 요청하면 OS는 우선 10MB를 할당하고 나머지는 가상영역에 할당합니다. 이런 경우 mem이 급니다.
  • swap: 스왑 사용량. 레디스 서버가 스왑을 사용하는 경우.
    Case1: 메모리가 모자랄 경우 스왑을 사용합니다. 이것은 Linux OS 'swappiness'와 관계있습니다.
    Case2: Avail 메모리가 충분하더라도 레디스 서버의 키(데이터키) 중 오랜동안 사용(참조)하지 않는 키가 있으면 해당 데이터를 스왑영역으로 옮기고 메모리를 확보합니다.   사용 가능한(avail) 메모리가 충분한데도 레디스 서버가 스왑영역을 사용하는 이유입니다.
  • clients: 현재 레디스 서버에 접속해있는 클라이언트 수
  • commands: 초당 명령 실행 수
  • input: 클라이언트로부터 받은 명령(데이터 량): 바이트(B/K/M/G로 표시)
  • output: 결과를 클라이언트로 보내는 데이터 량: 바이트(B/K/M/G로 표시)
  • from: 동기화 서버로 부터 받은 데이터 량: 바이트(B/K/M/G로 표시)
  • to: 동기화 서버로 보내는 데이터 량: 바이트(B/K/M/G로 표시)
  • child: 자식 프로세스 실행 시 표시: RDB/AOF.
    SEND/RECV/LOAD" 이것은 메인 프로세스가 실행한다. 원래는 이 항목이 자식 프로세스를 표시했는데, SEND/RECV/LOAD를 추가하면서 메인(부모) 프로세스의 작업도 표시하게 되었습니다.
    동기화 전달 방식이 Memory(socket)일 경우 'SEND'는 RDB(child) + SEND(parent) 입니다.
  • cpu: 자식 프로세스 CPU 사용률
  • rss: 자식 프로세스 메모리(rss) 사용량

• 1번 서버 RDB 파일 생성 중 process 상태


• 1번 서버 LOG


• 2번 서버 LOG

2. Memory to Disk

• repl-diskless-sync yes
• repl-diskless-load disabled

• 1번 서버 mon.sh: 메모리의 데이터를 바로 2번 서버로 전송(SEND)


• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)


• 1번 서버 RDB 파일 생성 중 process 상태


• 1번 서버 LOG


• 2번 서버 LOG

3. Memory to Memory: Socket

• repl-diskless-sync yes
• repl-diskless-load on-empty-db

• 1번 서버 mon.sh: 메모리의 데이터를 바로 2번 서버로 전송(SEND)


• 2번 서버 mon.sh: 데이터 받는 동시에 메모리에 적용(RECV)


• 1번 서버 RDB 파일 생성 중 process 상태


• 1번 서버 LOG


• 2번 서버 LOG

4. BGREWRITEAOF

• mon.sh

• AOF 파일 생성 중 process 상태


• LOG

5. BGSAVE

• mon.sh

• RDB 파일 생성 중 process 상태


• LOG


ent-7.4.8

데이터를 보내는 서버에서는 Diskless 동기화를 지원한다. (바로 전송 가능)
데이터를 받는 서버에서는 Diskless 동기화를 지원하지 않는다. (파일로 받아서 로드(적재))

1. Disk to Disk

• repl-diskless-sync no
• repl-diskless-load disabled

• 1번 서버 mon.sh: RDB 생성과 생성된 RDB 파일 전송(SEND)
실시간 동기화 시작: 마지막 줄에서 'from'이 '1'로 설정되었다(2번 서버 LOAD 완료 후).


• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)


• 1번 서버 RDB 파일 생성 중 process 상태


• 2번 서버 AOF 파일 생성 중 process 상태


• 1번 서버 LOG


• 2번 서버 LOG

2. Memory to Disk

• repl-diskless-sync yes
• repl-diskless-load disabled

• 1번 서버 mon.sh: 메모리의 데이터를 바로 2번 서버로 전송(표시는 RDB)


• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)


• 1번 서버 LOG


• 2번 서버 LOG

3. Memory to Memory

• repl-diskless-sync yes
• repl-diskless-load on-empty-db

• 1번 서버 mon.sh: 메모리의 데이터를 바로 2번 서버로 전송(표시는 RDB)


• 2번 서버 mon.sh: 데이터 받기(RECV)와 받은 데이터 메모리로 올리기(LOAD)


• 1번 서버 LOG


• 2번 서버 LOG


ent-7.4.8 -> ent-7.5.0 전체 데이터 동기화: 성공

◼️ 1번 서버(ent748:18504) -> 2번 서버(ent750:18505): 전체 데이터 동기화 테스트 -> 성공

◼️ 1번 서버(ent748:18504): 기본 설정으로 디스크를 사용한 동기화.
  • repl-diskless-sync no
  • repl-diskless-load disabled

◼️ 2번 서버(ent750:18505): 디스크를 사용하지 않는 동기화 설정(Memory(socket))
  • repl-diskless-sync yes
  • repl-diskless-load on-empty-db

◼️ 1번 서버(ent748:18504): mon.sh


◼️ 2번 서버(ent750:18505): mon.sh


• 1번 서버 LOG


• 2번 서버 LOG


Email 返事がかかってなれば、メールでお知らせします。