Índice |
---|
outline | true |
---|
exclude | .*ndice |
---|
style | none |
---|
|
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.
Considerações iniciais
...
A configuração em Load Balance de balanceamento de carga (load balance) é a forma mais simples de se conseguir uma 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 logou acessando foi autenticado em uma instância, sempre será direcionado para a mesma instância (. Nesse caso, se essa instância cairficar indisponível, o usuário terá que logar novamente )na aplicação.
Instalando primeiro nó
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 |
---|
|
deck |
Card |
---|
default | true |
---|
id | 1 |
---|
label | Passo 1 |
---|
|
fluig. Mas não inicie o fluig ainda
|
Card |
---|
|
- Abra em um editor de texto o arquivo
FLUIGHOME- instalação]/appserver/domain/configuration/domain.xml e altere
algumas - as seguintes configurações:
Encontre - Localize a propriedade de binding "java:global/wcm/globalDataDir" e altere
para apontar para a - -a informando o caminho da pasta compartilhada entre as instâncias;
< simple name="java:global/wcm/globalDataDir" | value="GLOBAL_DATA_DIR/wcmdir"/> | Encontre para apontar para a < subsystem Bloco de código |
---|
| <subsystem xmlns="urn:com.totvs.technology.wcm:1.0" | dir="GLOBAL_DATA_DIR/apps" | |
|
Para efeitos de simplificação, esse tutorial irá considerar que: o servidor Realtime a ser usado será o instalado nesse nó; a instalação será feita na pasta padrão (“/opt/fluig”).
...
Em “<system-properties>”, adicione uma nova propriedade:
Bloco de código |
---|
|
<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 |
---|
|
<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 |
---|
|
<connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" enabled="true"/> |
...
Bloco de código |
---|
|
#!/bin/sh
./standalone.sh -c standalone.xml -b {ip-do-servidor} -Djboss.server.base.dir=../standalone-node1 -Djboss.node.name=node1 -Djboss.socket.binding.port-offset=100 |
...
Inicie o primeiro nó pelo script “node1.sh”:
Bloco de código |
---|
|
./node1.sh |
...
Card |
---|
|
- 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 |
---|
|
- Configure o servidor de indexação (fluig Indexer) para ser executado em servidor separado, conforme instruções aqui.
|
Card |
---|
|
- 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 e fluig_Indexer.
|
|
Criando uma segunda instância na mesma instalação
...
O Fluig permite executar uma segunda instância na mesma instalação, ou seja, sem a necessidade de instalar tudo novamente.
Deck of Cards |
---|
history | false |
---|
id | SecondInstance |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Passo 1 |
---|
| - Abra em um editor de texto o arquivo [diretório_instalação]/appserver/domain/configuration/host.xml
- Dentro dela haverão tags chamadas <server>
- Adicione uma nova tag <server>, conforme exemplo:
Bloco de código |
---|
language | xml |
---|
theme | Eclipse |
---|
title | host.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 |
---|
|
- 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 |
---|
|
- 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 |
---|
|
- 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 |
---|
|
- 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 |
---|
|
./jboss-cli.sh --controller="<ip-da-maquina>:9990" --connect --command="/host=master/server-config=fluig2:start" |
No Windows:
Bloco de código |
---|
|
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 |
---|
history | false |
---|
id | ThirdInstance |
---|
|
Card |
---|
|
- Instale a aplicação pelo procedimento normal e siga as instruções até o procedimento antes de iniciar o servidor.
|
Card |
---|
|
- 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.
Criando um segundo nó na mesma instalação
...
Na pasta “/opt/fluig/jboss/bin”, crie o script “node2.sh”. Em “ip-do-servidor” coloque o endereço IP do servidor onde o Fluig está rodando.
Bloco de código |
---|
|
#!/bin/sh
./standalone.sh -c standalone.xml -b {ip-do-servidor} -Djboss.server.base.dir=../standalone-node2 -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=200 |
Criando um terceiro nó em outra máquina
...
Em “<system-properties>”, adicione uma nova propriedade:
Bloco de código |
---|
|
<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 |
---|
|
<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 |
---|
|
<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 |
---|
|
#!/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 |
---|
|
./node3.sh |
Configurando o apache mod_proxy
Abra o arquivo httpd.conf e adicione o seguinte código:
Bloco de código |
---|
language | html/
Card |
---|
default | true |
---|
id | 1 |
---|
label | Passo 1 |
---|
|
|
Card |
---|
|
- 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 |
---|
| 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 |
|
Card |
---|
| - Habilite o mod_proxy (em geral isso é feito criando o arquivo /etc/apache2/sites-enabled/mod_proxy.conf).
|
| | 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 |
| --8180node1
fluig1
BalancerMember http://{ip |
| --8280node2
fluig2
BalancerMember http://{ip |
| --8080node3
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 |
---|
| - 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
|
|
|
...
Card |
---|
id | 4 |
---|
label | Passo 4 |
---|
title | Load Balance RealTime |
---|
| Aviso |
---|
| O procedimento abaixo deve ser realizado para utilizar o serviço de Realtime em Load balance. |
Bloco de código |
---|
| 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 |
---|
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.
|
...