Este apêndice contém arquivos de configuração de amostra para o componente Dispatcher do Balanceador de Carga.
Os arquivos de amostra estão localizados no seguinte diretório:
#!/bin/bash # # configuration.sample - Arquivo de configuração de amostra para o componente Dispatcher # # # Assegure-se de que o usuário root seja aquele que executa este script. # # iam=`whoami` # if [ "$iam" != "root" ]if [ "$iam" != "root" ] # then # echo "Você deve efetuar login como root para executar este script" # exit 2 # fi # # Primeiro inicie o servidor # # dsserver start # sleep 5 # # Em seguida, inicie o executor # # dscontrol executor start # # O Dispatcher pode ser removido a qualquer momento usando os # comandos "dscontrol executor stop" e "dsserver stop" para # parar o executor e o servidor respectivamente antes da remoção do # software Dispatcher. # # A próxima etapa na configuração do Dispatcher é configurar o # NFA (Non-Forwarding Address) e o(s) endereço(s) do(s) cluster(s). # # O NFA é usado para acessar remotamente a máquina do Dispatcher # para propósitos de administração ou configuração. Esse # endereço é necessário, pois o Dispatcher encaminhará pacotes # para o(s) endereço(s) do(s) cluster(s). # # O endereço do CLUSTER é o nome do host (ou endereço IP) ao # qual os clientes remotos serão conectados. # # Em qualquer lugar neste arquivo, é possível usar nomes do host e endereços # IP alternadamente. # # NFA=hostname.domain.name # CLUSTER=www.yourcompany.com # echo "Carregando o Non-Forwarding Address" # dscontrol executor set nfa $NFA # # A próxima etapa na configuração do Dispatcher é criar # um cluster. O Dispatcher roteará pedidos enviados para o # endereço do cluster para as máquinas servidor correspondentes # definidas para esse cluster. Você pode configurar e processar # múltiplos endereços de cluster usando o Dispatcher. # Use uma configuração semelhante para CLUSTER2, CLUSTER3, etc. # # echo "Carregando o primeiro o endereço do CLUSTER" # dscontrol cluster add $CLUSTER # # Agora devemos definir as portas que este cluster usará. Quaisquer # pedidos recebidos pelo Dispatcher em uma porta definida serão # encaminhados para a porta correspondente de uma das máquinas # do servidor. # # echo "Criando portas para CLUSTER: $CLUSTER" # dscontrol port add $CLUSTER:20+21+80 # # A última etapa é incluir cada uma das máquinas servidor nas # portas neste cluster. # Novamente, é possível usar o nome do host ou o endereço IP # da máquinas servidor. # # SERVER1=server1name.domain.name # SERVER2=server2name.domain.name # SERVER3=server3name.domain.name # echo "Incluindo máquinas servidor" # dscontrol server add $CLUSTER:20+21+80: # $SERVER1+$SERVER2+$SERVER3 # # Iniciaremos agora os componentes de balanceamento de carga do # Dispatcher. O componente principal de balanceamento de carga é denominado # gerenciador e os segundos componentes de balanceamento de carga são os # orientadores. Se o gerenciador e os orientadores não estiverem em execução, o # Dispatcher enviará pedidos em um formato round-robin. Depois que o # gerenciador foi iniciado, as decisões de peso baseadas no número # de conexões novas e ativas são implementadas e os pedidos # recebidos são enviados ao melhor servidor. Os orientadores fornecem ao # gerenciador insight adicional em uma habilidade de servidores para pedidos de # serviço, e também detectando se um servidor está ativo. Se # um orientador detectar que um servidor está inativo, ele será # marcado como inativo (somente se as proporções do gerenciador tiverem sido # configuradas para incluir a entrada do orientador) e nenhum pedido adicional será # roteado para o servidor. # A última etapa da configuração dos componentes de balanceamento de carga # é configurar as proporções do gerenciador. O gerenciador atualiza o # peso de cada um dos servidores baseado em quatro políticas: # 1. O número de conexões ativas em cada servidor. # 2. O número de novas conexões para cada servidor. # 3. Entrada dos orientadores. # 4. Entrada do orientador de nível de sistema. # Essas proporções devem somar até 100. Como um exemplo, configurando as # proporções do gerenciador como # dscontrol manager proportions 48 48 0 0 # entrada de 48% de conexões novas e ativas serão fornecidas na # decisão de peso, os orientadores contribuirão com 4% e # a entrada do sistema não será considerada. # # NOTA: Por padrão as proporções do gerenciador são configuradas como 50 50 0 0 # # echo "Iniciando o gerenciador..." # dscontrol manager start # echo "Iniciando o orientador FTP na porta 21 ..." # dscontrol advisor start ftp 21 # echo "Iniciando o orientador HTTP na porta 80 ..." # dscontrol advisor start http 80 # echo "Iniciando o orientador Telnet na porta 23 ..." # dscontrol advisor start telnet 23 # echo "Iniciando o orientador SMTP na porta 25 ..." # dscontrol advisor start smtp 25 # echo "Iniciando o orientador POP3 na porta 110 ..." # dscontrol advisor start pop3 110 # echo "Iniciando o orientador NNTP na porta 119 ..." # dscontrol advisor start nntp 119 # echo "Iniciando o orientador SSL na porta 443 ..." # dscontrol advisor start ssl 443 # # echo "Configurando as proporções do gerenciador..." # dscontrol manager proportions 58 40 2 0 # # A etapa final da configuração da máquina do Dispatcher é definir # o alias do Network Interface Card (NIC). # # NOTA: NÃO use este comando em um ambiente de alta # disponibilidade. Os scripts go* configurarão a NIC e # o loopback, conforme necessário. # dscontrol executor configure $CLUSTER # Se o endereço do cluster estiver em uma NIC ou sub-rede diferente # do NFA, use o seguinte formato para o comando de configuração do cluster. # dscontrol executor configure $CLUSTER tr0 0xfffff800 # em que tr0 é a NIC (tr1 para a segunda placa do token ring, en0 # para a primeira placa de Ethernet) e 0xfffff800 é uma máscara # de sub-rede válida para o seu site. # # # Os seguintes comandos são configurados como os valores padrão. # Use estes comandos como um guia a ser alterado dos padrões. # dscontrol manager loglevel 1 # dscontrol manager logsize 1048576 # dscontrol manager sensitivity 5 # dscontrol manager interval 2 # dscontrol manager refresh 2 # # dscontrol advisor interval ftp 21 5 # dscontrol advisor loglevel ftp 21 1 # dscontrol advisor logsize ftp 21 1048576 # dscontrol advisor timeout ftp 21 unlimited # dscontrol advisor interval telnet 23 5 # dscontrol advisor loglevel telnet 23 1 # dscontrol advisor logsize telnet 23 1048576 # dscontrol advisor timeout telnet 23 unlimited # dscontrol advisor interval smtp 25 5 # dscontrol advisor loglevel smtp 25 1 # dscontrol advisor logsize smtp 25 1048576 # dscontrol advisor timeout smtp 25 unlimited # dscontrol advisor interval http 80 5 # dscontrol advisor loglevel http 80 1 # dscontrol advisor logsize http 80 1048576 # dscontrol advisor timeout http 80 unlimited # dscontrol advisor interval pop3 110 5 # dscontrol advisor loglevel pop3 110 1 # dscontrol advisor logsize pop3 110 1048576 # dscontrol advisor timeout pop3 110 unlimited # dscontrol advisor interval nntp 119 5 # dscontrol advisor loglevel nntp 119 1 # dscontrol advisor logsize nntp 119 1048576 # dscontrol advisor timeout nntp 119 unlimited # dscontrol advisor interval ssl 443 5 # dscontrol advisor loglevel ssl 443 1 # dscontrol advisor logsize ssl 443 1048576 # dscontrol advisor timeout ssl 443 unlimited #
O seguinte é um arquivo de configuração do Balanceador de Carga de amostra denominado configuration.cmd.sample para uso com o Windows.
@echo off rem configuration.cmd.sample - Arquivo de configuração de amostra para o componente Dispatcher. rem rem dsserver deve ser iniciado pelos Serviços rem rem rem Em seguida, inicie o executor rem rem call dscontrol executor start rem rem A próxima etapa na configuração do Dispatcher é configurar o rem NFA (Non-Forwarding Address) e configurar o(s) endereço(s) do(s) rem cluster(s). rem rem O NFA é usado para acessar remotamente a máquina rem do Dispatcher para propósitos de configuração de administração. Esse rem endereço é necessário, pois o Dispatcher encaminhará rem pacotes para o(s) endereço(s) do(s) cluster(s). rem rem O endereço do CLUSTER é o nome do host (ou endereço IP) ao qual rem os clientes remotos serão conectados. rem rem Em qualquer lugar neste arquivo, é possível usar nomes do host e endereços rem IP alternadamente. rem NFA=[Non-Forwarding Address] rem CLUSTER=[o nome do cluster] rem rem set NFA=hostname.domain.name rem set CLUSTER=www.yourcompany.com rem echo "Carregando o Non-Forwarding Address" rem call dscontrol executor set nfa %NFA% rem rem Os seguintes comandos são configurados como valores padrão. rem Use esses comandos para alterar os padrões rem call dscontrol executor set fintimeout 30 rem rem A próxima etapa na configuração do Dispatcher é criar rem um cluster. O Dispatcher roteará pedidos enviados para rem o endereço do cluster para as máquinas servidor correspondentes rem definidas para esse cluster. É possível configurar e servir rem múltiplos endereços de cluster usando o Dispatcher. rem Use uma configuração semelhante para CLUSTER2, CLUSTER3, etc. rem rem echo "Carregando o primeiro o endereço do CLUSTER" rem call dscontrol cluster add %CLUSTER% rem rem Agora devemos definir as portas que este cluster usará. Quaisquer rem pedidos recebidos pelo Dispatcher em uma porta definida serão rem encaminhados para a porta rem correspondente de uma das máquinas servidor. rem rem echo "Criando portas para CLUSTER: %CLUSTER%" rem call dscontrol port add %CLUSTER%:20+21+80 rem rem A última etapa é incluir cada uma das máquinas servidor nas rem portas neste cluster. Novamente, é possível usar o rem nome do host ou o endereço IP das máquinas servidor. rem rem set SERVER1=server1name.domain.name rem set SERVER2=server2name.domain.name rem set SERVER3=server3name.domain.name rem echo "Incluindo máquinas servidor" rem call dscontrol server add %CLUSTER%:20+21+80: rem %SERVER1%+%SERVER2%+%SERVER3% rem rem Iniciaremos agora os componentes de balanceamento de carga do rem Dispatcher. O componente principal de balanceamento de carga é denominado rem gerenciador e os segundos componentes de balanceamento de carga são os rem orientadores. Se o gerenciador e os orientadores não estiverem rem em execução, o Dispatcher enviará pedidos em um formato rem round-robin. Depois que o gerenciador foi iniciado, as decisões de peso rem baseadas no número de conexões novas e ativas são rem implementadas e os pedidos recebidos são enviados ao melhor rem servidor. Os orientadores fornecem ao gerenciador insight adicional rem em uma habilidade de servidores para pedidos de serviço, e também rem detectando se um servidor está ativo. Se um orientador detectar rem que um servidor está inativo, ele será marcado como inativo (somente se as rem as proporções do gerenciador tiverem sido configuradas para incluir a entrada rem do orientador) e nenhum pedido adicional será roteado para o servidor. rem A última etapa da configuração dos componentes de balanceamento de carga rem é configurar as proporções do gerenciador. O rem gerenciador atualiza o peso de cada um dos servidores baseado rem em quatro políticas: rem 1. O número de conexões ativas em cada servidor. rem 2. O número de novas conexões para cada servidor. rem 3. Entrada dos orientadores. rem 4. Entrada do orientador de nível de sistema. rem rem Essas proporções devem incluir até 100. Como um exemplo, rem configurando as proporções do cluster usando rem dscontrol cluster set <cluster> proportions 48 48 4 0 rem será fornecida entrada de 48% de conexões ativas e novas na rem decisão de peso, o orientador contribuirá com 4% e rem a entrada do sistema não será considerada. rem rem NOTA: Por padrão as proporções do gerenciador são configuradas como rem 50 50 0 0 rem echo "Iniciando o gerenciador..." rem call dscontrol manager start rem echo "Iniciando o orientador FTP na porta 21 ..." rem call dscontrol advisor start ftp 21 rem echo "Iniciando o orientador HTTP na porta 80 ..." rem call dscontrol advisor start http 80 rem echo "Iniciando o orientador Telnet na porta 23 ..." rem call dscontrol advisor start telnet 23 rem echo "Iniciando o orientador SMTP na porta 25 ..." rem call dscontrol advisor start smtp 25 rem echo "Iniciando o orientador POP3 na porta 110 ..." rem call dscontrol advisor start pop3 110 rem echo "Iniciando o orientador NNTP na porta 119 ..." rem call dscontrol advisor start nntp 119 rem echo "Iniciando o orientador SSL na porta 443 ..." rem call dscontrol advisor start ssl 443 rem rem echo "Configurando as proporções do cluster..." rem call dscontrol cluster set %CLUSTER% proportions 58 40 2 0 rem rem A etapa final da configuração da máquina do Dispatcher é rem criar o alias do Network Interface Card (NIC). rem rem NOTA: NÃO use este comando em um ambiente de alta rem disponibilidade. Os scripts go* configurarão a NIC e rem o loopback, conforme necessário. rem rem dscontrol executor configure %CLUSTER% rem Se o endereço do cluster estiver uma NIC ou sub-rede diferente rem do NFA, use o seguinte formato para o comando rem de configuração do cluster. rem dscontrol executor configure %CLUSTER% tr0 0xfffff800 rem em que tr0 é a NIC (tr1 para a segunda placa do token ring, rem en0 para a primeira placa de Ethernet) e 0xfffff800 é rem uma máscara de sub-rede válida para o seu site. rem rem rem Os seguintes comandos são configurados como valores padrão. rem Use estes comandos como um guia a ser alterado dos padrões. rem call dscontrol manager loglevel 1 rem call dscontrol manager logsize 1048576 rem call dscontrol manager sensitivity 5 rem call dscontrol manager interval 2 rem call dscontrol manager refresh 2 rem rem call dscontrol advisor interval ftp 21 5 rem call dscontrol advisor loglevel ftp 21 1 rem call dscontrol advisor logsize ftp 21 1048576 rem call dscontrol advisor timeout ftp 21 unlimited rem call dscontrol advisor interval telnet 23 5 rem call dscontrol advisor loglevel telnet 23 1 rem call dscontrol advisor logsize telnet 23 1048576 rem call dscontrol advisor timeout telnet 23 unlimited rem call dscontrol advisor interval smtp 25 5 rem call dscontrol advisor loglevel smtp 25 1 rem call dscontrol advisor logsize smtp 25 1048576 rem call dscontrol advisor timeout smtp 25 unlimited rem call dscontrol advisor interval http 80 5 rem call dscontrol advisor loglevel http 80 1 rem call dscontrol advisor logsize http 80 1048576 rem call dscontrol advisor timeout http 80 unlimited rem call dscontrol advisor interval pop3 110 5 rem call dscontrol advisor loglevel pop3 110 1 rem call dscontrol advisor logsize pop3 110 1048576 rem call dscontrol advisor timeout pop3 110 unlimited rem call dscontrol advisor interval nntp 119 5 rem call dscontrol advisor loglevel nntp 119 1 rem call dscontrol advisor logsize nntp 119 1048576 rem call dscontrol advisor timeout nntp 119 unlimited rem call dscontrol advisor interval ssl 443 5 rem call dscontrol advisor loglevel ssl 443 1 rem call dscontrol advisor logsize ssl 443 1048576 rem call dscontrol advisor timeout ssl 443 unlimited rem
O seguinte é um arquivo do orientador de amostra denominado ADV_sample.
/** * ADV_sample: O orientador HTTP do Balanceador de Carga * * * Esta classe define um orientador customizado de amostra do Balanceador de Carga. Como todos os * orientadores, este orientador customizado estende a função da base do orientador, * denominada ADV_Base. É a base do orientador que realmente executa a maioria das * funções do orientador, como relatório carregado novamente para o Balanceador de Carga * para uso no algoritmo de peso do Balanceador de Carga. A base do orientador também * executa conexões do soquete e operação de encerramento e fornece método de envio de recebimento * para uso pelo orientador. O próprio orientador é usado apenas para * enviar e receber dados para/da porta no servidor que está sendo * avisado. Os métodos TCP dentro da base do orientador são programados para calcular * o carregamento. Um sinalizador dentro do construtor na ADV_base sobrescreve o * carregamento existente pelo novo carregamento retornado do orientador, se desejado. * * Nota: Baseado em um valor configurado no construtor, a base do orientador fornece * o carregamento para o algoritmo de peso nos intervalos especificados. Se o orientador * real não foi concluído, para que possa retornar um carregamento válido, a base do * orientador usará o carregamento anterior. * * NOMENCLATURA * * A convenção de nomenclatura é a seguinte: * * - O arquivo deve estar localizado no seguinte diretório do Balanceador de Carga: * * lb/servers/lib/CustomAdvisors/ (lb\servers\lib\CustomAdvisors no Windows) * * - O nome do Orientador deve ser precedido por "ADV_". O orientador pode ser * iniciado apenas com o nome, no entanto; por exemplo, o orientador "ADV_sample" * pode ser iniciado com "amostra". * * - O nome do orientador deve ser com letras minúsculas. * * Portanto, com essas regras em mente, esta amostra é referida como: * * <base directory>/lib/CustomAdvisors/ADV_sample.class * *
* Os orientadores, assim como com o restante do Balanceador de Carga, deve ser compilado com a * versão de pré-requisito do Java. Para garantir o acesso às classes do Balanceador de Carga, certifique-se * de que o arquivo ibmlb.jar (localizado no subdiretório lib do diretório * base) esteja incluído na CLASSPATH do sistema. * * Métodos fornecidos pelo ADV_Base: * * - ADV_Base (Construtor): * * - Parms * - String sName = Nome do orientador * - String sVersion = Versão do orientador * - int iDefaultPort = Número da porta padrão para o orientador em * - int iInterval = Intervalo no qual avisar nos servidores * - String sDefaultName = Não utilizado. Deve ser transmitido como "". * - boolean replace = True - Substituem o valor de carregamento sendo calculado * pela base do orientador * False - incluídos no valor de carregamento sendo calculado * pela base do orientador * - Return * - Os construtores não possuem valores de retorno. * * Como a base do orientador é baseada em encadeamento, ela tem vários outros métodos * disponíveis para uso por um orientador. Esses métodos podem ser referidos usando * o parâmetro CALLER transmitido no getLoad(). * * Estes métodos são os seguintes: * * - send - Enviam um pacote de informações na conexão do soquete estabelecida * para o servidor na porta especificada. * - Parms * - String sDataString - Os dados a serem enviados no formulário de uma cadeia * - Return * - int RC - Se os dados foram enviados com êxito ou não: zero indica que os * dados foram enviados; um número inteiro negativo indica um erro. * * - receive - Recebem informações da conexão do soquete. * - Parms * - StringBuffer sbDataBuffer - Os dados recebidos durante a chamada de recebimento * - Return * - int RC - Se os dados foram recebidos com êxito ou não; zero * indica que os dados foram enviados; um número inteiro negativo indica * um erro. * * Se a função fornecida pela base do orientador não for suficiente, * você poderá criar uma função apropriada dentro do orientador e, * em seguida, os métodos fornecidos pela base do orientador serão ignorados. * * Uma questão importante relativa ao carregamento retornado é se, é preciso aplicá-la * ao carregamento que está sendo gerado dentro da base do orientador * ou substituí-la. Existem instâncias válidas de ambas as situações. * * Esta amostra é essencialmente o orientador HTTP do Balanceador de Carga. Ela funciona de maneira * muito simples: um pedido enviado--um pedido head de http--é emitido. Logo que uma * resposta é recebida, o método getLoad é terminado, sinalizando a base do orientador * para parar sincronização do pedido. Em seguida, o método é concluído. As * informações retornadas não são analisadas; o carregamento é baseado no tempo * necessário para executar as operações de envio e recebimento. */ pacote CustomAdvisors; importar com.ibm.internet.nd.advisors.*; public class ADV_sample extends ADV_Base implements ADV_MethodInterface { String COPYRIGHT = "(C) Copyright IBM Corporation 1997, All Rights Reserved.\n"; static final String ADV_NAME = "Sample"; static final int ADV_DEF_ADV_ON_PORT = 80; static final int ADV_DEF_INTERVAL = 7; // Nota: A maioria dos protocolos de servidor requerem um retorno de linha ("\r") e alimentação de // linha ("\n") no final das mensagens. Se for assim, inclua-as na // cadeia aqui. static final String ADV_SEND_REQUEST = "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " + "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n"; /** * Construtor. * * Parms: Nenhum; mas o construtor de ADV_Base possui vários parâmetros * que devem ser transmitidos para ele. * */ public ADV_sample() { super( ADV_NAME, "2.0.0.0-03.27.98", ADV_DEF_ADV_ON_PORT, ADV_DEF_INTERVAL, "", // não usado false); super.setAdvisor( this ); } /** * ADV_AdvisorInitialize * * Qualquer inicialização específica ao orientador que deve ocorrer depois que a * a base do orientador for iniciada. Este método é chamado apenas uma vez e, tipicamente, não * é usado. */ public void ADV_AdvisorInitialize() { return; } /** * getLoad() * * Este método é chamado pela base do orientador para concluir a operação do * orientador, baseada nos detalhes específicos para o protocolo. Neste orientador de amostra, * apenas um único envio e recebimento são necessários; se a lógica mais * complexa for necessária, múltiplos envios e recebimentos poderão ser emitidos. Por * exemplo, uma resposta poderá ser recebida e analisada. Baseados nas * informações aprendidas com isso, outro envio e recebimento puderam ser emitidos. * * Parâmetros: * * - iConnectTime - O carregamento atual conforme se refere à duração de tempo que * levou para ser concluída a conexão com o servidor por meio da * porta especificada. * * - caller - Uma referência à classe base do orientador em que os métodos * fornecidos pelo Balanceador de Carga devem executar pedidos TCP simples, * principalmente de envio e recebimento. * * Resultados: * * - O carregamento - Um valor expresso em milissegundos, que pode ser incluído * no carregamento existente ou que pode substituir o carregamento existente, conforme * determinado pelo sinalizador "substituir" do construtor. * * Quanto maior for o carregamento, mais tempo levará para que o servidor responda; * portanto, o peso se tornará menor dentro do Balanceador de Carga. * * Se o valor for negativo, um erro será assumido. Um erro de um * orientador indica que o servidor que o orientador está tentando alcançar não está * acessível e foi identificado como estando inativo. O Balanceador de Carga não * tentará fazer o balanceamento de carga par um servidor que está inativo. O Balanceador de Carga * continuará o balanceamento de carga para o servidor quando um valor positivo for recebido. * */ public int getLoad(int iConnectTime, ADV_Thread caller) { int iRc; int iLoad = ADV_HOST_INACCESSIBLE; // -1 // Enviar pedido tcp iRc = caller.send(ADV_SEND_REQUEST); if (iRc >= 0) { // Executar um recebimento StringBuffer sbReceiveData = new StringBuffer(""); iRc = caller.receive(sbReceiveData); /** * No modo de orientador normal (o sinalizador "substituir" é falso), o carregamento * retornado é 0 ou 1 indicando que o servidor está ativo ou inativo. * Se o recebimento tiver êxito, um carregamento de zero será retornado * indicando que o carregamento construído dentro do orientador base deve ser usado. * * Caso contrário, (o sinalizador "substituir" é verdadeiro), retorne o valor do carregamento desejado. */ if (iRc >= 0) { iLoad = 0; } } return iLoad; } } // Terminar - ADV_sample