47 lines
1.4 KiB
PHP
47 lines
1.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* NexusPBX HA - Synchronisation périodique du cluster par cron
|
|
* Exécuté automatiquement pour s'assurer que le nœud Backup reste 100% synchronisé.
|
|
*/
|
|
|
|
require_once __DIR__ . '/../src/Database.php';
|
|
require_once __DIR__ . '/../src/ClusterManager.php';
|
|
require_once __DIR__ . '/../src/ConfigGenerator.php';
|
|
|
|
use App\Database;
|
|
use App\ClusterManager;
|
|
|
|
try {
|
|
$db = Database::getConnection();
|
|
$cm = new ClusterManager($db);
|
|
$st = $cm->getSettings();
|
|
|
|
// 1. Si le cluster n'est pas activé ou que l'auto-sync est désactivée
|
|
if (empty($st['enabled']) || empty($st['auto_sync'])) {
|
|
exit(0);
|
|
}
|
|
|
|
// 2. Seul le nœud MASTER actif émet la synchronisation vers le nœud BACKUP
|
|
$vip = $st['virtual_ip'] ?? '';
|
|
$isVipActive = $cm->isVirtualIpActive($vip);
|
|
$configuredRole = $st['role'] ?? 'master';
|
|
|
|
// Un esclave (backup) ne doit jamais écraser le maître
|
|
if ($configuredRole !== 'master' && !$isVipActive) {
|
|
exit(0);
|
|
}
|
|
|
|
if (empty($st['peer_ip'])) {
|
|
exit(0);
|
|
}
|
|
|
|
// 3. Déclenchement de la réplication vers le pair
|
|
$result = $cm->pushSyncToPeer();
|
|
echo date('[Y-m-d H:i:s] ') . "[CLUSTER-CRON] " . ($result['message'] ?? 'Synchronisation OK') . "\n";
|
|
} catch (\Throwable $e) {
|
|
echo date('[Y-m-d H:i:s] ') . "[CLUSTER-CRON-ERROR] " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|