Introducción
Este documento describe el procedimiento para resolver la alerta de fragmentación MongoPrimaryDB en Cisco Policy Suite (CPS).
Prerequisites
Requirements
Cisco recomienda que tenga conocimiento sobre estos temas:
Nota: Cisco recomienda que tenga acceso de raíz con privilegios a la CLI de CPS.
Componentes Utilizados
La información que contiene este documento se basa en las siguientes versiones de software y hardware.
- CPS 20.2
- MongoDB v3.6.17
- Unified Computing System (UCS)-B
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.
Antecedentes
CPS utiliza MongoDB, donde los procesos incorrectos que se ejecutan en máquinas virtuales de Sessionmgr (VM) constituyen su estructura básica de DataBase.
Cuando los documentos se mueven o se eliminan, dejan agujeros. MongoDB intenta reutilizar estos agujeros para nuevos documentos siempre que sea posible, pero con el tiempo se encuentra a sí mismo poseer una gran cantidad de agujeros lentamente y constantemente, que no se puede reutilizar porque los documentos no pueden caber en ellos. Este efecto se denomina fragmentación y es común en todos los sistemas que asignan memoria, incluido el sistema operativo (SO).
El efecto de la fragmentación es desperdiciar espacio. Debido al hecho de que MongoDB utiliza archivos asignados en memoria, cualquier fragmentación en disco se refleja en la fragmentación en RAM también. Esto da lugar a la creación de menos del ajuste 'Conjunto de trabajo' en la RAM y hace que el disco intercambie más.
CPS soporta KPIs para monitorear la fragmentación del nivel MongoDB mediante el uso de Grafana y genera una alarma SNMP (Simple Network Management Protocol) cuando el porcentaje del fragmento MongoDB excede un valor especificado.
/etc/collectd.d/dbMonitorList.cfg
el archivo presente en las máquinas virtuales sessionmgr contiene la lista de bases de datos y sus respectivos valores porcentuales de umbral de fragmentación. De forma predeterminada, el valor umbral de fragmentación es el 40 %. El valor de umbral de fragmentación predeterminado se puede cambiar según sea necesario.
Las estadísticas de fragmentación para las bases de datos session_cache, sk_cache, ameter y Subscriber Profile Repository (SPR) se pueden verificar con este comando:
[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 ~]#
Problema
Cuando el porcentaje de fragmentación del miembro principal del conjunto de réplicas supera el valor de fragmentación de umbral configurado, se genera esta alarma. Si el valor del umbral no está configurado, se genera la alarma si el porcentaje de fragmentación supera el valor predeterminado (40%).
Ejemplo de alerta "MongoPrimaryDB fragmentation exceeded the threshold value":
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
Procedimiento para resolver la alerta de fragmentación MongoPrimaryDB
Para reducir el porcentaje de fragmentación, reduzca la base de datos cuando se genera una alarma. Una vez que se reduce la base de datos (disminuye el porcentaje de fragmentación), se envía una alarma clara.
Este procedimiento es para resolver la alerta de fragmentación MongoPrimaryDB en el ejemplo proporcionado.
Paso 1. Ejecute este comando desde el Administrador de clústeres o pcrfclient para verificar el estado de los miembros primarios y secundarios del conjunto de réplicas.
#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|
|----------------------------------------------------------------------------------------------------------------------------------------|
Paso 2. Ejecute este comando desde el Administrador de clústeres o pcrfclient para cambiar la prioridad de sessionmgr01 y convertirlo en un miembro secundario.
#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|
|----------------------------------------------------------------------------------------------------------------------------------------|
Nota: Asegúrese de que sessionmgr01 ya no es el elemento principal (diagnostics.sh —get_r) y de que hay un miembro principal disponible para el conjunto de réplicas.
Paso 3. Ejecute este comando desde Sessionmgr01 para detener el cliente AIDO.
#monit stop aido_client
Paso 4. Ejecute este comando desde Sessionmgr01 para detener la instancia Mongo respectiva (portNum es el número de puerto del miembro fragmentado).
Command syntax:
#/etc/init.d/sessionmgr-<portNum> stop
Example:
#/etc/init.d/sessionmgr-27717 stop
Paso 5. Para limpiar el directorio de la base de datos en sessionmgr01, elimine el directorio de datos de la ruta mencionada en el atributo —dbpath del comando mongo. Ejecute este comando desde Sessionmgr01 para recuperar el valor (utilice el portNum del miembro fragmentado).
Nota: Dado que el número de puerto y los directorios asociados con otros dbs de sessionmgr son diferentes, asegúrese de tener los directorios adecuados para limpiar otros dbs de sessionmgr.
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/*
Paso 6. Ejecute este comando desde Sessionmgr01 para iniciar la instancia Mongo correspondiente.
Command syntax:
#/etc/init.d/sessionmgr-<portNum> start
Example:
#/etc/init.d/sessionmgr-27717 start
Paso 7. Ejecute este comando desde Sessionmgr01 para iniciar el cliente AIDO.
#monit start aido_client
Paso 8. Ejecute este comando desde el Administrador de clústeres o pcrfclient para restablecer las prioridades de los miembros del conjunto de réplicas.
#sh set_priority.sh --db session --replSet set01a
Paso 9. Ejecute este comando desde el Administrador de clústeres o pcrfclient para comprobar el estado de los miembros principales y secundarios del conjunto de réplicas.
#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|
|----------------------------------------------------------------------------------------------------------------------------------------|