Oracle : le cluster de haute disponibilité le plus simple entre deux serveurs redondants
Avec la réplication temps réel et le basculement automatique fournis par Evidian SafeKit
La solution apportée à Oracle
Evidian SafeKit apporte la haute disponibilité à Oracle entre deux serveurs redondants avec réplication temps réel des données et basculement automatique.
Cet article explique comment mettre en œuvre rapidement un cluster Oracle sans disque partagé et sans compétences spécifiques.
Un produit générique
Notez que SafeKit est un produit générique sous Windows et Linux.
Vous pouvez implémenter avec SafeKit la réplication en temps réel et le basculement de n'importe quel répertoire de fichiers et service, base de données, machines virtuelles Hyper-V ou KVM complètes, applications Docker, Podman, K3S, Cloud (voir la liste des modules).
Une solution complète
SafeKit résout :
- les pannes matérielles (20% des problèmes), incluant la panne complète d'une salle informatique,
- les défaillances logicielles (40% des problèmes), incluant la relance de processus critiques,
- et les erreurs humaines (40% des problèmes) grâce à sa simplicité d'utilisation et sa console Web.
Partenaires, le succès avec SafeKit
Cette solution indépendante de la plateforme est idéale pour un partenaire revendant une application critique et qui souhaite proposer une option de redondance et de haute disponibilité simple à déployer auprès de nombreux clients.
Avec de nombreuses références dans de nombreux pays gagnées par des partenaires, SafeKit s'est avéré être la solution la plus simple à mettre en œuvre pour la redondance et la haute disponibilité des logiciels de gestion des bâtiments, vidéosurveillance, contrôle d'accès, systèmes SCADA...
Logiciel de gestion des bâtiments (BMS)
Logiciel de gestion vidéo (VMS)
Contrôle d'accès électroniques (EACS)
Logiciels SCADA (Industrie)
Etape 1. Réplication en temps réel
Le serveur 1 (PRIM) exécute l'application Oracle. Les utilisateurs sont connectés à une adresse IP virtuelle. Seules les modifications faites par l'application à l'intérieur des fichiers sont répliquées en continue à travers le réseau.
La réplication est synchrone sans perte de données en cas de panne contrairement à une réplication asynchrone.
Il vous suffit de configurer les noms des répertoires à répliquer dans SafeKit. Il n'y a pas de pré-requis sur l'organisation du disque. Les répertoires peuvent se trouver sur le disque système.
Etape 2. Basculement automatique
Lorsque le serveur 1 est défaillant, SafeKit bascule l'adresse IP virtuelle sur le serveur 2 et redémarre automatiquement l'application Oracle. L'application retrouve les fichiers répliqués à jour sur le serveur 2.
L'application poursuit son exécution sur le serveur 2 en modifiant localement ses fichiers qui ne sont plus répliqués vers le serveur 1.
Le temps de basculement est égal au temps de détection de la panne (30 secondes par défaut) et au temps de relance de l'application.
Etape 3. Réintégration après panne
A la reprise après panne du serveur 1 (réintégration du serveur 1), SafeKit resynchronise automatiquement les fichiers de ce serveur à partir de l'autre serveur.
Seuls les fichiers modifiés sur le serveur 2 pendant l'inactivité du serveur 1 sont resynchronisés.
La réintégration du serveur 1 se fait sans arrêter l'exécution de l'application Oracle sur le serveur 2.
Etape 4. Retour à la normale
Après la réintégration, les fichiers sont à nouveau en mode miroir comme à l'étape 1. Le système est en haute disponibilité avec l'application Oracle qui s'exécute sur le serveur 2 et avec réplication temps réel des modifications vers le serveur 1.
Si l'administrateur souhaite que son application s'exécute en priorité sur le serveur 1, il peut exécuter une commande de basculement, soit manuellement à un moment opportun, soit automatiquement par configuration.
Plus d'information sur une coupure de courant et un isolement du réseau dans un cluster.
Redondance au niveau de l'application
Dans ce type de solution, seules les données applicatives sont répliquées. Et seule l'application est redémarrée en cas de panne.
Avec cette solution, des scripts de redémarrage doivent être écrits pour redémarrer l'application.
Nous livrons des modules applicatifs pour mettre en œuvre la redondance au niveau applicatif (comme le module Oracle fourni dans l'essai gratuit ci-dessous). Ils sont préconfigurés pour des applications et des bases de données bien connues. Vous pouvez les personnaliser avec vos propres services, données à répliquer, checkers d'application. Et vous pouvez combiner les modules applicatifs pour construire des architectures avancées à plusieurs niveaux.
Cette solution est indépendante de la plate-forme et fonctionne avec des applications à l'intérieur de machines physiques, de machines virtuelles, dans le Cloud. Tout hyperviseur est supporté (VMware, Hyper-V...).
Redondance au niveau de machine virtuelle
Dans ce type de solution, la machine virtuelle (VM) complète est répliquée (Application + OS). Et la machine virtuelle complète est redémarrée en cas de panne.
L'avantage est qu'il n'y a pas de scripts de redémarrage à écrire par application et pas d'adresse IP virtuelle à définir. Si vous ne savez pas comment fonctionne l'application, c'est la meilleure solution.
Cette solution fonctionne avec Windows/Hyper-V et Linux/KVM mais pas avec VMware. Il s'agit d'une solution active/active avec plusieurs machines virtuelles répliquées et redémarrées entre deux nœuds.
- Solution pour une nouvelle application (pas de script de redémarrage à écrire) : Windows/Hyper-V, Linux/KVM
Pourquoi une réplication de quelques Tera-octets ?
Temps de resynchronisation après panne (étape 3)
- Réseau 1 Gb/s ≈ 3 heures pour 1 téraoctet.
- Réseau 10 Gb/s ≈ 1 heure pour 1 téraoctet ou moins en fonction des performances d'écriture disque.
Alternative
- Pour un grand volume de données, utilisez un stockage partagé externe.
- Plus cher, plus complexe.
Pourquoi une réplication < 1 000 000 fichiers ?
- Performance du temps de resynchronisation après panne (étape 3).
- Temps pour vérifier chaque fichier entre les deux nœuds.
Alternative
- Placez les nombreux fichiers à répliquer sur un disque dur virtuel / une machine virtuelle.
- Seuls les fichiers représentant le disque dur virtuel / la machine virtuelle seront répliqués et resynchronisés dans ce cas.
Pourquoi un basculement < 25 VMs répliquées ?
- Chaque VM s'exécute dans un module miroir indépendant.
- Maximum de 25 modules miroir exécutés sur le même cluster.
Alternative
- Utilisez un stockage partagé externe et une autre solution de clustering de VMs.
- Plus cher, plus complexe.
Pourquoi un réseau LAN/VLAN entre sites distants ?
- Basculement automatique de l'adresse IP virtuelle avec 2 nœuds dans le même sous-réseau.
- Bonne bande passante pour la resynchronisation (étape 3) et bonne latence pour la réplication synchrone (quelques ms).
Alternative
- Utilisez un équilibreur de charge pour l'adresse IP virtuelle si les 2 nœuds sont dans 2 sous-réseaux (supporté par SafeKit, notamment dans le cloud).
- Utilisez des solutions de backup avec réplication asynchrone pour un réseau à latence élevée.
Prérequis
- Vous avez besoin de Oracle installé sur 2 nœuds (machines virtuelles ou serveurs physiques).
-
Sous Windows, avec le gestionnaire de services Windows, placez les services Oracle avec Boot Startup Type = Manual sur les deux nœuds. p>
SafeKit contrôle le démarrage des services Oracle dans les scripts de redémarrage. Editez les scripts de redémarrage lors de la configuration pour vérifier si vous avez mis tous les services en démarrage manuel, y compris les nouveaux que vous pouvez ajouter.
Installation du package sous Windows
-
Téléchargez la version gratuite de SafeKit sur 2 nœuds Windows.
Remarque : la version gratuite inclut toutes les fonctionnalités de SafeKit. À la fin de l'essai, vous pouvez activer des clés de licence permanentes sans désinstaller le package.
-
Pour ouvrir le pare-feu Windows, sur les deux nœuds démarrez un powershell en tant qu'administrateur et tapez
c:/safekit/private/bin/firewallcfg add
-
Pour initialiser le mot de passe de l'utilisateur admin par défaut de la console, sur les deux nœuds démarrez un powershell en tant qu'administrateur et tapez
c:/safekit/private/bin/webservercfg.ps1 -passwd mdp
- Utilisez des caractères alphanumériques pour le mot de passe (pas de caractères spéciaux).
- mdp doit être le même sur les deux nœuds.
-
Pour synchroniser SafeKit au démarrage et à l'arrêt, sur les deux nœuds démarrez un powershell en tant qu'administrateur et tapez une seule fois
c:/safekit/private/bin/addStartupShutdown
Installation du module sous Windows
-
Téléchargez le module oracle.safe.
Le module est gratuit. Il contient les fichiers userconfig.xml et les scripts de redémarrage.
- Mettez oracle.safe sous C:\safekit\Application_Modules\demo (créez le répertoire de démonstration s'il n'existe pas).
Installation du package sous Linux
-
Installez la version gratuite de SafeKit sur 2 nœuds Linux.
Remarque : l'essai gratuit inclut toutes les fonctionnalités de SafeKit. À la fin de l'essai, vous pouvez activer des clés de licence permanentes sans désinstaller le package.
-
Après le téléchargement du package safekit_xx.bin, exécutez-le pour extraire le rpm et le script safekitinstall, puis exécutez le script safekitinstall
-
Répondez oui à la configuration automatique du pare-feu
-
Définissez le mot de passe pour la console Web et l'utilisateur par défaut admin.
- Utilisez des caractères alphanumériques pour le mot de passe (pas de caractères spéciaux).
- Le mot de passe doit être le même sur les deux nœuds.
Installation du module sous Linux
-
Téléchargez le module oracle.safe.
Le module est gratuit. Il contient les fichiers userconfig.xml et les scripts de redémarrage.
- Mettre oracle.safe sous /opt/safekit/Application_Modules/demo/ (créer le répertoire demo s'il n'existe pas).
1. Lancez la console SafeKit
- Lancez la console Web dans un navigateur sur un nœud du cluster en vous connectant à
http://localhost:9010
. - Entrez
admin
comme nom d'utilisateur et le mot de passe défini durant l'installation.
Vous pouvez également exécuter la console dans un navigateur sur un poste de travail externe au cluster.
La configuration de SafeKit se fait sur les deux nœuds depuis un seul navigateur.
Pour sécuriser la console Web, consultez 11. Sécurisation de la console Web SafeKit dans le Guide de l'utilisateur.
2. Configurez les adresses des nœuds
- Saisissez les adresses IP des nœuds.
- Ensuite, cliquez sur
Apply
pour enregistrer la configuration.
Si la couleur d'arrière-plan du nœud 1 ou du nœud 2 est rouge, vérifiez la connectivité du navigateur aux deux nœuds et vérifiez le pare-feu sur les deux nœuds pour résoudre le problème.
Cette opération placera les adresses IP dans le fichier cluster.xml
sur les deux nœuds (plus d'information dans la formation avec la ligne de commande).
4. Configurez le module
- Choisissez un démarrage automatique du module au boot sans délai.
- Normalement, vous disposez d'un seul réseau heartbeat sur lequel la réplication est effectuée. Mais, vous pouvez définir un réseau privé si nécessaire.
- Vérifiez que les répertoires répliqués sont installés sur les deux nœuds et contiennent les données de l'application.
La réplication des données ainsi que des journaux est requise pour une base de données.
Vous pouvez ajouter de nouveaux répertoires répliqués si nécessaire. - Entrez une adresse IP virtuelle. Une adresse IP virtuelle est une adresse IP standard dans le même réseau IP (même sous-réseau) que les adresses IP des deux nœuds.
Les clients de l'application doivent être configurés avec l'adresse IP virtuelle (ou le nom DNS associé à l'adresse IP virtuelle).
L'adresse IP virtuelle est automatiquement basculée en cas de panne. start_prim
etstop_prim
doivent contenir le démarrage et l'arrêt de l'application Oracle.
Vous pouvez ajouter de nouveaux services dans ces scripts.
Vérifiez que les noms des services dans ces scripts sont ceux installés sur les deux nœuds, sinon modifiez-les dans les scripts.- Arrêtez les services configurés dans
start_prim
sur les deux nœuds. - Sous Windows et sur les deux nœuds, avec le gestionnaire de services Windows, définissez
Boot Startup Type = Manual
pour tous les services enregistrés dansstart_prim
(SafeKit contrôle le démarrage des services dansstart_prim
).
Notez que si un nom de processus est affiché dans Process Checker, il sera surveillé avec une action de redémarrage en cas de panne. La configuration d'un nom de processus erroné entraînera l'arrêt du module juste après son démarrage.
Cette opération reportera la configuration dans les fichiers userconfig.xml
, start_prim
, stop_prim
sur les deux nœuds (plus d'informations dans le training avec la ligne de commande).
5. Vérifiez le succès de la configuration
- Vérifiez le message de réussite (vert) sur les deux nœuds et cliquez sur Next.
Sous Linux, vous pouvez obtenir une erreur à cette étape si les répertoires répliqués sont des points de montage. Consultez cet article pour résoudre le problème.
6. Démarrez le nœud avec les données à jour
- Si le nœud 1 a les répertoires répliqués à jour, sélectionnez-le et démarrez-le.
Lorsque le nœud 2 sera démarré, toutes les données seront copiées du nœud 1 vers le nœud 2.
Si vous faites le mauvais choix, vous courez le risque de synchroniser des données obsolètes sur les deux nœuds.
On suppose également que l'application Oracle est stoppée sur le noeud 1 afin que SafeKit installe les mécanismes de réplication puis lance l'application dans le script start_prim
.
7. Attendez le passage à ALONE (vert)
- Le nœud 1 doit atteindre l'état ALONE (vert), ce qui signifie que le script
start_prim
a été exécuté sur le nœud 1.
Si le statut est ALONE (vert) et que l'application n'est pas démarrée, vérifiez les messages de sortie de start_prim
dans l'Application Log du nœud 1.
Si le nœud 1 n'atteint pas l'état ALONE (vert), analysez pourquoi avec le Module Log du nœud 1.
Si le cluster est dans l'état WAIT (rouge) not uptodate, STOP (rouge) not uptodate
, arrêtez le nœud WAIT et forcez son démarrage en tant que primaire.
8. Démarrez le nœud 2
- Démarrer le nœud 2 avec son menu contextuel.
- Attendre l'état SECOND (vert).
Le nœud 2 reste dans l'état SECOND (magenta) pendant la resynchronisation des répertoires répliqués (copie du nœud 1 vers le nœud 2).
Cela peut prendre un certain temps en fonction de la taille des fichiers à resynchroniser dans les répertoires répliqués et de la bande passante du réseau.
Pour voir la progression de la copie, consultez le Module Log du nœud 2 avec l'option verbose sans oubliez de rafraichir la fenêtre.
9. Vérifiez que le cluster est opérationnel
- Vérifiez que le cluster est vert/vert avec les services Oracle exécutés sur le nœud PRIM et ne s'exécutant pas sur le nœud SECOND.
Seules les modifications à l'intérieur des fichiers sont répliquées en temps réel dans cet état.
Les composants clients des services Oracle doivent être configurés avec l'adresse IP virtuelle. La configuration peut se faire avec un nom DNS (si un nom DNS a été créé et associé à l'adresse IP virtuelle).
10. Testez
- Arrêtez le nœud PRIM en faisant défiler son menu contextuel et en cliquant sur Stop.
- Vérifiez qu'il y a un basculement sur le nœud SECOND qui doit devenir ALONE (vert).
- Et avec la Microsoft Management Console (MMC) sous Windows ou avec des lignes de commande sous Linux, vérifiez le basculement des services Oracle (arrêtés sur le nœud 1 dans le script
stop_prim
et démarrés sur le nœud 2 dans le scriptstart_prim
).
Si l'application Oracle n'est pas démarrée sur le nœud 2 alors que l'état est ALONE (vert ), vérifiez les messages de sortie du script start_prim
dans l'Application Log du nœud 2.
Si ALONE (vert) n'est pas atteint, analysez pourquoi avec le Module Log du nœud 2.
Journal du module
- Lisez le journal du module pour comprendre les raisons d'un basculement, d'un état d'attente etc...
Pour voir le journal du module du nœud 1 (image) :
- cliquez sur l'onglet Control
- cliquez sur node 1/PRIM sur le côté gauche pour sélectionner le serveur (il devient bleu)
- cliquez sur Module log
- cliquez sur l'icône Actualiser (flèches vertes) pour mettre à jour la console
- cliquez sur la disquette pour enregistrer le journal du module dans un fichier .txt et l'analyser dans un éditeur de texte
Cliquez sur node2 pour voir le journal du module du serveur secondaire.
Journal applicatif
- Lisez le journal applicatif pour voir les messages de sortie des scripts de redémarrage start_prim et stop_prim.
Pour voir le journal applicatif du nœud 1 (image) :
- cliquez sur l'onglet Control
- cliquez sur node 1/PRIM sur le côté gauche pour sélectionner le serveur (il devient bleu)
- cliquez sur Application Log pour voir les messages lors du démarrage et de l'arrêt des services Oracle
- cliquez sur l'icône Actualiser (flèches vertes) pour mettre à jour la console
- cliquez sur la disquette pour enregistrer le journal applicatif dans un fichier .txt et l'analyser dans un éditeur de texte
Cliquez sur le nœud 2 pour voir le journal applicatif du serveur secondaire.
Configuration avancée
- Dans l'onglet Advanced Configuration, vous pouvez modifier les fichiers internes du module : bin/start_prim et bin/stop_prim et conf/userconfig.xml.
Si vous apportez des modifications dans les fichiers internes, vous devez appliquer la nouvelle configuration par un clic droit sur l'icône/xxx sur le côté gauche (voir image) : l'interface vous permettra de redéployer les fichiers sur les deux serveurs.
Support
- Pour obtenir de l'aide, prenez 2 Snapshots SafeKit (2 fichiers .zip), un pour chaque serveur.
Si vous avez un compte sur https://support.evidian.com, téléchargez-les dans l'outil call desk.
Fichiers internes à SafeKit pour la haute disponibilité de Oracle avec réplication temps réel synchrone et tolérance aux pannes
Allez dans le tab Advanced Configuration de la console pour modifier les fichiers ci-dessous.Fichiers internes au module Windows oracle.safe
userconfig.xml sur Windows (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
<macro name="ORACLE_SID" value="ORACLE_SID_TO_BE_DEFINED" />
<macro name="ORACLE_HOME_NAME" value="ORACLE_HOME_NAME_TO_BE_DEFINED" />
<service mode="mirror" defaultprim="alone" maxloop="3" loop_interval="24" failover="on">
<!-- Heartbeat Configuration -->
<!-- Names or IP addresses on the default network are set during initialization in the console -->
<heart pulse="700" timeout="30000">
<heartbeat name="default" ident="flow">
</heartbeat>
</heart>
<!-- Virtual IP Configuration (used by Oracle SQL*Net Listener) -->
<!-- Replace
* VIRTUAL_TO_BE_DEFINED by the IP address of your virtual server
-->
<vip>
<interface_list>
<interface check="on" arpreroute="on">
<real_interface>
<virtual_addr addr="VIRTUAL_TO_BE_DEFINED" where="one_side_alias" />
</real_interface>
</interface>
</interface_list>
</vip>
<!-- Software Error Detection Configuration -->
<errd polltimer="10">
<!-- Oracle databases
For monitoring one specific oracle instance, insert the attribute
argregex="{.*SID.*}" where SID is the name of the DataBase
-->
<proc name="oracle.exe" atleast="1" action="restart" class="prim" />
<proc name="tnslsnr.exe" atleast="1" action="restart" class="prim" />
</errd>
<!-- File Replication Configuration -->
<!-- Replace
* ORACLE_DATA_TO_BE_DEFINED by the path of your Oracle database directory and transaction logs
-->
<rfs async="second" acl="off" nbrei="3">
<replicated dir="ORACLE_DATA_TO_BE_DEFINED" mode="read_only" />
</rfs>
<!-- User scripts Configuration / Environment variables -->
<user nicestoptimeout="300" forcestoptimeout="300" logging="userlog">
<var name="ORACLE_SID" value="%ORACLE_SID%" /> <!-- values defined in macro above -->
<var name="ORACLE_HOME_NAME" value="%ORACLE_HOME_NAME%" />
</user>
</service>
</safe>
start_prim.cmd sur Windows
@echo off
rem Script called on the primary server for starting application services
rem For logging into SafeKit log use:
rem "%SAFE%safekit" printi | printe "message"
rem stdout goes into Application log
echo "Running start_prim %*"
set res=0
net start "OracleDbConsole%ORACLE_SID%" > nul
if not %errorlevel% == 0 goto stop
%SAFE%safekit printi "OracleDbConsole%ORACLE_SID% started"
net start "OracleService%ORACLE_SID%" > nul
if not %errorlevel% == 0 goto stop
%SAFE%safekit printi "OracleService%ORACLE_SID% started"
net start "Oracle%ORACLE_HOME_NAME%TNSListener" > nul
if not %errorlevel% == 0 goto stop
%SAFE%safekit printi "Oracle%ORACLE_HOME_NAME%TNSListener started"
if %res% == 0 goto end
:stop
set res=%errorlevel%
%SAFE%safekit printi "Oracle start failed"
rem uncomment to stop SafeKit when critical
rem %SAFE%safekit stop -i "start_prim"
:end
stop_prim.cmd sur Windows
@echo off
rem Script called on the primary server for stopping application services
rem ----------------------------------------------------------
rem
rem 2 stop modes:
rem
rem - graceful stop
rem call standard application stop with net stop
rem
rem - force stop (%1=force)
rem kill application's processes
rem
rem ----------------------------------------------------------
rem For logging into SafeKit log use:
rem "%SAFE%safekit" printi | printe "message"
rem stdout goes into Application log
echo "Running stop_prim %*"
set res=0
rem default: no action on forcestop
if "%1" == "force" goto end
net stop OracleService%ORACLE_SID% > nul
%SAFE%safekit printi "OracleService%ORACLE_SID% stopped"
net stop OracleDBConsole%ORACLE_SID% > nul
%SAFE%safekit printi "OracleDBConsole%ORACLE_SID% stopped"
net stop Oracle%ORACLE_HOME_NAME%TNSListener > nul
%SAFE%safekit printi "Oracle%ORACLE_HOME_NAME%TNSListener stopped"
rem wait a little for a real stop of services
%SAFEBIN%sleep 10
:end
Fichiers internes au module Linnux oracle.safe
userconfig.xml sur Linux (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
<macro name="ORACLE_HOME" value="PATH_TO_BE_DEFINED" />
<macro name="ORACLE_DBA" value="USER_TO_BE_DEFINED" />
<service mode="mirror" defaultprim="alone" maxloop="3" loop_interval="24" failover="on">
<!-- Heartbeat Configuration -->
<!-- Names or IP addresses on the default network are set during initialization in the console -->
<heart pulse="700" timeout="30000">
<heartbeat name="default" ident="flow">
</heartbeat>
</heart>
<!-- Virtual IP Configuration (used by Oracle SQL*Net Listener) -->
<!-- Replace
* VIRTUAL_TO_BE_DEFINED by the IP address of your virtual server
-->
<vip>
<interface_list>
<interface check="on" arpreroute="on">
<real_interface>
<virtual_addr addr="VIRTUAL_TO_BE_DEFINED" where="one_side_alias" />
</real_interface>
</interface>
</interface_list>
</vip>
<!-- Software Error Detection Configuration -->
<errd polltimer="10">
<!-- Oracle databases
For monitoring one specific oracle instance, insert the attribute
argregex=".*SID$" where SID is the name of the DataBase
-->
<proc name="oracle" nameregex="ora_.*" atleast="1" action="restart" class="prim" />
<proc name="tnslsnr" atleast="1" action="restart" class="prim" />
</errd>
<!-- File Replication Configuration -->
<!-- Replace
* ORACLE_DATA_TO_BE_DEFINED by the path of your Oracle database directory and transaction logs
-->
<rfs mountover="off" packetsize="32768" async="second" acl="off" nbrei="3">
<replicated dir="ORACLE_DATA_TO_BE_DEFINED" mode="read_only" />
</rfs>
<!-- User scripts Configuration / Environment variables -->
<user nicestoptimeout="300" forcestoptimeout="300" logging="userlog">
<var name="ORACLE_HOME" value="%ORACLE_HOME%" /> <!-- values defined in macro above -->
<var name="ORACLE_DBA" value="%ORACLE_DBA%" />
</user>
</service>
</safe>
start_prim sur Linux
#!/bin/sh
# Script called on the primary server for starting applications
# For logging into SafeKit log use:
# $SAFE/safekit printi | printe "message"
#---------- Clean Oracle residual processes and shared memory
# Call this function before starting any Oracle databases
# to clean eventual resual Oracle processes and IPC
clean_oracle()
{
retval=0
$SAFE/safekit printw "Cleaning Oracle processes and shared memory"
# kill started Oracle databases
ps -e -o pid,comm |grep ora | $AWK '{print "kill " $1}'| sh >/dev/null 2>&1
# delete oracle shared memory to start in a clean state
case $OSNAME in
Linux)
ipcs -m |grep oracle |$AWK '{print "shm "$2 | "xargs ipcrm"}' >/dev/null 2>&1
ipcs -s |grep oracle |$AWK '{print "sem "$2 | "xargs ipcrm"}' >/dev/null 2>&1
;;
*)
ipcs -m |grep oracle |$AWK '{print "-m "$2 | "xargs ipcrm"}' >/dev/null 2>&1
ipcs -s |grep oracle |$AWK '{print "-s "$2 | "xargs ipcrm"}' >/dev/null 2>&1
;;
esac
if [ -f $ORACLE_HOME/dbs/sgadef*.dbf ]; then
rm $ORACLE_HOME/dbs/sgadef*.dbf
fi
return $retval
}
#---------- Oracle Databases
# Call this function for starting Oracle Databases
start_oracle()
{
retval=0
$SAFE/safekit printw "Starting Oracle databases"
# Oracle - Database Starting
/bin/su - $ORACLE_DBA -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" #> /dev/console 2>&1
if [ $? -ne 0 ] ; then
$SAFE/safekit printw "Oracle databases start failed"
# retval=1
else
$SAFE/safekit printw "Oracle databases started"
fi
return $retval
}
#---------- Oracle SQL*Net Listener
# Call this function for starting Oracle Listener
start_listener()
{
retval=0
# Oracle - Listener Starting
LISTENER_STATE=`$SAFEBIN/killit list tnslsnr`
if [ "$LISTENER_STATE" != "" ]; then
$SAFE/safekit printw "Oracle Listener already started"
return $retval
fi
$SAFE/safekit printw "Starting Oracle Listener"
/bin/su - $ORACLE_DBA -c "$ORACLE_HOME/bin/lsnrctl start" #> /dev/console 2>&1
if [ $? -ne 0 ] ; then
$SAFE/safekit printw "Oracle Listener start failed"
else
$SAFE/safekit printw "Oracle Listener started"
fi
return $retval
}
# stdout goes into Application log
echo "Running start_prim $*"
res=0
[ -z "$OSNAME" ] && OSNAME=`uname -s`
OSNAME=`uname -s`
case "$OSNAME" in
Linux)
AWK=/bin/awk
;;
*)
AWK=/usr/bin/awk
;;
esac
# stdout goes into Application log
echo "Running start_prim $*"
# TODO
# remove oracle boot start
# WARNING: all databases defined in /etc/oratab are started
#
# Clean Oracle residual processes and shared memory to start Oracle databases in a clean state
clean_oracle || res=$?
# Start Oracle databases
start_oracle || res=$?
# Start SQL*Net Listener Oracle
start_listener || res=$?
if [ $res -ne 0 ] ; then
$SAFE/safekit printi "start_prim failed"
# uncomment to stop SafeKit when critical
# $SAFE/safekit stop -i "start_prim"
fi
exit 0
stop_prim sur Linux
#!/bin/sh
# Script called on the primary server for stopping applications
# For logging into SafeKit log use:
# $SAFE/safekit printi | printe "message"
#----------------------------------------------------------
#
# 2 stop modes:
#
# - graceful stop
# call standard application stop
#
# - force stop ($1=force)
# kill application's processes
#
#----------------------------------------------------------
#---------- Clean Oracle residual processes and shared memory
# Call this function on force stop
# to clean eventual resual Oracle processes and IPC
clean_oracle()
{
retval=0
$SAFE/safekit printw "Cleaning Oracle processes and shared memory"
# kill started Oracle databases
ps -e -o pid,comm |grep ora | $AWK '{print "kill -9 " $1}'| sh >/dev/null 2>&1
# delete oracle shared memory to start in a clean state
case $OSNAME in
Linux)
ipcs -m |grep oracle |$AWK '{print "shm "$2 | "xargs ipcrm"}' >/dev/null 2>&1
ipcs -s |grep oracle |$AWK '{print "sem "$2 | "xargs ipcrm"}' >/dev/null 2>&1
;;
*)
ipcs -m |grep oracle |$AWK '{print "-m "$2 | "xargs ipcrm"}' >/dev/null 2>&1
ipcs -s |grep oracle |$AWK '{print "-s "$2 | "xargs ipcrm"}' >/dev/null 2>&1
;;
esac
if [ -f $ORACLE_HOME/dbs/sgadef*.dbf ]; then
rm $ORACLE_HOME/dbs/sgadef*.dbf
fi
return $retval
}
#---------- Oracle SQL*Net Listener
# Call this function for stopping Oracle Listener
stop_listener()
{
retval=0
if [ "$1" = "force" ] ; then
# Oracle Listener force stop
$SAFEBIN/killit +KILL tnslsnr 1>/dev/null 2>&1
return $retval
fi
# Oracle - Listener stopping
LISTENER_STATE=`$SAFEBIN/killit list tnslsnr`
if [ "$LISTENER_STATE" = "" ]; then
$SAFE/safekit printw "Oracle Listener already stoppped"
return $retval
fi
$SAFE/safekit printw "Stopping Oracle Listener"
/bin/su - $ORACLE_DBA -c "$ORACLE_HOME/bin/lsnrctl stop" #> /dev/console 2>&1
if [ $? -ne 0 ] ; then
$SAFE/safekit printw "Oracle Listener stop failed"
else
$SAFE/safekit printw "Oracle Listener stopped"
fi
return $retval
}
#---------- Oracle databases
# Call this function for stopping Oracle databases
stop_oracle()
{
retval=0
if [ "$1" = "force" ] ; then
# Oracle databases force stop
clean_oracle
return $retval
fi
# Oracle databases gracefull stop
# First stop the startup - shutdown command if it is running
$SAFEBIN/killit +TERM dbstart dbshut> /dev/null 2>&1
# Kill oracle connections that prevent Oracle from stopping gracefully
ps -e -o pid,args |grep LOCAL=NO |$AWK '{print "kill " $1}'| sh > /dev/null 2>&1
ps -e -o pid,args |grep LOCAL=YES |$AWK '{print "kill " $1}'| sh > /dev/null 2>&1
$SAFE/safekit printw "Stopping Oracle databases"
/bin/su - $ORACLE_DBA -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" #> /dev/console 2>&1
if [ $? -ne 0 ] ; then
$SAFE/safekit printw "Oracle databases stop failed"
else
$SAFE/safekit printw "Oracle databases stopped"
fi
return $retval
}
# stdout goes into Application log
echo "Running stop_prim $*"
res=0
[ -z "$OSNAME" ] && OSNAME=`uname -s`
case "$OSNAME" in
Linux)
AWK=/bin/awk
;;
*)
AWK=/usr/bin/awk
;;
esac
mode=
if [ "$1" = "force" ] ; then
mode=force
shift
fi
# WARNING: all databases defined in /etc/oratab are stopped
# Stop Oracle SQL*Net Listener
stop_listener $mode || res=$?
# Stop Oracle databases
stop_oracle $mode || res=$?
[ $res -ne 0 ] && $SAFE/safekit printi "stop_prim failed"
exit 0
Partage de charge réseau et reprise sur panne |
|
Windows farm |
Linux farm |
Generic farm > | Generic farm > |
Microsoft IIS > | - |
NGINX > | |
Apache > | |
Amazon AWS farm > | |
Microsoft Azure farm > | |
Google GCP farm > | |
Other cloud > |
Architectures de clustering avancée
Plusieurs modules peuvent être déployés dans le même cluster. Ainsi, des architectures de clustering avancées peuvent être mises en œuvre :
- un cluster qui mixte ferme et miroir avec le déploiement d’un module ferme et d’un module miroir dans le même cluster,
- un cluster actif/actif avec réplication en déployant plusieurs modules miroirs sur 2 serveurs,
- un cluster Hyper-V ou un cluster KVM avec réplication temps réel et reprise de machines virtuelles complètes entre 2 hyperviseurs actifs,
- un cluster N-1 avec le déploiement de N modules miroirs sur N+1 serveurs.
Réplication de fichiers temps réel et reprise sur panne |
|||||||||||||||||||||||||||||||
Windows mirror |
Linux mirror |
||||||||||||||||||||||||||||||
Generic mirror > | Generic mirror > | ||||||||||||||||||||||||||||||
Microsoft SQL Server > | - | ||||||||||||||||||||||||||||||
Oracle > | |||||||||||||||||||||||||||||||
MariaDB > | |||||||||||||||||||||||||||||||
MySQL > | |||||||||||||||||||||||||||||||
PostgreSQL > | |||||||||||||||||||||||||||||||
Firebird > | |||||||||||||||||||||||||||||||
Windows Hyper-V > | Linux KVM > | ||||||||||||||||||||||||||||||
- | Docker > Podman > Kubernetes K3S > |
||||||||||||||||||||||||||||||
- | |||||||||||||||||||||||||||||||
- | Elasticsearch > | ||||||||||||||||||||||||||||||
Milestone XProtect > | - | ||||||||||||||||||||||||||||||
Genetec SQL Server > | - | ||||||||||||||||||||||||||||||
Hanwha Wisenet Wave > Hanwha Wisenet SSM > |
- | ||||||||||||||||||||||||||||||
Nedap AEOS > | - | ||||||||||||||||||||||||||||||
Siemens SIMATIC WinCC > Siemens SIMATIC PCS 7 > Siemens Desigo CC > Siemens Siveillance suite > Siemens Siveillance VMS > Siemens SiPass > Siemens SIPORT > |
- | ||||||||||||||||||||||||||||||
Bosch AMS > Bosch BIS > Bosch BVMS > |
- | ||||||||||||||||||||||||||||||
Amazon AWS mirror > | |||||||||||||||||||||||||||||||
Microsoft Azure mirror > | |||||||||||||||||||||||||||||||
Google GCP mirror > | |||||||||||||||||||||||||||||||
Other cloud > |
Cluster miroir d'Evidian SafeKit avec réplication de fichiers temps réel et reprise sur panne |
|
Économisez avec 3 produits en 1 |
|
Configuration très simple |
|
Réplication synchrone |
|
Retour d'un serveur tombé en panne totalement automatisé (failback) |
|
Réplication de n'importe quel type de données |
|
Réplication de fichiers vs réplication de disque |
|
Réplication de fichiers vs disque partagé |
|
Sites distants et adresse IP virtuelle |
|
Split brain et quorum En savoir plus > |
|
Cluster actif/actif |
|
Solution de haute disponibilité uniforme |
|
|
|
Cluster ferme d'Evidian SafeKit avec load balancing et reprise sur panne |
|
Pas de load balancer, ni de serveur proxy dédié, ni d'adresse Ethernet multicast spéciale En savoir plus > |
|
Toutes les fonctionnalités de clustering En savoir plus > |
|
Sites distants et adresse IP virtuelle En savoir plus > |
|
Solution de haute disponibilité uniforme En savoir plus > |
|
|
|
Cluster de type "shared nothing"" vs cluster à disque partagé |
|
|
|
|
|
Haute disponibilité vs tolérance aux fautes |
|
|
|
Réplication synchrone vs réplication asynchrone |
|
|
|
Réplication de fichiers au niveau octet vs réplication de disque au niveau du bloc |
|
|
|
Heartbeat, reprise sur panne et quorum pour éviter 2 serveurs maîtres |
|
|
|
|
|
Guide de l'utilisateur
Modules applicatifs
Release Notes
Documentation d'avant vente
Introduction
- Fonctionnalités
- Architectures
- Avantages distinctifs
-
- Cluster matériel vs logiciel
- Réplication synchrone vs asynchrone
- Réplications de fichiers vs disques
- Haute disponibilité vs tolérance aux fautes
- Load balancing matériel vs logiciel
- HA de machines virtuelles vs applications
Installation, configuration, CLI
-
- Installation du package
- Configuration des nœuds
- Configuration du cluster
- Upgrade
-
- Configuration du cluster
- Onglet Configuration
- Onglet Contrôle
- Onglet Supervision
- Onglet Configuration avancée
-
- Installation silencieuse
- Administration du cluster
- Administration du module
- Command line interface
Configuration avancée
-
- userconfig.xml + restart scripts
- Heartbeat (<hearbeat>)
- Virtual IP address (<vip>)
- Real-time file replication (<rfs>)
-
- userconfig.xml + restart scripts
- Farm configuration (<farm>)
- Virtual IP address (<vip>)
-
- Failover machine (<failover>)
- Process monitoring (<errd>)
- Network and duplicate IP checkers
- Custom checker (<custom>)
- Split brain checker (<splitbrain>)
- TCP, ping, module checkers
Support
-
- Analyse des snapshots
-
- Récupérer les clés permanentes
- S'enregistrer sur support.evidian.com
- Call desk