Tabela de Conteúdos
Usando o DUNDi para Formar um Cluster AsteriskDescrição Geral e EscopoDUNDi é um sistema peer-to-peer para localização de gateways Internet para serviços de telefonia em um Cluster Asterisk. Diferente dos serviços centralizados tradicionais (como o padrão ENUM consideravelmente simples e conciso), o DUNDi é completamente distribuÃdo sem nenhuma hierarquia centralizada.
A implementação de um Cluster Asterisk nos dar a capacidade de distribuir a carga de funções do Soft Switch/PABX ao longo de vários servidores Asterisk em uma infra-estrutura comum ou remota. Isso permite ao Cluster ser visto e ser percebido como um imenso SoftSwitch. Isso também pode nos permitir construir uma estrutura da função softswitch em arquitetura com alta capacidade de execução de failover -
Implementando o protocolo DUNDi em um Cluster Asterisk você terá a base de um núcleo de rede que executa a comutação VoIP que é escalável sem a necessidade de se fazer estaticamente endereçamento dos peers SIP para um servidor de registro especifico - Isso serve a uma gama de necessidades fundamentais quando se está projetando e construindo uma rede de Telefonia IP. 1. Projetaremos um ambiente que é por si mesmo tratado através do núcleo do softswitch. 2. Projetaremos a arquitetura tendo em mente a escalabilidade e crescimento orgânico de forma que os custos com equipamento incremental sejam baixos. Requisitos FuncionaisTemos que tratar de várias necessidades individuais para realizar localização dinâmica do peer e um método de contactá-los diretamente ou indiretamente durante uma falha de PABX. Para completar a localização dinâmica do peer através do Cluster, vamos discutir os passos requeridos. Primeiro, necessitamos implementar um método através do qual um PABX individual possa ficar ciente quando um UA/SIP especÃfico esteja com o seu registro ativo. Quando um UA/SIP se registra com um PABX, é obrigação ao PABX local deixar outros PABX´s saber onde esse UA/SIP estar e como ele pode ser contatado. Também necessitamos da capacidade para o cluster compartilhar uma série de informação comum sobre dados de registro do UA/SIP. Isso é conseguido através do Asterisk RealTime Architecture usando a informação do Users/Peer SIP puxada de uma Base de Dados MySQL. Essa base de dados pode ser um servidor isolado ou um cluster de servidores em um arranjo de alta disponibilidade e com balanceamento de carga.
Tendo uma base de dados comum onde todos os servidores puxam a mesma informação, elimina a necessidade de provisão para cada servidor responsável por fazer registro SIP no Cluster. Para Anúncios de Peer Dinâmico, usamos “regcontext†no arquivo sip.conf: Se regcontext for especificado, o Asterisk criará e destruirá dinamicamente uma extensão de prioridade 1 com o comando NoOp para um dado peer que se registra com o servidor. Se o contexto não for especificado no arquivo extensions.conf, então o Asterisk criará dinamicamente o contexto no dialplan quando um UA/SIP se registrar. Para o exemplo neste artigo, coloque o fragmento seguinte no arquivo sip.conf:
Uma vez que os telefones, neste exemplo, 1001 e 1006, se registram com REGPBX1, um contexto [sipregistration] aparece e a saÃda do comando "show dialplan" na CLI do asterisk vai gerar:
Ele gera um contexto dedicado nesse PABX para o qual podemos mapear requisição de consultas DUNDi. Quando um pedido DUNDi chega para a extensão 1001, esse PABX responderá, “Sim, a extensão está ativa aqui e esse é o endereço de contatoâ€. Quando um pedido DUNDi entra para extensão 1002, esse PABX responderá, “Não, essa extensão não está ativa aquiâ€. Não existe nenhuma necessidade de inserir um contexto [sipregistration] no arquivo extensions.conf, porque o PABX criará dinamicamente o contexto no dialplan tão logo um agente SIP se registre. Como inserimos o parâmetro regcontext=sipregistration no arquivo sip.conf de cada um servidor de registro, nós começamos a perceber a maneira como o cluster intuitivamente sabe onde o UA/SIP está registrado quando executa consultas DUNDi. Servidor de Consultas DUNDiCom um servidor no cluster dedicado ao processamento de requisições de consultas DUNDi, eliminamos duas dores de cabeça associadas com a escalabilidade e crescimento do núcleo da função Softswitch. 1. Quando do acréscimo de um novo servidor de registro ou de um servidor gateway PSTN ao cluster, precisamos inserir a nova informação do peer ao servidor de consultas DUNDi em vez de acrescentar os novos peers a todos os servidores de registro e os servidores gateway PSTN. Com alguns poucos servidores, convenhamos, isso não é lá um grande problema, mas com 50 ou mais servidores, a manutenção do dialplan pode se arrastar por várias horas ou até mesmo várias tardes. 2. Quando criamos mais tronco de acesso em outras localidades, você diz que está ativando um link E1 Dedicado para Lake Charles, Los Angelis; você tem apenas que fazer uma rota/ translação no servidor de consultas DUNDi em vez de passar por todos os servidores de registro e então cadastrar o peer para o novo servidor em um ou mais NÓS existente no cluster. Configuração DUNDiPara o DUNDi funcionar através do cluster, primeiro temos de instalar um canal interno de pedido DUNDi e também um canal para passar chamadas entre os PABXs. Neste exemplo, usaremos um método muito simples e não criptografado com o IAX2. Em um ambiente padrão de produção, os métodos de segurança do IAX2 podem ser implementados para prover criptografia AES. Agora existem muitas formas de configurar ele e justamente alguns poucos parâmetros que podemos especificar para segurança entre todos os servidores de registro e servidor de consultas DUNDi, cada um tendo o seu próprio contexto, relacionamentos peer/users e chaves de segurança ou senha. Como esse exemplo é para um cluster fora da internet e somente usado para rotear ligações e pedido DUNDI internamente, apenas usamos um contexto simples no arquivo iax.conf que é comum a todos os servidores. O IAX2 também pode usar criptografia RSA para prover autenticação assimétrica. Exemplo no arquivo iax.conf:
Adicione esse contexto em cada servidor. Fazendo isso, completa a instalação com IAX2. Agora todos os PABX´s tem um canal para troca de mensagens de pedido/resposta de consultas DUNDi e também um canal para direcionar as chamadas através do cluster. No arquivo dundi.conf: Na seção [mappings] é onde especificamos para qual [context] no arquivo extensions.conf queremos permitir acesso aos pedidos DUNDi. Isso é como o cluster enxerga todo e qualquer UA/SIP disponÃvel no contexto [sipregistration] neste PABX.
Quando um pedido de consulta DUNDi chega a esse PABX, o DUNDi retornará um report com todo e qualquer UA/SIP que aparece no contexto [sipregistration] do dialplan. Se o pedido é para uma extensão não listada no contexto [sipregistration], esse PABX responderá à consulta DUNDi com um "not found". Como Configurar o DUNDi para Rodar um Cluster AsteriskTemos 5 servidores de registro que nomeamos de regpbx1, regpbx2, regpbx3, regpbx4 e regpbx5. A informação do UA/SIP chega dinamicamente puxada de uma base de dados MySQL usando o mecanismo do Asterisk RealTime. Quando um Agente SIP tenta se registrar em um servidor de registro, o Asterisk busca a informação do Agente armazenada na base de dados MySQL, se ele estiver presente; será permitido ao agente se registrar. Temos um PABX Asterisk para processar pedidos de consultas DUNDi e passar as ligações dos Gateways PSTN para os servidores de registro SIP do Cluster, nomeamos esse servidor de dunpbx1. Este PABX forma o núcleo DUNDi com todos os 5 servidores de registro. Sendo todos os 5 servidores de registro somente peer desse servidor de consultas DUNDi, o dunpbx1. Observe que o uso de um servidor DUNDi dedicado não é necessário (e claro, neste exemplo, introduz um SPOF - single point of failure - por si mesmo), mas é usado neste exemplo para tornar a arquitetura bastante fácil de visualizar.
Em um ambiente de produção, todos os servidores seriam conectados a pelo menos outros dois NÓS via DUNDi para eliminar um Ponto Único de Falha (single point of failure – SPOF). Cada servidor de registro é configurado como no arquivo dundi.conf. Roteamento no DialPlan, Primeiro a Eficiência
Assim, agora temos anunciado a localização dinâmica do Agente SIP dentro do cluster, como rotearemos chamadas dentro do cluster, com que se parece o dialplan? Neste exemplo, a extensão(ramal) 1001 chama a 1006. Somos levados a olhar internamente pela extensão(ramal) e se estiver presente, seguiremos a função padrão PABX, e conecta a chamada. Aqui no arquivo extensions.conf, está a lógica do dialplan usado para executar uma busca interna:
Verificaremos se é a extensão (ramal) que discamos, 1006, está disponÃvel no PABX local usando o comando "ChanIsAvail". Quando o canal está disponÃvel, enviamos a chamada para o contexto [incoming] para procurar pela extensão(ramal) 1006, na prioridade 2. Se o canal não estiver disponÃvel, enviaremos a chamada para o contexto [lookupdundi] prioridade 1. Aqui está um pedaço da saÃda da CLI Asterisk:
Neste exemplo, a extensão (ramal) 1001 chama a extensão (ramal) 1002. Vamos procurar internamente pela extensão (ramal) e se ela estiver presente, seguiremos a função padrão do PABX, e conecta a chamada. Mas, se a extensão(ramal) não estiver presente, executaremos uma consulta DUNDi dentro do cluster e conecta a chamada ao servidor apropriado que tem a extensão (ramal) 1002 registrada. No arquivo extensions.conf, está a lógica do dialplan usada para fazer uma consulta DUNDi:
Aqui no arquivo extensions.conf, está a lógica do dialplan usado para executar uma consulta ao MySQL:
Isso é Importante: Fazer a desconexão é necessário; você não pode deixar as conexões SQL abertas. As conexões não serão fechadas até que você desconecte ou restarte. A não desconexão eventualmente poderia atingir o limite de conexões do MySQL e não permitiria mais nenhuma conexão de consultas ou possivelmente crash. Também usamos o comando "GotoIf". Vamos puxar os dados do campo "fullcontact" e colocamos esse dado em uma variável ${direct}, mas primeiro vamos extrair os 4 caracteres da frente do dado porque ele é pre-fixado com a string "sip:", então chamaremos o UA/SIP diretamente. Se não existe nenhum dado no campo "fullcontact", então o UA/SIP nunca se registrou com o cluster, assim enviaremos a chamada ao contexto [invalid] na prioridade 1. Já que estamos conectando o Agente SIP diretamente, não temos qualquer lógica associada no dialplan com a extensão que estamos chamando, assim somente tocaremos o tom de ring por 15 segundos, então enviamos a chamada ao contexto [sendtovm] na prioridade 1. Aqui está um pedaço da saÃda da CLI Asterisk:
Algumas Notas de Aviso
O Uso de "ChanIsAvail"Por que não executamos um comando "ChanIsAvail" quando temos de discar para o Agente SIP diretamente. Alguns telefones, como os telefones da Cisco e os telefones da Polycom, aceitarão pedido de extensão entrante e ringa o telefone tão longo o telefone ainda pense que ele está registrado a um PABX. Então, quando o tempo de registro do telefone estiver definido em 5 minutos e o servidor de registro de repente torna-se indisponÃvel com 4 min 59 seg do tempo restante do registro, então o telefone reconhecerá um pedido SIP como disponÃvel e aceita uma discagem direta. Durante essa condição, janela máxima de 5 minutos, se você usa o comando "ChanIsAvail', o telefone vai dizer, "sim, Eu estou disponÃvel, e envia a chamada".
Mas, se o servidor se tornar indisponÃvel e expira o tempo de validade do registro, então o telefone vai entender que ele não está registrado e tira essa extensão fora do status de disponÃvel, assim o comando "ChanIsAvail" vai obter uma negativa falsa e não tentará discar para o telefone, mas o telefone ainda está disponÃvel para discagem direta mesmo que ele não esteja registrado. Agentes SIP Usando Servidor de Registro de BackupÉ possÃvel ter um Agente SIP registrado em mais de um servidor de registro. O que acontece quando um pedido DUNDi sai nesta situação é a chamada será completada ao primeiro que responder. Assim, se a extensão 1002 for registrada no servidor de registro número 1 e no servidor de registro número 2 e a extensão 1003, registrada no servidor de registro 3 chama a extensão 1002, então a chamada completará no primeiro servidor que responder ao pedido DUNDi.
Isso pode parecer a uma situação ideal, mas isso contém armadilhas, geralmente com funcionalidades de PABX como estacionamento de chamada. Idealmente, você deseja que todos os ramais dentro do mesmo office, pessoas que estariam estacionando chamadas e pedindo a outras para capturar, de estarem registradas ao mesmo PABX, do contrário uma situação poderia surgir onde a extensão 1001 registrada no servidor de registro número 2 estaciona uma chamada para a extensão 1002 que está no servidor de registro número 2. Para evitar isso, tenha cuidado com os servidores de registro de backup. Porque com o telefone Cisco, você pode escolher não ter um servidor de registro de backup, mas um servidor proxy de último recurso. O telefone não se registraria ao proxy de último recurso, mas passaria a chamadas saintes a ele. Se o servidor de registro falhar, o telefone pode ainda completar chamadas saintes e usando o contexto [lookupmysql] conforme observado no exemplo 3 acima, chamadas entrantes podem ainda serem completadas para o Agente SIP. Asterisk RealTime e o MySQL
No diagrama 1, esbocei 2 segmentos Ethernet, 1 para as trocas de mensagens RealTme/ MySQL e outro para o tráfego de Voz/DUNDi. A razão é de escalabilidade e de segmentação do tráfego em ambientes mais controláveis. Muitas máquinas padrão servidor vem com 2 ou mais NIC´s, então o por quê de não usá-las. O MySQL e o RealTime é um ambiente muito conversador para operar e vários componentes no plano de discagem confiam nas respostas rápidas da base de dados MySQL. Quando o tráfego de voz é priorizado quando atravessa a rede de switches, o tráfego entre a base de dados pode ficar retido em buffers e o tempo de resposta ficar excessivamente estendido. No ambiente de realização de testes, buscas de 10ms é um tempo fantástico. Acrescentando 10.000 clientes ao cluster e você vai ficar rezando para essa bondade do tempo de busca, mas você nunca o veria. Você vai conseguir melhores tempos de respostas da base de dados quando implementando a segmentação da função RealTime/MySQL e das outras funções do PABX e de voz. Balanceamento de Carga Através do Cluster de Servidores de Registro
Se a rede é para abrigar um monte de usuários não constantes, sem associação, como os clientes residenciais, então o método roundrobin ou um método verdadeiramente inteligente de carga de servidor é implementado, então o balanceamento poderia ser arbitrário e corretamente encaminhado direto. Quando você tem 10 usuários na Companhia A, 50 usuários na companhia B, 25 usuários na Companhia C e 5 usuários na Companhia D, então tem mais sentido colocar a Companhia A, C e D em um servidor e a companhia B em outro servidor para ter alguma capacidade de fornecer funcionalidades de PABX complexas. No evento de quebra do Servidor B, os usuários ainda teriam chamadas entrando e saindo até que o outro servidor pudesse ser reconfigurado com o endereço IP do servidor B. Por essa razão e muitas outras, é que vários servidores hotstanby seriam implementados estrategicamente dentro do cluster. Nota: * Figuras do tutorial original.Mais informação sobre configuração de Cluster Asterisk Com DUNDi pode ser visto nos links abaixo: http://www.voip-info.org/wiki/view/DUNDi+Enterprise+Configuration+SIP http://www.voip-info.org/wiki/view/DUNDi+Enterprise+Configuration+IAX http://www.voip-info.org/wiki/view/DUNDi+Enterprise+Configuration+SIP+with+no+passwords. |