Á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

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

Considerações iniciais

  • O serviço de indexação (Solr) precisa ser único e compartilhado por todas as instâncias, portanto deve ser isolado em outro ambiente - acesse mais informações;
  • O repositório de arquivos do Fluig (Volume) deve estar em uma pasta compartilhada por todas as instâncias;
  • A pasta de aplicativos "(FLUIG_HOME/appserver/apps") deve estar em uma pasta compartilhada por todas as instâncias;
  • O banco de dados dever ser único para todas as instâncias;
  • Todas as instâncias devem estar atualizadas com a mesma versão do fluig.
  • Cada instância precisa ter um nome diferente, configurada via arquivo FLUIG_HOME/appserver/domain/configuration/host.xml.

Preparando ambiente

Antes de começar a instalação, é preciso estar com o ambiente preparado. Faça o seguinte:

  1. Instale o banco de dados e crie uma instância;
  2. É mandatório a utilização de um servidor de Cache externo. A recomendação é utilizar o Redis (Instalar conforme as recomendações [TODO: Por link]);
  3. Escolha uma pasta em um servidor e torne-a acessível para todas as máquinas que farão parte do Load Balancer. Essa pasta conterá os arquivos que precisam ser compartilhados entre todas as instâncias. Conterá no mínimo duas pastas: apps e wcmdir.

Instalando primeiro nó

Para efeitos de simplificação, esse tutorial irá considerar que: 1) o servidor Realtime a ser usado será o instalado nesse nó; 2) a instalação será feita na pasta padrão (“/opt/fluig”).

O Fluig possui uma configuração especial para ser executado em cluster com Load Balancing. Essa configuração é habilitada durante a instalação.

Instale a aplicação, usando o procedimento normal, porém utilize a seguinte linha de comando:

Bloco de código
languagebash
titleNo Linux
sudo ./jdk-64/bin/java -jar -Dprofile=full-ha fluig-installer.jar

...

languagebash
titleNo Windows

...


  • 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 

...

  1. Encontre a chave "wcm/cacheServerAddress" e altere o valor para apontar para o servidor de cache configurado conforme recomendação [TODO: por Link].
  • 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 o fluig e os serviços

...

  • do fluig_RealTime

...

  • fluig_Indexer

...

  • .

...



Criando

...

uma segunda instância na mesma instalação

...

O fluig já vem preparado para Fluig permite executar uma segunda instância na mesma instalação. Basta habilitar e configurar parâmetros como memória, port offset e nome da instância., 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 [diretório_instalação]/appserver/domain/configuration/host.xml

...

  • 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-start="false" group="fluig" name="fluig2">
    <socket-bindings port-offset="150" socket-binding-group="full-sockets"/>
    <jvm name="default">
        <heap max-size="12g" size="4g"/>
        <jvm-options>
            <option value="-Dfile.encoding=utf8"/>
            <option value="-Djsse.enableSNIExtension=false"/>
            <option value="-XX:MaxMetaspaceSize=1024m"/>
            <option value="-Djavamelody.disabled=true"/>
        </jvm-options>
    </jvm>
</server>
Card
id2
labelPasso 2


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


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 for iniciado. Se informado false, será preciso iniciá-la manualmente posteriormente usando a ferramenta jboss-cli. A recomendação é que a primeira instância seja iniciada sozinha e posteriomente sejam iniciadas as demais instâncias.
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

...

 

Criando um terceiro nó em outra máquina

 

...

  • .


É 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
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 [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

Em “<system-properties>”, adicione uma nova propriedade:

Bloco de código
languagehtml/xml
 <property name="UseJK" value="true"/>

...

Altere o valor da propriedade de binding “wcm/globalDataDir” para apontar para a pasta compartilhada entre as instâncias:       

Bloco de código
languagehtml/xml
 <simple name="java:global/wcm/globalDataDir" value="{pasta global}"/>

...

Ainda no sysbsystem “jboss:domain:web” adicionar o conector AJP, logo abaixo do conector http:

Bloco de código
languagehtml/xml
<connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" enabled="true"/>

Na pasta “/opt/fluig/jboss/bin”, crie o script “node3.sh”. Em “ip-do-servidor” coloque o endereço IP do servidor onde o Fluig está rodando

Bloco de código
languagehtml/xml
 #!/bin/sh      
 ./standalone.sh -c standalone.xml -b {ip-do-servidor} -Djboss.server.base.dir=../standalone-node3 -Djboss.node.name=node3

Certifique-se que a pasta "/app/fluig/jboss/apps" seja a mesma pasta compartilhada utilizada pelos node1 e node2.

...

Inicie o primeiro nó pelo script “node3.sh”:

Bloco de código
languagehtml/xml
./node3.sh

Configurando o apache mod_proxy

Abra o arquivo httpd.conf e adicione o seguinte código:

 

html/
Bloco de código
language



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_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
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
language
xml
Header add Set-Cookie "FLUIGCOOKIE=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/" env=!VARCOOKIE
<VirtualHost *:80>
                ProxyRequests Off
                ProxyPreserveHost On

                <Proxy balancer://mycluster>
Order deny,allow Allow from all
                        BalancerMember http://{ip
-
 servidor
-
 1}:
8180
8080 route=
node1
fluig1
                        BalancerMember http://{ip
-
 servidor
-
 1}:
8280
8230 route=
node2
fluig2
                        BalancerMember http://{ip
-
 servidor
-
 2}:
8080
8230 route=
node3
fluig3
						ProxySet stickysession=FLUIGCOOKIE
                </Proxy>
<VirtualHost *:80> ProxyPreserveHost On


                <Location /balancer-manager>
                        SetHandler balancer-manager
                        Order Deny,Allow
                        Allow from all
                </Location>
                <Location />
                        Order allow,deny
                        Allow from all
                </Location>

                ProxyPass / balancer://mycluster/ stickysession=FLUIGCOOKIE nofailover=Off
DocumentRoot /var/www <Directory /var/www> Options -Indexes Order allow,deny Allow from all </Directory>
                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

...

  • irá funcionar.



Card
id4
labelPasso 4
titleLoad Balance RealTime
Aviso
titleImportante

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 
Nota
titleConfiguraçã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.

 

 

 

...