Amélioration de la haute disponibilité dans HCL Commerce avec IBM Db2 HADR
Vous pouvez activer IBM Db2 HADR pour garantir l'accès de votre site HCL Commerce aux clients en cas de pannes de la base de données ou d'arrêts planifiés. La fonction HADR permet aussi de récupérer les données métier moyennant seulement un minimum d'interruptions de votre site.
Procedure
- Activez la reprise à haut niveau de disponibilité après incident dans votre base de données IBM Db2.
-
Activez IBM Db2 Automatic Client Rerouting (ACR) dans HCL Commerce.
Assurez-vous que les données sont conservées dans vos conteneurs Docker en définissant des propriétés personnalisées dans vos sources de données de transaction et de recherche. Dans le cas d'un scénario de prise de contrôle HADR, cela vous permettra de passer de façon transparente d'une base de données principale à une base de données en veille. Les propriétés personnalisées à mettre à jour, qui activeront IBM Db2 ACR pour les conteneurs de transactions et de recherche, sont les suivantes :
- clientRouteAlternateServerName (elle est obligatoire),
- clientRerouteAlternatePortNumber (obligatoire),
- maxRetriesForClientReoute (facultative) et
- retryIntervalForClientReoute (facultative).Note: L'intervalle entre les nouvelles tentatives de réacheminement du client est mesuré en secondes.
-
Le Transaction server Docker container est dérivé de l'architecture WebSphere Application Server. Par conséquent, lorsque vous déployez un nouveau conteneur Docker, utilisez le script
wsadminpour mettre à jour les propriétés ci-dessus. Pour plus d'informations, voir l'outil wsadmin dans WebSphere Application Server Knowledge Center. - La transaction de recherche est dérivée de l'architecture du serveur WebSphere Application Server V8.5.5 Liberty. Liberty est configuré à l'aide de fichiers XML, avec des connexions de base de données configurées dans le fichier datasource.xml. Lorsque vous déployez un nouveau conteneur Docker, mettez à jour ce fichier (par programme) pour ajouter les propriétés ci-dessus pour le réacheminement automatique du client.
Example
- Exemple 1 : Définition d'ACR dans le Transaction server Docker container
- Cet exemple concerne le Transaction server. Il est écrit à l'aide de Python et utilise des commandes
wsadminpour configurer ACR pour le Transaction server Docker container.Le nom du script est
update_txn_alternate_server.py.Ses paramètres (les paramètres sont les valeurs respectives des propriétés personnalisées ACR WebSphere) sont les suivants :<alternate_server_name>,<alternate_port_number>,<max_retries_for_client_reroute>et<retry_interval_for_client_reroute>
Créez le script dans votre répertoire Transaction server Docker container /SETUP/scripts/.
Le contenu de ce script doit être le suivant :# 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()Appelez le script en utilisant la syntaxe de commande suivante :/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 - Exemple 2 : Définition d'ACR pour le conteneur de recherche
- Cet exemple est également écrit à l'aide de Python et de sa configuration ACR pour le conteneur de recherche. Le nom du script est
update_search_alternate_server.py, et la syntaxe pour l'appeler est la suivante :
Voici le script Python :python update_search_alternate_server.py alternate_server_name alternate_port_number max_retries_for_client_reroute retry_interval_for_client_rerouteimport 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 )