Contenido

Introducción

Prerequisites

Requirements

Componentes Utilizados

Antecedentes

Problema

Solución

Introducción

Este documento describe el manejo de sesiones de suscriptor en caso de réplica de sesión establecida en Cisco Policy Suite (CPS).

Prerequisites

Requirements

Cisco recomienda que tenga conocimiento sobre estos temas:

- Linux

- CPS

- MongoDB

Nota: Cisco recomienda que debe tener 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

- Unified Computing System (UCS)-B

- MongoDB-v3.6.17

La información que contiene este documento se creó a partir de los dispositivos en un ambiente de laboratorio específico. Todos los dispositivos que se utilizan en este documento se pusieron en funcionamiento con una configuración verificada (predeterminada). Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.

Antecedentes

CPS utiliza MongoDB, donde se ejecutan los procesos de mongood en las máquinas virtuales (VM) sessionmgr para constituir su estructura básica de base de datos.

La configuración mínima recomendada para disponer de alta disponibilidad para un conjunto de réplicas es un conjunto de réplicas de tres miembros con tres miembros que contienen datos: un miembro primario y dos miembros secundarios. En algunas circunstancias (por ejemplo, si tiene un árbitro principal y un secundario pero las restricciones de costo prohíben agregar otro secundario), puede optar por incluir un árbitro. Un árbitro participa en las elecciones pero no tiene datos (es decir, no proporciona redundancia de datos). En el caso de CPS, normalmente las bases de datos de sesión se configuran de esta manera.

Puede verificar en /etc/broadhop/mongoConfig.cfg la configuración del conjunto de réplicas para su configuración de CPS.

[SESSION-SET1]

SETNAME=set01a

OPLOG_SIZE=5120

ARBITER1=arbitervip:27717

ARBITER_DATA_PATH=/var/data/sessions.27717

MEMBER1=sessionmgr01:27717

MEMBER2=sessionmgr02:27717

DATA_PATH=/var/data/sessions.1/d

SHARD_COUNT=4

SEEDS=sessionmgr01:sessionmgr02:27717

[SESSION-SET1-END]

[SESSION-SET7]

SETNAME=set01g

OPLOG_SIZE=5120

ARBITER1=arbitervip:37717

ARBITER_DATA_PATH=/var/data/sessions.37717

MEMBER1=sessionmgr02:37717

MEMBER2=sessionmgr01:37717

DATA_PATH=/var/data/sessions.1/g

SHARD_COUNT=2

SEEDS=sessionmgr02:sessionmgr01:37717

[SESSION-SET7-END]

MongoDB tiene otro concepto llamado Sharding que ayuda a la redundancia y la velocidad de un clúster. Los archivos compartidos separan la base de datos en conjuntos indexados, lo que permite una velocidad mucho mayor de escritura, lo que mejora el rendimiento general de la base de datos. Las bases de datos compartidas se suelen configurar de modo que cada recurso compartido sea un conjunto de réplicas.

- Sesión compartida: Sesión de semillas compartidas y sus bases de datos:

osgi> listshards

Shard Id Mongo DB State Backup DB Removed Session Count

1 sessionmgr01:27717/session_cache online false false 109306

2 sessionmgr01:27717/session_cache_2 online false false 109730

3 sessionmgr01:27717/session_cache_3 online false false 109674

4 sessionmgr01:27717/session_cache_4 online false false 108957

- Uso compartido de clave secundaria: Secondary Key comparte semillas y sus bases de datos:

osgi> listskshards

Shard Id Mongo DB State Backup DB Removed Session Count

2 sessionmgr02:37717/sk_cache online false false 150306

3 sessionmgr02:37717/sk_cache_2 online false false 149605

Problema

Problema 1. Crecimiento constante del consumo de memoria de los miembros de datos debido a un fallo en un solo miembro.

Cuando un miembro con datos cae en 3 miembros (2 con datos +1 árbitro), el único miembro con datos que queda asume la función de conjunto principal y de réplica sigue funcionando, pero con carga pesada y conjunto de réplicas sin redundancia de base de datos. Con una arquitectura PSA de tres miembros, la presión de caché aumenta si algún nodo con datos está caído. Esto da lugar a un aumento constante del consumo de memoria para el nodo con datos restante (principal), lo que podría provocar el fallo del nodo debido al agotamiento de la memoria disponible si se deja desatendido y, en última instancia, provoca un fallo del conjunto de réplicas.

