소개
이 문서에서는 CPS(Cisco Policy Suite)에서 MongoPrimaryDB Fragmentation 경고를 해결하는 절차에 대해 설명합니다.
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
참고: CPS CLI에 대한 루트 액세스 권한이 있어야 합니다.
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- CPS 20.2
- MongoDB v3.6.17
- UCS(통합 컴퓨팅 시스템)-B
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
CPS는 Sessionmgr VM(가상 컴퓨터)에서 실행되는 모노 프로세스가 기본 DataBase 구조를 구성하는 MongoDB를 사용합니다.
문서가 이동하거나 제거되면 구멍이 생깁니다. MongoDB는 가능한 경우 새 문서에 이러한 구멍을 다시 사용하려고 하지만 시간이 지남에 따라 그 안에 문서가 들어갈 수 없기 때문에 다시 사용할 수 없는 많은 구멍을 느리고 꾸준히 가지고 있습니다. 이러한 효과를 단편화라고 하며 운영 체제(OS)를 포함하여 메모리를 할당하는 모든 시스템에서 공통적으로 나타납니다.
단편화의 효과는 공간을 낭비하는 것이다. MongoDB는 메모리 매핑 파일을 사용하므로 디스크의 모든 조각화는 RAM의 조각화에서도 반영됩니다. 그러면 RAM에 맞는 '작업 세트'가 적게 생성되고 디스크가 더 많이 스왑됩니다.
CPS는 Grafana를 사용하여 MongoDB 수준 조각화를 모니터링하는 KPI를 지원하며, MongoDB 조각 백분율이 지정된 값을 초과하면 SNMP(Simple Network Management Protocol) 경보를 생성합니다.
이 /etc/collectd.d/dbMonitorList.cfg
sessionmgr 가상 컴퓨터에 있는 파일에는 데이터베이스 목록 및 각 조각화 임계값 백분율 값이 들어 있습니다. 기본적으로 프래그먼트화 임계값은 40%입니다. 기본 프래그먼트화 임계값은 필요에 따라 변경할 수 있습니다.
session_cache, sk_cache, diameter 및 SPR(Subscriber Profile Repository) 데이터베이스에 대한 단편화 통계는 다음 명령을 사용하여 확인할 수 있습니다.
[root@installer ~]# diagnostics.sh --get_frag
CPS Diagnostics HA Multi-Node Environment
---------------------------
Ping check for qns03 Adding to IGNORED_HOSTS...[FAIL]
|----------------------------------------------------------------------------------------------------------------------------------------|
| Mongo:v3.6.17 DATABASE LEVEL FRAGMENTATION STATUS INFORMATION Date : 2022-09-17 07:19:29 |
| SET TYPE : HA [MEMBER_ROLE : PRIMARY] |
|----------------------------------------------------------------------------------------------------------------------------------------|
| setname dbName storageSize(MB) datasize(MB) indexSize(MB) fileSize(MB) derivedFS(MB) frag% |
|----------------------------------------------------------------------------------------------------------------------------------------|
| ADMIN:set06 |
| Status via sessionmgr01:27721 |
| set06 diameter 9.56 0.04 0.05 64.00 0 NoFrag |
|----------------------------------------------------------------------------------------------------------------------------------------|
| BALANCE:set02 |
| Status via sessionmgr01:27718 |
| set02 balance_mgmt db not found - - - - - - |
|----------------------------------------------------------------------------------------------------------------------------------------|
| SESSION:set01 |
| Status via sessionmgr01:27717 |
| set01 session_cache 0.02 0.00 0.02 16.00 0 NoFrag |
|----------------------------------------------------------------------------------------------------------------------------------------|
| SESSION:set01 |
| Status via sessionmgr01:27717 |
| set01 sk_cache 0.02 0.00 0.01 16.00 0 NoFrag |
|----------------------------------------------------------------------------------------------------------------------------------------|
| SPR:set04 |
| Status via sessionmgr01:27720 |
| set04 spr 0.04 0.00 0.13 64.00 0 NoFrag |
|----------------------------------------------------------------------------------------------------------------------------------------|
[root@installer ~]#
문제
복제본 세트에 대한 기본 멤버의 조각화 비율이 구성된 임계값 조각화 값을 초과하면 이 경보가 생성됩니다. 임계값을 구성하지 않으면 프래그먼트화 백분율이 기본값(40%)을 위반할 경우 경보가 발생합니다.
샘플 "MongoPrimaryDB 조각화가 임계값을 초과했습니다." 알림:
id=7100,values={sub_id=7107, event_host=sessionmgr01, status=down, msg=MongoPrimaryDB fragmentation exceeded the threshold value, CURR_FRAG = 40%, THRESHOLD = 40% at sessionmgr01:27717 for session_cac
MongoPrimaryDB 조각화 경고를 확인하는 절차
조각화 비율을 줄이려면 경보가 생성될 때 데이터베이스를 축소합니다. 데이터베이스가 축소되면(조각화 백분율이 감소함) 명확한 경보가 전송됩니다.
이 절차는 제공된 샘플에서 MongoPrimaryDB 프래그먼트화 알림을 해결하는 것입니다.
1단계. 클러스터 관리자 또는 pcrfclient에서 이 명령을 실행하여 복제본 세트의 기본 및 보조 멤버 상태를 확인합니다.
#diagnostics.sh --get_r
|----------------------------------------------------------------------------------------------------------------------------------------|
|SESSION:set01a|
|Status via sessionmgr01:27717 sessionmgr02:27717 |
|Member-1-27717 : 192.168.29.14-ARBITER-pcrfclient01- ON-LINE--0| --------|
|Member-2-27717 : 192.168.29.35-PRIMARY-sessionmgr01- ON-LINE--3| --------|
|Member-3-27717 : 192.168.29.36-SECONDARY-sessionmgr02- ON-LINE--2| 1 sec|
|----------------------------------------------------------------------------------------------------------------------------------------|
2단계. 클러스터 관리자 또는 pcrfclient에서 이 명령을 실행하여 sessionmgr01의 우선 순위를 변경하고 보조 구성원으로 지정합니다.
#sh set_priority.sh --db session --replSet set01a --asc
Expected output in #diagnostics.sh --get_r
|----------------------------------------------------------------------------------------------------------------------------------------|
|SESSION:set01a|
|Status via sessionmgr02:27717 sessionmgr01:27717 |
|Member-1-27717 : 192.168.29.14-ARBITER-pcrfclient01- ON-LINE--0| --------|
|Member-2-27717 : 192.168.29.35-PRIMARY-sessionmgr02- ON-LINE--3| --------|
|Member-3-27717 : 192.168.29.36-SECONDARY-sessionmgr01- ON-LINE--2| 1 sec|
|----------------------------------------------------------------------------------------------------------------------------------------|
참고: sessionmgr01이 더 이상 주 구성원이 아니어야 하며(diagnostics.sh —get_r) 복제본 집합에 사용할 수 있는 주 구성원이 있는지 확인하십시오.
3단계. Sessionmgr01에서 이 명령을 실행하여 AIDO 클라이언트를 중지합니다.
#monit stop aido_client
4단계. Sessionmgr01에서 이 명령을 실행하여 각 Mongo 인스턴스를 중지합니다(portNum은 조각화된 멤버의 포트 번호).
Command syntax:
#/etc/init.d/sessionmgr-<portNum> stop
Example:
#/etc/init.d/sessionmgr-27717 stop
5단계. sessionmgr01에서 데이터베이스 디렉터리를 지우려면 mongo 명령의 —dbpath 특성에 대해 언급된 경로에서 데이터 디렉터리를 제거하십시오. 값을 검색하려면 Sessionmgr01에서 이 명령을 실행합니다(조각화된 멤버의 portNum 사용).
참고: 다른 sessionmgr db와 연결된 포트 번호와 디렉터리가 다르므로 다른 sessionmgr db를 정리할 수 있는 올바른 디렉터리가 있는지 확인하십시오.
Command syntax:
#grep -w DBPATH= /etc/init.d/sessionmgr-<portNum>
Example:
#grep -w DBPATH= /etc/init.d/sessionmgr-27717
Sample Output: DBPATH=/var/data/sessions.1/a
Copy the DBPATH from output.
Command syntax:
#rm -rf <DBPATH>/*
Example:
#rm -rf /var/data/sessions.1/a/*
6단계. Sessionmgr01에서 이 명령을 실행하여 각 Mongo 인스턴스를 시작합니다.
Command syntax:
#/etc/init.d/sessionmgr-<portNum> start
Example:
#/etc/init.d/sessionmgr-27717 start
7단계. Sessionmgr01에서 이 명령을 실행하여 AIDO 클라이언트를 시작합니다.
#monit start aido_client
8단계. 클러스터 관리자 또는 pcrfclient에서 이 명령을 실행하여 복제 세트 멤버의 우선순위를 재설정합니다.
#sh set_priority.sh --db session --replSet set01a
9단계. 클러스터 관리자 또는 pcrfclient에서 이 명령을 실행하여 복제본 세트의 기본 및 보조 멤버 상태를 확인합니다.
#diagnostics.sh --get_r
|----------------------------------------------------------------------------------------------------------------------------------------|
|SESSION:set01a|
|Status via sessionmgr01:27717 sessionmgr02:27717 |
|Member-1-27717 : 192.168.29.14-ARBITER-pcrfclient01- ON-LINE--0| --------|
|Member-2-27717 : 192.168.29.35-PRIMARY-sessionmgr01- ON-LINE--3| --------|
|Member-3-27717 : 192.168.29.36-SECONDARY-sessionmgr02- ON-LINE--2| 1 sec|
|----------------------------------------------------------------------------------------------------------------------------------------|