Listeners dinâmicos

Versão para impressãoEnviar para amigoVersão PDF

Listeners são serviços utilizados para receber as conexões dos usuários.
No Informix, até a versão 11.50 xC5 para alterar a configuração dos listeners era necessário parar toda a instância, derrubando todos os acessos de usuários e processos em execução.
Este problema foi resolvido no release 11.50 xC6, onde é possível adicionar, remover, alterar, parar, iniciar e reiniciar um listener.
Para uma fonte alternativa de informações sobre este novo recursos e outros detalhes, leia o post do Vagner em seu blog askpontes.blogspot.com

  1. O funcionamento dos listeners
    1. Quando este recurso será util
  2. Limitações dos listeners dinâmicos
  3. Sintaxe
    1. Exemplo


O funcionamento dos listeners


O funcionamento dos listeners é algo relativamente simples. No Informix para cada listener é preciso ter um DBSERVERALIASES definido, ou seja, ele precisar ter um nome associado.
Cada listener (dbserveraliases) possui sua própria (e única) configuração de conectividade onde se define o protocolo, host, porta e opções.

Na aplicação cliente, para descobrir em qual IP e porta deve conectar ele pesquisa em seu SQLHOSTS local pelo nome da instância definida na variável de ambiente INFORMIXSERVER .


Quando este recurso será util


Você deve estar se perguntando em qual situação este recurso pode lhe ser util, bom segue abaixo poucos motivos, mas fortes suficiente para você agradecer muito de ele ter sido implementado.
  • Para tunning de performance para alguns usuários pode ser necessário alterar as opções de um listener (tamanho de buffer) ou adicionar novos listeners para uma placa de rede e assim balancear carga.
  • Para corrigir uma configuração de rede sem a necessidade de parar todos os usuários.
  • Para realizar uma manutenção no banco, onde você não deseja trabalhar em modo single ou quiscent e quer bloquear os acessos de usuários.
  • Alterações da sua infra-estrutura onde novas redes são adicionadas ao seu host e você precisa configurar o banco para aceitar conexões destas redes.


Limitações dos listeners dinâmicos


  • Funciona apenas com listeners TCP
  • Ao parar um listener, todas as conexões abertas através dele continuam conectadas, onde apenas novas conexões serão rejeitadas.
  • O nome do servidor DBSERVERALIASES deve ser incluidos no ONCONFIG e sua respectiva configuração de rede no SQLHOSTS antes de iniciar o listener.
    Esta alteração no ONCONFIG não exije que o banco seja reiniciado, pode ser realizado "on-fly" sem problemas.


Sintaxe


Para realizar a alteração do listener utilizamos o comando onmode com um novo parâmetro
    onmode -P [start|stop|restart] [server_name]
    
    Para realizar a mesma tarefa através do SQLADMIN API:
    
    execute function [task|admin]( "[start|stop|restart] listen" , "[server_name]")
    


