Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Alteração item 7
Informações
titleAtenção

Siga com atenção antes as instruções descritas em Balanceamento de carga, alta disponibilidade e tolerância falha - cluster

Considerações iniciais

A configuração em Load Balance é a forma mais simples de se conseguir uma distribuição de carga e algum nível de alta disponibilidade.

A grande desvantagem é a necessidade de afinidade de sessão, ou seja, uma vez que o usuário logou acessando em uma instância, sempre será direcionado para a mesma instância (se essa instância cair, terá que logar novamente).

 

Instalando a primeira instância

Esta página foi revisada para considerar as configurações de server do TOTVS Fluig Plataforma para a atualização 1.6.3 ou superiores.

Para atualizações entre 1.6.0 e 1.6.2 acesse: Como configurar a plataforma em load balance com Apache mod_proxy em Linux das releases 1.6.0 à 1.6.2?

Índice
outlinetrue
exclude.*ndice
stylenone



Pré-requisitos

...

Para atualizar os parâmetros de configuração, deve-se obedecer aos seguintes pré-requisitos:

  • O usuário deve ser administrador da plataforma;
  • O usuário deve ter acesso aos arquivos de configuração da plataforma.
Aviso
titleImportante

Antes de prosseguir com as instruções descritas nessa página, siga com atenção as instruções contidas na documentação Alta disponibilidade e Balanceamento de carga


Considerações iniciais

...

A configuração de balanceamento de carga (load balance) é a forma mais simples de se obter distribuição de carga e algum nível de alta disponibilidade.

Nota

Em ambientes com load balance, é muito importante manter todos os servidores com o horário sincronizado.

A grande desvantagem é a necessidade de afinidade de sessão, ou seja, uma vez que o usuário foi autenticado em uma instância, sempre será direcionado para a mesma instância. Nesse caso, se essa instância ficar indisponível, o usuário terá que logar novamente na aplicação.


Instalando a primeira instância

...

Siga os procedimentos abaixo para realizar a instalação da primeira instância do Fluig em um ambiente load balance.

Deck of Cards
historyfalse
idFirstNode
Card
defaulttrue
id1
labelPasso 1



Card
id2
labelPasso 2


  • Abra em um editor de texto o arquivo [diretório_instalação]/appserver/domain/configuration/domain.xml e altere as seguintes configurações:
  • Localize a propriedade de binding "java:global/wcm/globalDataDir" e altere-a informando o caminho da pasta compartilhada entre as instâncias;
Bloco de código
languagehtml/xml
<simple name="java:global/wcm/globalDataDir" value="GLOBAL_DATA_DIR/wcmdir"/>
  • Localize o subsystem "urn:com.totvs.technology.wcm:1.0" e altere-o informando o caminho da pasta compartilhada entre as instâncias;

Bloco de código
languagehtml/xml
<subsystem xmlns="urn:com.totvs.technology.wcm:1.0" dir="GLOBAL_DATA_DIR/apps" refresh="15"/>
Card
id3
labelPasso 3

  • Mova o conteúdo da pasta [diretório_instalação]/repository/wcmdir para a pasta GLOBAL_DATA_DIR/wcmdir
  • Mova o conteúdo da pasta [diretório_instalação]/appserver/apps para a pasta GLOBAL_DATA_DIR/apps


Card
id4
labelPasso 4


  • Configure o servidor de indexação (fluig Indexer) para ser executado em servidor separado, conforme instruções aqui.


Card
id5
labelPasso 5

  • Inicie os serviços fluig_Indexer, fluig_RealTime e em seguida, inicie o fluig.
  • Acesse a plataforma com o usuário "wcmadmin", crie uma nova empresa (tenant) e realize as configurações necessárias.
  • Pare
Deck of Cards
idFirstNode
Card
defaulttrue
id1
labelPasso 1

Faça uma instalação normal, conforme Guia de instalação fluig. Mas não inicie o fluig ainda.

Card
id2
labelPasso 2

Abra em um editor de texto o arquivo FLUIG_HOME/appserver/domain/configuration/domain.xml e altere algumas configurações:

  1. Encontre a propriedade de binding "java:global/wcm/globalDataDir" e altere para apontar para a pasta compartilhada entre as instâncias;

    Bloco de código
    languagehtml/xml
    <simple name="java:global/wcm/globalDataDir" value="GLOBAL_DATA_DIR/wcmdir"/>
  2. Encontre o subsystem "urn:com.totvs.technology.wcm:1.0" e altere para apontar para a pasta compartilhada entre as instâncias;

    Bloco de código
    languagehtml/xml
    <subsystem xmlns="urn:com.totvs.technology.wcm:1.0" dir="GLOBAL_DATA_DIR/apps" refresh="15"/>
