Raxol.Core.Session.SessionMigrator (Raxol v2.0.1)
View SourceHandles session migration and failover scenarios in a distributed environment.
The SessionMigrator provides capabilities for moving sessions between nodes, handling node failures, load balancing, and maintaining session continuity during cluster topology changes.
Features
- Live session migration with minimal downtime
- Automatic failover on node failure
- Load-based session redistribution
- Rolling cluster updates with session preservation
- Migration rollback and recovery
- Performance impact monitoring during migrations
Migration Strategies
- Hot Migration: Zero-downtime migration using shadow copies
- Warm Migration: Brief pause during migration commit
- Cold Migration: Full session suspension during migration
- Bulk Migration: Efficient batch migration for maintenance
Failover Modes
- Immediate: Instant failover to available replicas
- Graceful: Coordinated failover with state synchronization
- Manual: Administrator-controlled failover process
Usage
# Start migrator
{:ok, pid} = SessionMigrator.start_link(
failover_mode: :graceful,
migration_batch_size: 50,
max_concurrent_migrations: 5
)
# Migrate single session
SessionMigrator.migrate_session(pid, session_id, target_node, :hot)
# Migrate all sessions from a node
SessionMigrator.evacuate_node(pid, source_node, [:target1, :target2])
# Handle node failure
SessionMigrator.handle_node_failure(pid, failed_node)
Summary
Functions
Returns a specification to start this module under a supervisor.
Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_call/3.
Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_cast/2.
Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_info/2.
Types
@type failover_mode() :: :immediate | :graceful | :manual
@type migration_info() :: %{ session_id: binary(), source_node: node(), target_node: node(), strategy: migration_strategy(), status: migration_status(), started_at: DateTime.t(), completed_at: DateTime.t() | nil, rollback_data: term() | nil }
@type migration_status() ::
:pending | :in_progress | :completed | :failed | :rolled_back
@type migration_strategy() :: :hot | :warm | :cold | :bulk
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec evacuate_node(pid(), node(), [node()]) :: {:ok, non_neg_integer()} | {:error, term()}
@spec get_migration_stats(pid()) :: %{ total_migrations: non_neg_integer(), successful_migrations: non_neg_integer(), failed_migrations: non_neg_integer(), average_migration_time: float(), active_migrations: non_neg_integer() }
@spec get_migration_status(pid(), binary()) :: {:ok, migration_info()} | {:error, term()}
Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_call/3.
Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_cast/2.
Callback implementation for Raxol.Core.Behaviours.BaseManager.handle_manager_info/2.
@spec list_active_migrations(pid()) :: {:ok, [migration_info()]}
@spec migrate_session(pid(), binary(), node(), migration_strategy()) :: {:ok, migration_info()} | {:error, term()}
@spec migrate_sessions_bulk(pid(), [binary()], node(), migration_strategy()) :: {:ok, [migration_info()]} | {:error, term()}
@spec rebalance_sessions(pid(), map()) :: {:ok, non_neg_integer()} | {:error, term()}