Exemplo


    # Antes de ativar o novo listener, veja qual a situação atual do 
    # meu banco de dados, onde possui algumas portas já configuradas
    
    # Esta é a configuração original no ONCONFIG
    $ onstat -c |grep ^DBSERVER
    DBSERVERNAME  idsmoon
    DBSERVERALIASES idsmoon_tcpb,idsmoon_str,idsmoon_shm,idsmoon_mach11,idsmoon_er
    
    # Esta é a configuração no SQLHOSTS
    $ grep idsmoon $INFORMIXSQLHOSTS
    idsmoon_er     onsoctcp     note-cim      56020 g=grpLeaf1
    idsmoon        onsoctcp    *note-cim      2020
    idsmoon_str    onipcstr     note-cim      ipc_moon
    idsmoon_shm    onipcshm     note-cim      shm_moon
    idsmoon_tcpb   onsoctcp    *note-cim      2121       b=32767
    idsmoon_mach11 onsoctcp     note-cim      55020 s=6
    
    # Identificando as portas que estão sendo ouvidas pelo Informix (oninit)
    # através do comando netstat do Linux
    # netstat -nltp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.2:55020         0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1761/rpcbind
    tcp        0      0 127.0.0.2:56020         0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 0.0.0.0:2020            0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 0.0.0.0:2121            0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 :::111                  :::*                    LISTEN      1761/rpcbind
    
    # Identificando as portas que estão sendo ouvidas através do 
    # comando onstat do Informix (sublinhado) 
    $ onstat -g ntt
    IBM Informix Dynamic Server Version 11.50.UC6DE -- On-Line -- Up 00:15:10 -- 353916 Kbytes
    global network information:
      #netscb connects         read        write    q-free  q-limits  q-exceed alloc/max
       9/   9        0            0            0    0/   0    0/ 168   10/   0    0/   0
    Individual thread network information (times):
      netscb thread name    sid     open     read    write address
    4e4b28a8 soctcplst       13 13:48:26                   note-cim|56020|soctcp
    4e4528a8 soctcplst       12 13:48:26                   note-cim|55020|soctcp
    4e40d8a8 sm_discon       11 13:48:26
    4e3b68a8 sm_listen        9 13:48:26
    4e2b28a8 soctcplst        6 13:48:26                   *note-cim|2121|soctcp
    4e24e8a8 soctcplst        5 13:48:26                   *note-cim|2020|soctcp
    4e1f48a8 sm_poll          4 13:48:26
    4e19b8a8 ipcstrpoll       3 13:48:26
    4e1428a8 soctcppoll       2 13:48:26
    
    # Supondo que eu tenha uma alteração na minha configuração 
    # de rede, onde uma nova rede 10.72.34.0 foi adicionada e 
    # alguns usuários deverão acessar o banco de dados a partir dela. 
    
    # Altero o SQLHOSTS, adicionando a linha abaixo
    idsmoon_tcpc   onsoctcp 10.72.34.100      2122
    
    # Altero no ONCONFIG o parametro DBSERVERALIASES , onde adiciono ao 
    # final dele o novo alias, idsmoon_tcpc
    DBSERVERALIASES idsmoon_tcpb,idsmoon_str,idsmoon_shm,idsmoon_mach11,idsmoon_er,idsmoon_tcpc
    
    # Sem a necessidade de atrapalhar qualquer outro usuário, apenas 
    # inicio o novo listener.
    $ onmode -P start idsmoon_tcpc
    
    # Verifico no log do banco se ele foi adicionado com sucesso.
    $ onstat -m
    IBM Informix Dynamic Server Version 11.50.UC6DE -- On-Line -- Up 00:17:35 -- 353916 Kbytes
    Message Log File: /opt/IBM/informix/tmp/idsmoon.log
    ...
    14:05:51  Starting listen thread for sqlhosts server idsmoon_tcpc
    14:05:52  Listen thread init SUCCESS
    
    # Verifico novamente no Informix se a nova porta está funcionando.
    $ onstat -g ntt
    IBM Informix Dynamic Server Version 11.50.UC6DE -- On-Line -- Up 00:20:57 -- 353916 Kbytes
    global network information:
      #netscb connects         read        write    q-free  q-limits  q-exceed alloc/max
      10/  10        0            0            0    0/   0    0/ 168   10/   0    0/   0
    Individual thread network information (times):
      netscb thread name    sid     open     read    write address
    4e8a1c48 soctcplst       40 14:09:11                   10.72.34.100|2122|soctcp
    4e4b28a8 soctcplst       13 13:48:26                   note-cim|56020|soctcp
    4e4528a8 soctcplst       12 13:48:26                   note-cim|55020|soctcp
    4e40d8a8 sm_discon       11 13:48:26
    4e3b68a8 sm_listen        9 13:48:26
    4e2b28a8 soctcplst        6 13:48:26                   *note-cim|2121|soctcp
    4e24e8a8 soctcplst        5 13:48:26                   *note-cim|2020|soctcp
    4e1f48a8 sm_poll          4 13:48:26
    4e19b8a8 ipcstrpoll       3 13:48:26
    4e1428a8 soctcppoll       2 13:48:26
    
    # Realizo a mesma verificação no Linux
    # netstat -nltp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.2:55020         0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1761/rpcbind
    tcp        0      0 127.0.0.2:56020         0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 0.0.0.0:2020            0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 0.0.0.0:2121            0.0.0.0:*               LISTEN      11564/oninit
    tcp        0      0 :::111                  :::*                    LISTEN      1761/rpcbind
    tcp        0      0 10.72.34.100:2122       :::*                    LISTEN      11564/oninit
    
    

4
Média: 4 (2 votos)
Sua avaliação: Nenhum

Comentar

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.