Card
id3
labelPasso 3

Abra em um editor de texto o arquivo FLUIG_HOME/repository/wcmdir/config/configuration.properties e altere algumas configurações:

  1. Encontre a chave "wcm/cacheServerAddress" e altere o valor para apontar para o servidor de cache configurado conforme recomendação [TODO: por Link].
Card
id4
labelPasso 4
  1. Mova o conteúdo da pasta FLUIG_HOME/repository/wcmdir para a pasta GLOBAL_DATA_DIR/wcmdir
  2. Mova o conteúdo da pasta FLUIG_HOME/appserver/apps para a pasta GLOBAL_DATA_DIR/apps.
Card
id5
labelPasso 5

Configure o fluig Indexer (Solr) para ser executado em servidor separado, confome instruções aqui.

Card
id6
labelPasso 6
  • Inicie os serviços do cache, fluig_Indexer e fluig_RealTime e em seguida inicie o fluig.
  • Acesse o fluig com o usuário "wcmadmin", crie o tenant e faça as configurações necessárias.
  • Derrube
    • o fluig e os serviços do fluig_RealTime
    • fluig_Indexer
     e do cache
    • .

    ...



    Criando uma segunda instância na mesma instalação

    ...

    O fluig Fluig permite executar uma segunda instância na mesma instalação, ou seja, sem a necessidade de instalar tudo novamente.

    Deck of Cards
    historyfalse
    idSecondInstance
    Card
    defaulttrue
    id1
    labelPasso 1
    • Abra em um editor de texto o arquivo 
    FLUIG
    • [diretório_
    HOME
    • instalação]/appserver/domain/configuration/host.xml
    . Procure pela tag <servers>, dentro uma tag <server>
    • Localize a tag <servers>
    • Dentro dela haverão tags chamadas <server>
    .
    • Adicione uma nova tag <server>, conforme exemplo:
    Bloco de código
    languagexml
    themeEclipse
    titlehost.xml
            <server auto-<server auto-start="truefalse" group="fluig" name="fluig2">
                <socket-bindings port-offset="150" socket-binding-group="full-sockets"/>
                <jvm name="default">
                    <heap max-size="4g12g" size="2g4g"/>
                    <jvm-options>
                        <option value="-Dfile.encoding=utf8"/>
                        <option <option value="-Djsse.enableSNIExtension=false"/>
                        <option value="-XX:MaxMetaspaceSize=512m1024m"/>
                        <option value="-Djavamelody.disabled=true"/>
                    </jvm-options>
                </jvm>
            </server>
    Card
    id2
    labelPasso 2


    • Certifique-se que o atributo
    "
    • name
    "
    • contenha um valor que
    nunca se repita
    • jamais será repetido em outra instância.
    • A primeira instância sempre deverá se
    chamará
    • chamar "fluig1", enquanto as demais
    são livres os nomes
    • instâncias podem ter qualquer nome definido.


    • a ferramenta jboss-cli. A recomendação é que a primeira instância seja iniciada sozinha e posteriomente sejam iniciadas as demais instâncias.
    Card
    id3
    labelPasso 3

    • O atributo
    "
    • auto-start
    "
    • indica se a instância deve (true) ou não (false) ser iniciada imediatamente quando o
    fluig
    • Fluig for iniciado. Se informado
    "
    • false
    "
    • , será preciso iniciá-la manualmente posteriormente usando
    o painel de controle do servidor de aplicação.
    Card
    id
    Card
    id4
    labelPasso 4

    • Caso desejar ou for necessário, altere o atributo
    "
    • port-offset
    "
    • da tag
    "
    • socket-bindings
    "
    • . Cada nova instância precisa de um valor diferente (múltiplos de 150 são uma boa indicação).


    Card
    id5
    labelPasso 5

    • Ajuste as configurações de memória na tag
    "
    • heap
    "
    • .


    É possível adicionar mais instâncias na mesma instalação. Basta replicar toda a seção

    ...

    <server>

    ...

    e tomar o cuidado de alterar, pelo menos, os atributos

    ...

    port-offset

    ...

    e

    ...

    name

    ...

    .

    As instâncias que forem configuradas para não iniciar automaticamente (auto-start="false") devem ser iniciadas manualmente utilizando a ferramenta jboss-cli, que se encontra em [diretório_instalação]/appserver/bin, com o seguinte comando:

    No Linux:

    Bloco de código
    languagebash
    titleLinux
    ./jboss-cli.sh --controller="<ip-da-maquina>:9990" --connect --command="/host=master/server-config=fluig2:start"

    No Windows:

    Bloco de código
    languagebash
    titleWindows
    jboss-cli.bat --controller="<ip-da-maquina>:9990" --connect --command="/host=master/server-config=fluig2:start"

    Onde <ip-da-maquina> é o endereço IP/hostname configurado no arquivo host.xml (localizado em [diretório_instalação]/appserver/domain/configuration), na seção:

    Bloco de código
    <interface name="management">
        <inet-address value="192.168.2.3"/>
    </interface>

    Criando uma instância em outra máquina

    ...

    Deck of Cards
    historyfalse
    idThirdInstance

     

    Criando uma instância em outra máquina

    Deck of Cards
    idThirdInstance
    Card
    id1
    labelPasso 1

    Instale a aplicação pelo procedimento normal e siga as instruções até o procedimento antes de iniciar o servidor.

    Card
    id2
    labelPasso 2

    Abra em um editor de texto o arquivo FLUIG_HOME/appserver/domain/configuration/host.xml. Procure pela tag <servers>, dentro há uma tag <server>. Altere o atributo "name" dessa tag. O valor desse atributo precisa ser diferente em cada instância.

    Configurando o balanceador - mod_proxy

    O fluig homologa o Apache com o módulo mod_proxy para fazer um balanceamento de carga.

    Deck of Cards
    idModProxy
    Card
    id1
    labelPasso 1


    • Instale
    o servidor HTTP Apache, versão 2.4.x.
    • a aplicação pelo procedimento normal e siga as instruções até o procedimento antes de iniciar o servidor.


    Card
    id2
    labelPasso 2

    • Abra em um editor de texto o arquivo [diretório_instalação]/appserver/domain/configuration/host.xml.
    • Localize a tag <servers>.
    • Dentro dela haverão tags chamadas <server>. Altere o atributo name dessas tags. O valor desse atributo precisa ser diferente em cada instância.



    Configurando o balanceador (mod_proxy)

    ...

    O Fluig homologa o Apache com o módulo mod_proxy para fazer o balanceamento de carga.

    Deck of Cards
    historyfalse
    idModProxy



    Card
    defaulttrue
    id1
    labelPasso 1



    Card
    id2
    labelPasso 2


    • Configure o Apache para carregar os módulos necessários (comumente feito através do arquivo /etc/apache2/mods-enabled/mod_proxy.load), conforme abaixo.
    Nota

    A ordem de carregamento dos módulos é extremamente importante.

    Bloco de código
    languagetext
    LoadModule lbmethod_bybusyness_module /usr/lib/apache2/modules/mod_lbmethod_bybusyness.so
    LoadModule proxy

    Configure o Apache para carregar os módulos necessários (comumente feito através do arquivo /etc/apache2/mods-enabled/mod_proxy.load), conforme abaixo (Obs.: a ordem é extremamente importante):

     

    Bloco de código
    languagetext
    LoadModule lbmethod_bybusyness_module /usr/lib/apache2/modules/mod_lbmethod_bybusyness.so
    LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
    LoadModule slotmem_shm_module /usr/lib/apache2/modules/mod_slotmem_shm.so
    LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
    LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
    Informações

    A primeira linha indica o tipo de balanceamento que será feito. No exemplo, por carga do servidor. Há outras formas, consultar o manual do Apache aqui.

    .so
    LoadModule slotmem_shm_module /usr/lib/apache2/modules/mod_slotmem_shm.so
    LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
    LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
    LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
    LoadModule lbmethod_byrequests_module /usr/lib/apache2/modules/mod_lbmethod_byrequests.so
    • A primeira linha indica o tipo de balanceamento que será feito. No exemplo acima, ele é feito por carga do servidor. Para conhecer outras formas, consulte o manual do Apache.


    Card
    id3
    labelPasso 3
    • Habilite o mod_proxy (em geral isso é feito criando o arquivo /etc/apache2/sites-enabled/mod_proxy.conf).
    Bloco de código
    languagexml
    Header add Set-Cookie "FLUIGCOOKIE=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/" env=!VARCOOKIE
    <VirtualHost *:80>
    
    Card
    id3
    labelPasso 3

    Habilite o mod_proxy (comumente feito criando o arquivo /etc/apache2/sites-enabled/mod_proxy.conf).

    Bloco de código
    languagexml
    <VirtualHost *:80>
                    ProxyRequests Off
                    ProxyPreserveHost On
    
                    <Proxy balancer://mycluster>
                            BalancerMember http://{ip servidor 1}:8080 route=fluig1
                         ProxyRequests Off
       BalancerMember http://{ip servidor 1}:8230 route=fluig2
                 ProxyPreserveHost On
    
                    BalancerMember<Proxy httpbalancer://{ip servidor 2}:8230 route=fluig3
    mycluster>
                    </Proxy>
    
              BalancerMember http://{ip servidor 1}:8080 route=fluig1
      <Location /balancer-manager>
                         BalancerMember http://{ip servidor SetHandler balancer-manager1}:8230 route=fluig2
                            Order Deny,Allow
        BalancerMember http://{ip servidor 2}:8230 route=fluig3
    						ProxySet stickysession=FLUIGCOOKIE
                    </Proxy>
    
           Allow from all
           <Location /balancer-manager>
            </Location>
                    <Location />SetHandler balancer-manager
                            Order allowDeny,denyAllow
                            Allow from all
                    </Location>
    
                    ProxyPass<Location / balancer://mycluster/ stickysession=FLUIGCOOKIE nofailover=Off
    >
                           ProxyPassReverse / balancer://mycluster/
    </VirtualHost>
    

     

    Bloco de código
    languagehtml/xml
    Header add Set-Cookie "FLUIGCOOKIE=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/" env=!VARCOOKIE <Proxy balancer://mycluster> Order deny,allow
    Order allow,deny
                            Allow from all
    
    BalancerMember http://{ip-servidor-1}:8180 route=node1 BalancerMember http://{ip-servidor-1}:8280 route=node2 BalancerMember http://{ip-servidor-2}:8080 route=node3 ProxySet stickysession=FLUIGCOOKIE </Proxy> <VirtualHost *:80> ProxyPreserveHost On ProxyPass / balancer://mycluster/ stickysession=FLUIGCOOKIE nofailover=Off DocumentRoot /var/www <Directory /var/www> Options -Indexes Order allow,deny Allow from all </Directory> </VirtualHost>

    ...

                    </Location>
    
                    ProxyPass / balancer://mycluster/ stickysession=FLUIGCOOKIE nofailover=Off
                    ProxyPassReverse / balancer://mycluster/
    </VirtualHost>
    Aviso
    titleAtenção
    • Cada “BalancerMember” indica um servidor

    ...

    • e deve apontar para o IP e porta corretos.

    ...

    • Um cookie chamado “FLUIGCOOKIE”

    ...

    • é criado para manter a afinidade da sessão. Sem

    ...

    • o cookie, o procedimento não

    ...

    note
    • irá funcionar.



    Card
    id4
    labelPasso 4
    titleLoad Balance RealTime
    Aviso
    title
    Configuração do Fluig

    Altere a tag abaixo no arquivo $FLUIG_HOME/jboss/standalone/configuration/standalone.xml de cada servidor do Fluig para:

    <subsystem xmlns="urn:jboss:domain:web:1.5" default-virtual-server="default-host" instance-id="${jboss.node.name:fluignd2}" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="https" socket-binding="http" proxy-name="<url_virtual_host_fluig>" proxy-port="<porta_virtual_host_fluig>"/>
    <connector name="httplog" protocol="HTTP/1.1" scheme="http" socket-binding="httplog"/>
    <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" enabled="true"/>
    <virtual-server name="default-host" enable-welcome-root="false">
    <sso cache-container="web" cache-name="sso" reauthenticate="false"/>
    </virtual-server>
    </subsystem>

    Onde:

    • <url_virtual_host_fluig>: é a URL definida no Apache para acessar o Fluig;
    • <porta_virtual_host_fluig>: é a porta definida no Apache para acessar o Fluig.

     

     

     

    <simple name="java:global/wcm/globalDataDir" value="{pasta global}/wcmdir"/>

    猼慰瑳汹㵥昢湯⵴慦業祬洺湯獯慰散㸢猼慰瑳汹㵥昢湯⵴敷杩瑨戺汯㭤潣潬㩲㔣昴晦㭦慢正牧畯摮挭汯牯⌺晦晦晦∻☾瑬猻捯敫⵴楢摮湩獧㰠猯慰㹮猼慰瑳汹㵥昢湯⵴敷杩瑨戺汯㭤潣潬㩲㔣昴㕦㬴慢正牧畯摮挭汯牯⌺晦晦晦∻瀾牯⵴景獦瑥⼼灳湡㰾灳湡猠祴敬∽潣潬㩲〣〰〰㬰慢正牧畯摮挭汯牯⌺晦晦晦∻㴾⼼灳湡㰾灳湡猠祴敬∽潦瑮眭楥桧㩴潢摬挻汯牯⌺晦㐵晦戻捡杫潲湵ⵤ潣潬㩲昣晦晦㭦㸢ㄢ〵㰢猯慰㹮猼慰瑳汹㵥昢湯⵴敷杩瑨戺汯㭤潣潬㩲㔣昴晦㭦慢正牧畯摮挭汯牯⌺晦晦晦∻‾⼼灳湡㰾灳湡猠祴敬∽潦瑮眭楥桧㩴潢摬挻汯牯⌺㐵晦㐵戻捡杫潲湵ⵤ潣潬㩲昣晦晦㭦㸢潳正瑥戭湩楤杮札潲灵⼼灳湡㰾灳湡猠祴敬∽潣潬㩲〣〰〰㬰慢正牧畯摮挭汯牯⌺晦晦晦∻㴾⼼灳湡㰾灳湡猠祴敬∽潦瑮眭楥桧㩴潢摬挻汯牯⌺晦㐵晦戻捡杫潲湵ⵤ潣潬㩲昣晦晦㭦㸢昢汵⵬慨猭捯敫獴㰢猯慰㹮猼慰瑳汹㵥昢湯⵴敷杩瑨戺汯㭤潣潬㩲㔣昴晦㭦慢正牧畯摮挭汯牯⌺晦晦晦∻⼾朦㭴⼼灳湡㰾牢㰾猯慰㹮

    Atenção

     

    ...

    Importante

    O procedimento abaixo deve ser realizado para utilizar o serviço de Realtime em Load balance.

    Passos para usar o Load Balance do Realtime

    Bloco de código
    languagetext
    LoadModule rewrite_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so
    • Realizadas as configurações acima, adicionar o código abaixo ao arquivo de configuração do servidor (Passo 3).
    Bloco de código
    Listen 8888
    Header add Set-Cookie "SERVERID=sticky.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    AllowConnect 8888
     <VirtualHost *:8888>
    	
    	ProxyRequests Off
        ProxyPreserveHost On
       
    
        <Proxy balancer://mycluster1>
                BalancerMember http://{ip servidor realtime1}:8888 route=load1
                BalancerMember http://{ip servidor realtime2}:8888 route=load2
                ProxySet stickysession=SERVERID
        </Proxy>
        
        <Location /balancer-manager>
                SetHandler balancer-manager
                Order Deny,Allow
                Allow from all
        </Location>
        <Location />
                Order allow,deny
                Allow from all
        </Location>
    
    
        ProxyPass / balancer://mycluster1/ stickysession=SERVERID nofailover=Off
        ProxyPassReverse / balancer://mycluster1/
    </VirtualHost>
    
    
    
    Listen 7777
    Header add Set-Cookie "SERVERID=sticky.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    AllowConnect 7777
     <VirtualHost *:7777>
    	
    	ProxyRequests Off
        ProxyPreserveHost On
    
    
        <Proxy "balancer://nodes_polling">
                BalancerMember http://{ip servidor realtime1}:7777 route=read1
                BalancerMember http://{ip servidor realtime2}:7777 route=read2
                ProxySet stickysession=SERVERID
        </Proxy>
        
        <Proxy "balancer://nodes_ws">
                BalancerMember ws://{ip servidor realtime1}:7777 route=read1
                BalancerMember ws://{ip servidor realtime2}:7777 route=read2
                ProxySet stickysession=SERVERID
        </Proxy>
        
        
        RewriteEngine On
    	RewriteCond %{HTTP:Upgrade} =websocket [NC]
    	RewriteRule /(.*) balancer://nodes_ws/$1 [P,L]
    	RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    	RewriteRule /(.*) balancer://nodes_polling/$1 [P,L] 
    
        
    </VirtualHost>

    Ambiente HTTPS

    ...

    Ambientes HTTPS

    Quando o usuário estiver usando um ambiente HTTPS, é necessário que as flags de segurança "Secure" e "HttpOnly" dos cookies estejam habilitadas na sessão. Para isso, siga a instrução abaixo:

    • Editar o arquivo /etc/apache2/sites-enabled/mod_proxy.conf e adicionar a seguinte linha no final do arquivo:
    Bloco de código
    Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure