Mejora de la alta disponibilidad en HCL Commerce con IBM Db2 HADR

Puede habilitar IBM Db2 HADR para garantizar que el sitio de HCL Commerce esté disponible para los compradores en casos de anomalía de base de datos o de paradas planificadas. HADR también garantiza que los datos de negocio se puedan recuperar con una interrupción mínima del sitio.

Procedure

  1. Habilite la recuperación ante desastres de alta disponibilidad en la base de datos de IBM Db2.
  2. Habilite el redireccionamiento de cliente automático IBM Db2 (ACR) en HCL Commerce.
    Asegúrese de que los datos se conserven en los contenedores Docker mediante las propiedades personalizadas en las fuentes de datos de Transacción y Búsqueda. En el caso de un escenario de adquisición de HADR, esto le permitirá pasar sin problemas de utilizar una base de datos primaria a una de reserva. Las propiedades personalizadas que se deben actualizar y que permitirán el ACR IBM Db2 tanto para el contenedor de Transacción como para el de Búsqueda, son:
    • clientRerouteAlternateServerName (es obligatorio),
    • clientRerouteAlternatePortNumber (obligatorio),
    • maxRetriesForClientReroute (opcional) y
    • retryIntervalForClientReroute (opcional).
      Note: El intervalo de reintento para los reintentos automáticos para el redireccionamiento de cliente se mide en segundos.
    Añada estas variables y sus valores al archivo de configuración apropiado para su entorno (los archivos de configuración pueden ser archivos YAML, gráficos Helm o archivos de propiedades XML). En el despliegue de Docker, el comando que construye el contenedor utiliza estos valores como argumentos para sus propios scripts con el fin de establecer las propiedades personalizadas anteriores.
    1. El Transaction server Docker container se deriva de la arquitectura de WebSphere Application Server. Por lo tanto, cuando despliegue un nuevo contenedor de Docker, utilice los scripts wsadmin para actualizar las propiedades anteriores. Para obtener más información, consulte la herramienta wsadmin en el Centro de conocimiento del servidor de aplicaciones IBM WebSphere..
    2. La transacción de búsqueda se deriva de la arquitectura del servidor de WebSphere Application Server V8.5.5 Liberty. Liberty se configura con archivos de XML y conexiones de base de datos configuradas en el archivo datasource.xml. Al desplegar un nuevo contenedor de Docker, actualice este archivo (mediante programación) para añadir las propiedades anteriores al redireccionamiento automático del cliente.

Example

Ejemplo 1: Establecimiento de ACR en Transaction server Docker container
Este ejemplo es para Transaction server. Se escribe mediante Python y utiliza comandos wsadmin para configurar el ACR para Transaction server Docker container.

El nombre del script es update_txn_alternate_server.py.

Sus parámetros (los parámetros son los valores respectivos para las propiedades personalizadas de la WebSphere de ACR) son los siguientes:
  • <alternate_server_name>,
  • <alternate_port_number>,
  • <max_retries_for_client_reroute>y
  • <retry_interval_for_client_reroute>

Cree el script dentro del directorio Transaction server Docker container /SETUP/scripts/.

El contenido de este script debe ser el siguiente:
# Init variables 
propertyNames  = [ 'clientRerouteAlternateServerName', 'clientRerouteAlternatePortNumber', \
                   'maxRetriesForClientReroute', 'retryIntervalForClientReroute' ]
propertyValues = [ <alternate_server_name>, <alternate_port_number>, \
                   <max_retries_for_client_reroute>, <retry_interval_for_client_reroute> ]
propertyTypes  = [ 'java.lang.String', 'java.lang.Integer', 'java.lang.Integer', \
                   'java.lang.Integer' ]
    
# Get the datasource
datasource = AdminConfig.getid('/Cell:localhost/Node:localhost/Server:server1/JDBCProvider:WCDataSource_provider/DataSource:WCDataSource/')
print 'datasource = ', datasource
    
# Get the property set 
propertySet = AdminConfig.showAttribute( datasource, 'propertySet')
print 'propertySet = ', propertySet
    
# Get the list of properties
propertyList = AdminConfig.list('J2EEResourceProperty', propertySet).splitlines()
a = [ p.split( '(' )[ 0 ] for p in propertyList ]
    
# Adding or updating ACR custom variables
for i in range( len( propertyNames ) ):
    if propertyNames[ i ] not in a:
        propertyAttributes = [['name', propertyNames[ i ]], ['value', propertyValues[ i ]], \
                              ['type', propertyTypes[ i ]], ['description', ''], \
                              ['required', 'true']]
        AdminConfig.create( 'J2EEResourceProperty', propertySet, propertyAttributes )
        print propertyNames[ i ], ' created'
    else:
        propertyAttributes = [['value', propertyValues[ i ]], ['description', ''], \
                              ['required', 'true']]
        AdminConfig.modify( propertyNames[ i ], propertyAttributes )
        print propertyNames[ i ], ' updated'
AdminConfig.save()
Llame al script utilizando la sintaxis de mandato siguiente:
/opt/WebSphere/AppServer/profiles/default/bin/wsadmin.sh -conntype NONE 
     -f /SETUP/scripts/update_txn_alternate_server.py alternate_server_name alternate_port_number 
         max_retries_for_client_reroute retry_interval_for_client_reroute
Ejemplo 2: Establecer el ACR para el contenedor de búsqueda
Este ejemplo también se escribe mediante Python y configura el ACR para el contenedor de búsqueda. El nombre del script es update_search_alternate_server.py y la sintaxis para invocarlo es la siguiente:
python update_search_alternate_server.py alternate_server_name alternate_port_number max_retries_for_client_reroute 
retry_interval_for_client_reroute
Este es el script de Python:
import sys
import xml.etree.ElementTree as et

filename = '/opt/WebSphere/Liberty/usr/servers/default/configDropins/overrides/datasources.xml'

tree = et.parse( filename )
root = tree.getroot()
d = root.find( 'dataSource' )
children = d.getchildren()
for child in children:
     if 'properties.db2.jcc' in str( child ):
         print 'found'
         print child.tag, child.attrib
         dict = child.attrib
         print 'dict = ', dict
         dict[ 'clientRerouteAlternateServerName' ] = sys.argv[0]
         dict[ 'clientRerouteAlternatePortNumber' ] = sys.argv[1]
         max_retries_for_client_reroute = sys.argv[2]
         retry_interval_for_client_reroute = sys.argv[3]
         if len( max_retries_for_client_reroute ) != 0:
              dict[ 'maxRetriesForClientReroute' ] = max_retries_for_client_reroute
         if len( retry_interval_for_client_reroute ) != 0:
              dict[ 'retryIntervalForClientReroute' ] = retry_interval_for_client_reroute

         d.remove( child ) 
         b = et.SubElement( d, 'properties.db2.jcc' )
         b.attrib = dict
         tree.write( filename )