feat(cluster): real-time auto-sync on apply_config + 5min cron periodic sync
This commit is contained in:
1 parent
4c49cf8e1c
commit
3f29ac6d2e
3 files changed
+71
-3
No files matched your search
@@ -0,0 +1,46 @@
|
||||
<?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);
|
||||
}
|
||||
Reference in new issue
Block a user