Listeners dinâmicos
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
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
- 29 leituras





Comentar