------------------------------------------------------------------------------------------------

|[SESSION:set01a]|

|[Status via sessionmgr02:27717 ]|

|[Member-1 - 27717 : 192.168.29.100 - ARBITER - arbitervip - ON-LINE

|[Member-2 - 27717 : 192.168.29.35  - UNKNOWN - sessionmgr01 - OFF-LINE 19765 days

|[Member-3 - 27717 : 192.168.29.36  - PRIMARY - sessionmgr02 - ON-LINE

------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------

|[SESSION:set01g]|

|[Status via sessionmgr02:37717 ]|

|[Member-1 - 37717 : 192.168.29.100 - ARBITER - arbitervip - ON-LINE

|[Member-2 - 37717 : 192.168.29.35  - UNKNOWN - sessionmgr01 - OFF-LINE 19765 days

|[Member-3 - 37717 : 192.168.29.36  - PRIMARY - sessionmgr02 - ON-LINE

------------------------------------------------------------------------------------------------

Problema 2. Impacto en la gestión de sesiones debido a un error de doble miembro.

Cuando tanto los miembros que contienen datos (Sessionmgr01 y sessionmgr02) se desactivan en dichos conjuntos de réplicas (Double-failure), todo el conjunto de réplicas se desactiva y su función básica de base de datos se ve comprometida.

Current setup have problem while connecting to the server on port : 27717

Current setup have problem while connecting to the server on port : 37717

Este error en el conjunto de réplicas provoca un error en la llamada en el caso de los conjuntos de réplicas de sesiones, ya que los procesos de gestión de llamadas de CPS (procesos de Quantum Network Suite (qns)) no pueden tener acceso a las sesiones que ya están almacenadas en esos conjuntos de réplicas con errores.

Solución

Enfoque 1. Para fallos de un solo miembro.

Debe poder recuperar el miembro del conjunto de réplicas que ha fallado en una arquitectura de Árbitro primario-secundario (PSA) con un período de tiempo corto. En caso de que la restauración de un miembro portador de datos fallido en una arquitectura PSA lleve tiempo, debe quitar el miembro fallado.

Paso 1.1. Identifique el miembro portador de datos fallido en el conjunto de réplicas determinado con arquitectura PSA de tres miembros. Ejecute este comando desde el Administrador de clústeres.

#diagnostics.sh --get_r

Paso 1.2. Remueva el miembro del cojinete de datos fallido del conjunto de réplicas determinado.

Syntax:

Usage: build_set.sh <--option1> <--option2> [--setname SETNAME] [--help]

option1: Database name

option2: Build operations (create, add or remove members)

Example:

#build_set.sh --session --remove-failed-members --setname set01a --force

#build_set.sh --session --remove-failed-members --setname set01g --force

Paso 1.3. Compruebe que el miembro con error se ha quitado del conjunto de réplicas.

#diagnostics.sh --get_r

Enfoque 2. Para fallos de miembro doble.

Esta no es una solución alternativa permanente cuando ambos miembros portadores de datos se desactivan en un conjunto de réplicas PSA 3. Más bien, se trata de una solución temporal para evitar o reducir los errores de llamada y garantizar una gestión del tráfico sin problemas, mediante la eliminación de los miembros con errores del conjunto de réplicas respectivo, el uso compartido de sesión y el uso compartido de sk en consecuencia. Usted debe trabajar en la restauración de los miembros fallidos tan pronto como sea posible, para evitar cualquier efecto indeseable adicional.

Paso 2.1. Dado que los conjuntos de réplicas de sesiones están inactivos al estar inactivos Sessionmgr09 y Sessionmgr10, debe eliminar las entradas de estos conjuntos de réplicas del recurso compartido de sesión y del recurso compartido de la consola OSGI:

#telnet qns0x 9091

osgi> listshards

Shard Id Mongo DB State Backup DB Removed Session Count

1 sessionmgr01:27717/session_cache online false false 109306

2 sessionmgr01:27717/session_cache_2 online false false 109730

3 sessionmgr01:27717/session_cache_3 online false false 109674

4 sessionmgr01:27717/session_cache_4 online false false 108957

osgi> listskshards

Shard Id Mongo DB State Backup DB Removed Session Count

2 sessionmgr02:37717/sk_cache online false false 150306

3 sessionmgr02:37717/sk_cache_2 online false false 149605

Paso 2.2. Elimine estos fragmentos de sesión:

osgi> removeshard 1

osgi> removeshard 2

osgi> removeshard 3

osgi> removeshard 4

Paso 2.3. Retire estos fragmentos:

osgi> removeskshard 2

osgi> removeskshard 3

Paso 2.4.Antes de volver a equilibrar, verifique la base de datos de administración (verifique que la versión de la instancia coincida para todas las máquinas virtuales qns):

#mongo sessionmgrxx:xxxx/sharding.     [Note: use the primary sessionmgr hostname and respective port for login]

#set05:PRIMARY>  db.instances.find()

{ "_id" : "qns02-1", "version" : 961 }

{ "_id" : "qns07-1", "version" : 961 }

{ "_id" : "qns08-1", "version" : 961 }

{ "_id" : "qns04-1", "version" : 961 }

{ "_id" : "qns08-1", "version" : 961 }

{ "_id" : "qns05-1", "version" : 961 }

Note: if the sharding versions (previous output) are different for some QNS instances. For example, if you see:

{ "_id" : "qns08-1", "version" : 961 }

{ "_id" : "qns04-1", "version" : 962 }

Ejecute este comando en la base de datos compartida de administración (utilizando el nombre de host adecuado):

Nota: Si está en un miembro secundario, utilice rs.slaveOk() para poder ejecutar comandos.

[root@casant01-cm csv]#  mongo sessionmgr01:27721/shardin

set05:PRIMARY>

set05:PRIMARY> db.instances.remove({ “_id” : “$QNS_hostname”})

Example:

set05:PRIMARY> db.instances.remove({ “_id” : “qns04-1”})

set05:PRIMARY> exit

Paso 2.5. Ahora ejecute el reequilibrio del recurso compartido de sesión.

Login to osgi console.

#telnet qns0x 9091

osgi>listshards

osgi>rebalance

osgi>rebalancestatus

Verify shards:

osgi>listshards

Paso 2.6. Ejecute sk shard rebalance:

Login to osgi console.

#telnet qns0x 9091

osgi>listskshard

osgi>rebalancesk

osgi>rebalanceskstatus

Verify shards:

osgi>listshards

Paso 2.7. Remueva el conjunto de réplicas set01a y set01g (ejecute en cluman):

#build_set.sh --session --remove-replica-set --setname set01a --force

#build_set.sh --session --remove-replica-set --setname set01g --force

Paso 2.8. Reinicie el servicio qns (ejecute en el clúster):

#restartall.sh

Paso 2.9. Remueva las líneas set01a y set01g del archivo mongoConfig.cfg. Ejecute esto en el Administrador de clústeres:

#cd /etc/broadhop/

#/bin/cp -p mongoConfig.cfg mongoConfig.cfg_backup_

#vi mongoConfig.cfg

[SESSION-SET1]

SETNAME=set01a

OPLOG_SIZE=5120

ARBITER1=arbitervip:27717

ARBITER_DATA_PATH=/var/data/sessions.27717

MEMBER1=sessionmgr01:27717

MEMBER2=sessionmgr02:27717

DATA_PATH=/var/data/sessions.1/d

SHARD_COUNT=4

SEEDS=sessionmgr01:sessionmgr02:27717

[SESSION-SET1-END]

[SESSION-SET7]

SETNAME=set01g

OPLOG_SIZE=5120

ARBITER1=arbitervip:37717

ARBITER_DATA_PATH=/var/data/sessions.37717

MEMBER1=sessionmgr02:37717

MEMBER2=sessionmgr01:37717

DATA_PATH=/var/data/sessions.1/g

SHARD_COUNT=2

SEEDS=sessionmgr02:sessionmgr01:37717

[SESSION-SET7-END]

Paso 2.10. Después de eliminar las líneas, guarde y salga.

Ejecute build_etc en el Administrador de clústeres.

#/var/qps/install/current/scripts/build/build_etc.sh

Paso 2.11. Verifique que el conjunto de réplicas set01d se elimine mediante el diagnóstico.

#diagnostics.sh --get_r