Introdução
Este documento descreve o Tratamento de Sessão de Assinante no caso de Réplica de Sessão Definida no Cisco Policy Suite (CPS).
Pré-requisitos
Requisitos
A Cisco recomenda que você tenha conhecimento destes tópicos:
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
- Unified Computing System (UCS)-B
- MongoDB-v3.6.17
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. 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 são executados em máquinas virtuais (VMs) do sessionmgr para constituir sua estrutura básica de banco de dados.
A configuração mínima recomendada para disponibilizar alta disponibilidade para um conjunto de réplicas é um conjunto de réplicas de três membros com três membros que suportam dados: um membro principal e dois membros secundários. Em algumas circunstâncias (como se você tivesse um primário e um secundário, mas as restrições de custo proibirem a adição de outro secundário), você pode optar por incluir um intermediário. Um árbitro participa de eleições, mas não mantém dados (ou seja, não fornece redundância de dados). No caso do CPS, normalmente os BDs da sessão são configurados dessa maneira.
Você pode verificar a configuração do conjunto de réplicas para a instalação do CPS em /etc/broadhop/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]
MongoDB tem outro conceito chamado Sharding que ajuda a redundância e velocidade para um cluster. Os compartilhamentos separam o banco de dados em conjuntos indexados, o que permite uma velocidade muito maior para gravações, o que melhora o desempenho geral do banco de dados. Os bancos de dados compartilhados geralmente são configurados de forma que cada fragmento seja um conjunto de réplicas.
- Compartilhamento de sessão: Sementes compartilhadas de sessão e seus bancos de dados:
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
- Compartilhamento de chave secundária: A chave secundária compartilha sementes e seus bancos de dados:
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. Crescimento constante no consumo de memória do membro de dados devido a uma falha de um único membro.
Quando um membro que carrega dados fica inativo em 3 membros (2 arbitradores +1 que suportam dados), o único membro que suporta dados restante assume a função de Conjunto principal e de réplica continua a funcionar, mas com carga pesada e conjunto de réplicas sem nenhuma redundância de BD. Com uma arquitetura PSA de três membros, a pressão de cache aumenta se algum nó que suporta dados estiver inativo. Isso resulta em um aumento constante no consumo de memória para o nó que suporta dados restante (Primário), levando potencialmente à falha do nó devido à redução da memória disponível se deixado sem supervisão e, por fim, causa a falha do 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 no tratamento da sessão devido à falha do membro duplo.
Quando ambos os membros portadores de dados (Sessionmgr01 e sessionmgr02) ficam inativos em tais conjuntos de réplicas (Falha dupla), todo o conjunto de réplicas fica inativo e sua função básica de banco de dados é 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
Essa falha do conjunto de réplicas resulta em falha de chamada no caso de conjuntos de réplicas de sessão, pois os processos de tratamento de chamadas do CPS (Processos do Quantum Network Suite (qns)) não podem acessar as sessões que já estão armazenadas nesses conjuntos de réplicas com falha.
Solução
Abordagem 1. Para Falha De Membro Único.
Você deve ser capaz de trazer de volta o membro do conjunto de réplicas com falha em uma arquitetura PSA (Primary-Secondary-Arbiter, árbitro primário secundário) com pouco tempo. No caso de a restauração de um membro portador de dados com falha em uma arquitetura PSA levar tempo, você deve remover o membro com falha.
Etapa 1.1. Identifique o membro portador de dados com falha no conjunto de réplicas específico com a arquitetura PSA de três membros. Execute este comando a partir do Gerenciador de Cluster.
#diagnostics.sh --get_r
Etapa 1.2. Remova o membro que carrega os dados com falha do conjunto de réplicas específico.
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
Etapa 1.3. Verifique se o membro com falha foi removido do conjunto de réplicas.
#diagnostics.sh --get_r
Abordagem 2. Para Falha De Membro Duplo.
Essa não é uma solução permanente quando os dois membros que suportam dados ficam inativos em um conjunto de réplicas 3 PSA. Em vez disso, é uma solução temporária para evitar ou reduzir as falhas de chamada e garantir o tratamento de tráfego perfeito, removendo os membros com falha do respectivo conjunto de réplicas, compartilhamento de sessão e compartilhamento de tarefas de acordo. Você deve trabalhar na restauração de membros falhados o mais rápido possível, a fim de evitar quaisquer efeitos indesejáveis adicionais.
Etapa 2.1. Como os conjuntos de réplicas de sessão estão inativos enquanto o Sessionmgr09 e o Sessionmgr10 estão inativos, você deve remover as entradas desses conjuntos de réplicas do fragmento e do skshard de sessão do console 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
Etapa 2.2. Remover estes fragmentos de sessão:
osgi> removeshard 1
osgi> removeshard 2
osgi> removeshard 3
osgi> removeshard 4
Etapa 2.3. Remova estes skshards:
osgi> removeskshard 2
osgi> removeskshard 3
Etapa 2.4.Antes de executar o rebalanceamento, verifique o banco de dados do administrador (verifique se a versão da instância corresponde a todas as VMs 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 }
Execute este comando no BD de compartilhamento admin (usando o nome de host apropriado):
Note: Se você estiver em um membro secundário, use rs.slaveOk() para poder executar 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
Etapa 2.5. Agora execute o rebalanceamento compartilhado da sessão.
Login to osgi console.
#telnet qns0x 9091
osgi>listshards
osgi>rebalance
osgi>rebalancestatus
Verify shards:
osgi>listshards
Etapa 2.6. Executar rebalanceamento de compartilhamento de risco:
Login to osgi console.
#telnet qns0x 9091
osgi>listskshard
osgi>rebalancesk
osgi>rebalanceskstatus
Verify shards:
osgi>listshards
Etapa 2.7. Remova o conjunto de réplicas set01a e set01g (executado no clone):
#build_set.sh --session --remove-replica-set --setname set01a --force
#build_set.sh --session --remove-replica-set --setname set01g --force
Etapa 2.8. Reiniciar o serviço qns (executar no clone):
#restartall.sh
Etapa 2.9. Remova as linhas set01a e set01g do arquivo mongoConfig.cfg. Executar no Gerenciador de Cluster:
#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]
Etapa 2.10. Depois de remover as linhas, salve e saia.
Execute build_etc no Gerenciador de cluster.
#/var/qps/install/current/scripts/build/build_etc.sh
Etapa 2.11. Verifique se o conjunto de réplicas set01d foi removido através do diagnóstico.
#diagnostics.sh --get_r