Consideraciones iniciales
- El servicio de indexación (Solr) precisa ser único y compartido por todas las instancias, por lo tanto se debe aislar en otro ambiente - acceda más informaciones;
- Todas las instancias deberán tener acceso a una misma carpeta compartida, donde será el repositorio de archivos del sistema;
- El banco de datos debe ser único para todas las instancias;
- Es preciso mantener afinidad de sesión, es decir, una vez que el usuario inicio sesión accediendo en una instancia, siempre será direccionado a la misma instancia.
Preparar Entorno...
Antes de comenzar la instalación, es preciso estar con el ambiente preparado. Haga lo siguiente:
- Instale el banco de datos y cree una instancia;
- Instale el memcached estándar de la distribución y si es necesario haga las configuraciones;
- Elija una carpeta y un servidor y hágala accesible a todas las máquinas que harán parte del Load Balancer.
Instalando el primer nudo
Para efectos de simplificación, ese tutorial considerará que: Los servidores Solr y Realtime que se usarán serán los instalados en ese nudo; la instalación se realizará en la carpeta estándar (“/opt/fluig”).
- Instale
la aplicación por el procedimiento normal, solamente tomando el
cuidado de:
- Informe la URL correcta del banco de datos;
- Informe
la URL correcta para el servidor memcached.
- Haga una copia de la carpeta “apps” (localizada en
/opt/fluig/jboss) a otra llamada “appslb”;
cp -Rp apps appslb
- Haga una copia de la carpeta “standalone” a otra llamada
“standalone-node1”.
cp -Rp standalone standalone-node1
- Edite el archivo standalone-node1/configuration/standalone.xml:
En “<system-properties>”, agregue una nueva propiedad:
<property name="UseJK" value="true"/>
En el subsystem “com.totvs.technology.wcm” agregue el atributo “dir” apuntando a la carpeta “nodelb”. Se verá así:
<subsystem xmlns="urn:com.totvs.technology.wcm:1.0" refresh="15" dir="/opt/fluig/jboss/appslb"/
Modifique el valor de la propiedad de binding “wcm/globalDataDir” para apuntar a la carpeta compartida entre las instancias:
<simple name="java:global/wcm/globalDataDir" value="{pasta global}"/>
La propiedad “wcm/applicationUploadDir” debe apuntar a la misma carpeta “nodelb”:
<simple name="java:global/wcm/applicationUploadDir" value="/opt/fluig/jboss/appslb"/>
- En el sysbsystem “jboss:domain:web” agregar
el atributo instance-id="${jboss.node.name:node0}"
Aun en el sysbsystem “jboss:domain:web” agregar el conector AJP, justo debajo del conector http:
<connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" enabled="true"/>
En la carpeta “/opt/fluig/jboss/bin”, cree el script “node1.sh”. En “ip-do-servidor” coloque la dirección IP del servidor donde el TOTVS Fluig Plataforma se está ejecutando;
#!/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
- Excluya
de la carpeta “appslb” el archivo
“foundation-addon-indexer-web.war”, que es el servidor Solr;
- Excluya
de la carpeta “apps” todos los archivos, EXCEPTO el archivo
“foundation-addon-indexer-web.war”;
Inicie el primer nudo por el script “node1.sh”:
./node1.sh
- Después
de iniciado y conseguir iniciar sesión con el usuario “wcmadmin”,
derribe el TOTVS Fluig Plataforma;
- Conecte
en el banco de datos y establezca el valor del campo server_url, de
la tabla wcm_configuration. La URL guardada contiene el puerto 8080,
modifique el valor para no contener el puerto (o modifique para el
puerto del apache, en el caso que no esté en el puerto 80);
- Inicie
el Fluig nuevamente por el script “node1.sh”;
- Inicie el Fluig version Solr solamente por el script estándar “standalone.sh”;
Creando un segundo nudo en la misma instalación
- Haga una copia de la carpeta “standalone-node1” para otra
llamada “standalone-node2”.
cp -Rp standalone-node1 standalone-node2
En la carpeta “/opt/fluig/jboss/bin”, cree el script “node2.sh”. En “ip-do-servidor” coloque la dirección IP del servidor donde el Fluig se está ejecutando.
#!/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
Creando un tercer nudo en otra máquina
- Instale la aplicación por el procedimiento normal, solamente
tomando el cuidado de:
- Informe la URL correcta del banco de datos;
- Informe
la URL correcta para el servidor memcached.
- Edite el archivo standalone /configuration/standalone.xml:
En “<system-properties>”, agregue una nueva propiedad:
<property name="UseJK" value="true"/>
- Aun
en “<system-properties>”, modifique la propiedad
“totvs/solrURL” informando la URL del Solr de la primera
instancia. Simplemente cambie el IP por el IP del servidor de la
primera instancia.
Modifique el valor de la propiedad de binding “wcm/globalDataDir” para apuntar a la carpeta compartida entre las instancias:
<simple name="java:global/wcm/globalDataDir" value="{pasta global}"/>
Modifique el valor de la propiedad de binding “wcm/cacheServerAddress” para apuntar al memcached:
<simple name="java:global/wcm/cacheServerAddress" value="{ip servidor 1}:11211"/>
- Modificar
las propiedades de binding “node.chat.url” y “node.realtime.url”
para apuntar al IP de la primera instancia.
- En
el sysbsystem “jboss:domain:web” agregar el
atributo instance-id="${jboss.node.
name:node0}"
Aun en el sysbsystem “jboss:domain:web” agregar el conector AJP, justo debajo del conector http:
<connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" enabled="true"/>
En la carpeta “/opt/fluig/jboss/bin”, cree es script “node3.sh”. En “ip-do-servidor” coloque la dirección IP del servidor donde el Fluig se está ejecutando
#!/bin/sh ./standalone.sh -c standalone.xml -b {ip-do-servidor} -Djboss.server.base.dir=../standalone-node3 -Djboss.node.name=node3
- Excluya
de la carpeta “apps” el archivo “foundation-addon-indexer-web.war”,
que es el servidor Solr.
Inicie el primer nudo por el script “node3.sh”:
./node3.sh
Configurando el apache mod_proxy
Abra el archivo httpd.conf y agregue el siguiente código:
Header add Set-Cookie "FLUIGCOOKIE=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/" env=!VARCOOKIE <Proxy balancer://mycluster> Order deny,allow 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>
Qué es importante entender aquí:
- Cada “BalancerMember” indica un servidor, debe apuntar al IP y puerto correctos.
- Se crea un Cookie llamado “FLUIGCOOKIE”, usado para mantener la afinidad de la sesión. Sin eso, no funciona.