Contents

Introduction

Prerequisites

Requirements

Componentes Utilizados

Informações de Apoio

Problema

Procedimento para Resolver Alerta de Fragmentação MongoPrimaryDB

Introduction

Este documento descreve o procedimento para resolver o alerta de fragmentação MongoPrimaryDB no Cisco Policy Suite (CPS).

Prerequisites

Requirements

A Cisco recomenda que você tenha conhecimento destes tópicos:

- Linux

- CPS

- MongoDB

Note: A Cisco recomenda que você tenha acesso de raiz privilegiado à CLI do CPS.

Componentes Utilizados

As informações neste documento são baseadas nestas versões de software e 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. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.

Informações de Apoio

O CPS usa o MongoDB, onde os processos mongod executados nas Máquinas Virtuais (VMs) do Sessionmgr constituem sua estrutura básica de DataBase.

Quando os documentos se movem ou são removidos, eles deixam buracos. O MongoDB tenta reutilizar esses furos para novos documentos sempre que possível, mas com o tempo ele se encontra possuindo muitos furos lenta e constantemente, que não podem ser reutilizados porque os documentos não cabem neles. Esse efeito é chamado de fragmentação e é comum em todos os sistemas que alocam memória, o que inclui seu sistema operacional (SO).

O efeito da fragmentação é o desperdício de espaço. Devido ao fato de que o MongoDB usa arquivos mapeados de memória, qualquer fragmentação no disco reflete na fragmentação também na RAM. Isso resulta na criação de menos do "conjunto de trabalho" que cabe na RAM e faz com que o disco troque mais.

O CPS suporta KPIs para monitorar a fragmentação de nível MongoDB pelo uso do Grafana e gera um alarme SNMP (Simple Network Management Protocol) quando a porcentagem de fragmentos MongoDB excede um valor especificado.

O /etc/collectd.d/dbMonitorList.cfg o arquivo presente nas máquinas virtuais do sessionmgr contém a lista de bancos de dados e seus respectivos valores percentuais de limite de fragmentação. Por predefinição, o limiar de fragmentação é de 40 %. O valor do limite de fragmentação padrão pode ser alterado conforme necessário.

As estatísticas de fragmentação para os bancos de dados session_cache, sk_cache, diâmetro e Repositório de Perfil de Assinante (SPR) podem ser verificadas com 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

Quando o percentual de fragmentação do membro primário do conjunto de réplicas exceder o valor de fragmentação limite configurado, este alarme será gerado. Se o valor de limite não estiver configurado, o alarme será acionado se o percentual de fragmentação violar o valor padrão (40%).

Exemplo de alerta "A fragmentação de MongoPrimaryDB excedeu o valor limite":

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

Procedimento para Resolver Alerta de Fragmentação MongoPrimaryDB

Para reduzir o percentual de fragmentação, reduza o banco de dados quando um alarme for gerado. Quando o banco de dados for reduzido (a porcentagem de fragmentação diminui), um alarme vazio será enviado.

Este procedimento é para resolver o alerta de fragmentação MongoPrimaryDB na amostra fornecida.

Etapa 1. Execute este comando no Cluster Manager ou no pcrfclient para verificar o status dos membros primários e secundários no 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|

|----------------------------------------------------------------------------------------------------------------------------------------|

Etapa 2. Execute este comando a partir do Cluster Manager ou do pcrfclient para alterar a prioridade de sessionmgr01 e torná-lo um membro secundário.

#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|

|----------------------------------------------------------------------------------------------------------------------------------------|

Note: Verifique se sessionmgr01 não é mais primário (diagnostics.sh —get_r) e se há um membro primário disponível para o conjunto de réplicas.

Etapa 3. Execute este comando de Sessionmgr01 para parar o cliente AIDO.

#monit stop aido_client

Etapa 4. Execute este comando a partir do Sessionmgr01 para parar a respectiva instância Mongo (portNum é o número da porta do membro fragmentado).

Command syntax:

#/etc/init.d/sessionmgr-<portNum> stop

Example:

#/etc/init.d/sessionmgr-27717 stop

Etapa 5. Para limpar o diretório do banco de dados em sessionmgr01, remova o diretório de dados do caminho mencionado em relação ao atributo —dbpath do comando mongo. Execute este comando de Sessionmgr01 para recuperar o valor (use o portNum do membro fragmentado).

Note: Como o número de porta e os diretórios associados a outros bancos de dados do sessionmgr são diferentes, verifique se você tem os diretórios corretos para limpar outros bancos de dados do 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/*

Etapa 6. Execute este comando a partir de Sessionmgr01 para iniciar a respectiva instância Mongo.

Command syntax:

#/etc/init.d/sessionmgr-<portNum> start

Example:

#/etc/init.d/sessionmgr-27717 start

Etapa 7. Execute este comando de Sessionmgr01 para iniciar o cliente AIDO.

#monit start aido_client

Etapa 8. Execute este comando a partir do Cluster Manager ou do pcrfclient para redefinir as prioridades dos membros do conjunto de réplicas.

#sh set_priority.sh --db session --replSet set01a

Etapa 9. Execute este comando a partir do Cluster Manager ou do pcrfclient para verificar o status dos membros primários e secundários no 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|

|----------------------------------------------------------------------------------------------------------------------------------------|