← Назад к вопросам

Что такое TSM система?

2.0 Middle🔥 201 комментариев
#Docker, Kubernetes и DevOps#JVM и управление памятью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

TSM система: Hierarchical Storage Management и Backup

TSM (Tivoli Storage Manager, ныне IBM Spectrum Protect) — это корпоративное программное обеспечение для управления хранилищем данных и резервного копирования, разработанное IBM. TSM используется для автоматизации, оптимизации и администрирования больших объемов данных в сетях предприятий.

История и эволюция

  • Создана: IBM в 1990-х
  • Первоначальное название: Hierarchical Storage Manager (HSM)
  • Переименована: Tivoli Storage Manager (2000-е)
  • Современное имя: IBM Spectrum Protect (2015+)
  • Текущая версия: 8.x и выше

Основные функции TSM

1. Backup и Recovery (Резервное копирование и восстановление)

Сервер TSM (центральный репозиторий)
    ↓
    ├── Клиент 1 (Windows)
    │   └── Данные резервируются
    ├── Клиент 2 (Linux)
    │   └── Данные резервируются
    └── Клиент 3 (macOS)
        └── Данные резервируются
        ↓
    Хранилище данных:
    ├── Дисковое хранилище (быстро)
    ├── Ленточное хранилище (дешево, долго хранится)
    └── Облачное хранилище (гибко)

2. Hierarchical Storage Management (HSM)

Автоматическое перемещение данных между уровнями хранилища:

ТЕПЛЫЕ ДАННЫЕ (часто используемые)
    ↓ [SSD диски] (быстро, дорого)
    ↓
ХОЛОДНЫЕ ДАННЫЕ (редко используемые)
    ↓ [HDD диски] (медленнее, дешевле)
    ↓
ЛЕДЯНЫЕ ДАННЫЕ (архивные, дольговременное хранение)
    ↓ [Ленты] (очень медленно, очень дешево, надежно)

3. Archive (Архивирование)

Долгосрочное хранение данных с возможностью восстановления:

Архив TSM
    ├── Законченные проекты (старше 1 года)
    ├── Исторические данные (старше 5 лет)
    ├── Соответствие нормативам (compliance)
    └── Юридические требования (legal holds)

Архитектура TSM

┌─────────────────────────────────────────────────────┐
│           Административный интерфейс              │
│    (Web Console, Command Line Interface, GUI)     │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│      TSM Server (центральный сервер)               │
│  ┌────────────────────────────────────────────────┐│
│  │ Policy (политики: какие данные как хранить)  ││
│  │ Schedule (расписание резервного копирования)  ││
│  │ Node registration (регистрация клиентов)      ││
│  │ Database (каталог всех данных)                ││
│  └────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘
                        ↓
   ┌────────────────────┬────────────────────┐
   ↓                    ↓                    ↓
┌──────────┐         ┌──────────┐      ┌──────────┐
│Клиент 1  │         │Клиент 2  │      │Клиент 3  │
│TSM Client│         │TSM Client│      │TSM Client│
└──────────┘         └──────────┘      └──────────┘
   ↓                    ↓                    ↓
[Storage Pool] - [Storage Pool] - [Storage Pool]
     ↓                    ↓                    ↓
 [Disk] [Tape]      [Disk] [Cloud]      [Disk]

Концепция TSM для Java разработчика

Хотя TSM — это не инструмент разработки, Java приложения часто интегрируются с TSM для:

  1. Резервного копирования данных
  2. Управления версиями файлов
  3. Обеспечения соответствия нормативам (GDPR, HIPAA)
  4. Архивирования баз данных

Интеграция Java с TSM

API для программного доступа

// Java API для TSM (IBM Spectrum Protect)
import com.ibm.tivoli.api.client.*;

public class TSMIntegration {
    
    public void backupDatabaseToTSM(String databasePath) {
        try {
            // Создать соединение с TSM сервером
            TSMClient client = new TSMClient(
                "tsm.company.com",
                9355,
                "admin",
                "password"
            );
            
            // Подготовить данные для резервного копирования
            BackupRequest backupRequest = new BackupRequest();
            backupRequest.setSourcePath(databasePath);
            backupRequest.setNodeName("database-prod-01");
            backupRequest.setScheduleName("daily_backup");
            
            // Выполнить резервное копирование
            BackupResult result = client.backup(backupRequest);
            
            if (result.isSuccessful()) {
                System.out.println("Backup successful. Session: " + 
                    result.getSessionId());
                System.out.println("Bytes backed up: " + 
                    result.getTotalBytes());
            } else {
                System.err.println("Backup failed: " + 
                    result.getErrorMessage());
            }
            
            client.disconnect();
            
        } catch (TSMException e) {
            System.err.println("TSM error: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Использование DSMC (Tivoli Storage Manager CLI)

public class TSMCommandLineIntegration {
    
    public void backupUsingCommandLine(String filePath) 
        throws IOException, InterruptedException {
        
        // Использовать command line интерфейс TSM
        ProcessBuilder pb = new ProcessBuilder(
            "dsmc",
            "backup",
            filePath,
            "-subdir=yes"
        );
        
        pb.redirectErrorStream(true);
        Process process = pb.start();
        
        // Читать вывод
        try (BufferedReader reader = new BufferedReader(
            new InputStreamReader(process.getInputStream()))) {
            
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
        
        int exitCode = process.waitFor();
        System.out.println("Backup completed with exit code: " + exitCode);
    }
}

Основные концепции TSM

1. Node (Узел)

Node - это клиент (компьютер) который получает резервное копирование

Примеры nodes:
- web-server-01
- database-prod-01
- fileserver-backup
- desktop-john-smith

2. Policy Domain (Доменная политика)

Policy Domain определяет правила резервного копирования

Например:
- Какие данные резервируются
- Как долго хранятся данные
- На каком уровне хранилища
- Время резервного копирования

3. Management Class (Класс управления)

// Пример Policy для Java приложения
public class TSMPolicyConfiguration {
    
    /**
     * Policy: "PRODUCTION_DATABASES"
     * 
     * Backup Retention: 30 days (локальное хранилище)
     * Archive Retention: 7 years (ленточное хранилище)
     * Frequency: Daily at 2 AM
     * Storage Type: Disk + Tape
     */
    public static final String PRODUCTION_POLICY = 
        "PRODUCTION_DATABASES";
    
    /**
     * Policy: "DEV_DATABASES"
     * 
     * Backup Retention: 7 days (только диск)
     * Archive Retention: 30 days (диск)
     * Frequency: Weekly
     * Storage Type: Disk only
     */
    public static final String DEVELOPMENT_POLICY = 
        "DEV_DATABASES";
}

4. Storage Pool (Пул хранилища)

Storage Pool - это физическое хранилище

Примеры:
- DISK_POOL (быстрое дисковое хранилище)
- TAPE_POOL (ленточное архивное хранилище)
- CLOUD_POOL (облачное хранилище)

Использование TSM в Production системах Java

Пример: Резервное копирование PostgreSQL БД

public class DatabaseBackupService {
    private final Logger logger = LoggerFactory.getLogger(
        DatabaseBackupService.class
    );
    private final TSMClient tsmClient;
    
    public DatabaseBackupService(TSMClient tsmClient) {
        this.tsmClient = tsmClient;
    }
    
    public void performDailyBackup() {
        try {
            // 1. Создать дамп базы данных
            String dumpFile = createPostgreSQLDump();
            logger.info("Database dump created: {}", dumpFile);
            
            // 2. Отправить в TSM
            BackupJob job = new BackupJob();
            job.setNodeName("database-prod-01");
            job.setFilePath(dumpFile);
            job.setManagementClass("PRODUCTION_DATABASES");
            job.setDescription("Daily PostgreSQL backup");
            
            BackupResult result = tsmClient.submitBackup(job);
            
            // 3. Логировать результат
            if (result.isSuccessful()) {
                logger.info("Backup successful. Size: {} MB, "
                    + "Session: {}",
                    result.getTotalBytes() / (1024 * 1024),
                    result.getSessionId()
                );
                
                // 4. Очистить временный файл дамп
                deleteTemporaryFile(dumpFile);
            } else {
                logger.error("Backup failed: {}", 
                    result.getErrorMessage());
                sendAlertToOps("Database backup failed");
            }
            
        } catch (Exception e) {
            logger.error("Error during backup", e);
            sendAlertToOps("Backup service error: " + e.getMessage());
        }
    }
    
    private String createPostgreSQLDump() throws IOException {
        ProcessBuilder pb = new ProcessBuilder(
            "pg_dump",
            "-h", "localhost",
            "-U", "postgres",
            "-Fc",
            "-f", "/tmp/backup_" + System.currentTimeMillis() + ".sql",
            "production_db"
        );
        
        Process process = pb.start();
        process.waitFor();
        
        return "/tmp/backup_" + System.currentTimeMillis() + ".sql";
    }
    
    private void deleteTemporaryFile(String filePath) {
        try {
            Files.delete(Paths.get(filePath));
            logger.info("Temporary file deleted: {}", filePath);
        } catch (IOException e) {
            logger.warn("Failed to delete temporary file", e);
        }
    }
    
    private void sendAlertToOps(String message) {
        // Отправить alert в систему мониторинга
        logger.error("ALERT: {}", message);
    }
}

Пример: Восстановление данных из TSM

public class DatabaseRestoreService {
    private final TSMClient tsmClient;
    
    public void restoreFromBackup(String sessionId, String restorePath) 
        throws TSMException {
        
        RestoreRequest request = new RestoreRequest();
        request.setSessionId(sessionId);
        request.setDestinationPath(restorePath);
        request.setNodeName("database-prod-01");
        
        RestoreResult result = tsmClient.restore(request);
        
        if (result.isSuccessful()) {
            System.out.println("Restore completed successfully");
            System.out.println("Files restored: " + 
                result.getFilesRestored());
            System.out.println("Total bytes: " + 
                result.getTotalBytes());
        } else {
            throw new TSMException("Restore failed: " + 
                result.getErrorMessage());
        }
    }
}

Команды TSM Command Line

# Список всех nodes
dsmc query node

# Информация о резервном копировании для node
dsmc query session -nodename=database-prod-01

# Статус конкретной сессии
dsmc query session <session_id>

# Резервное копирование файла
dsmc backup /path/to/file -subdir=yes

# Восстановление файла
dsmc restore /path/to/file

# Просмотр archived файлов
dsmc query archive -nodename=database-prod-01

# Удалить старые резервные копии
dsmc delete session -nodename=database-prod-01 -daysago=30

Почему TSM важна для Enterprise Java приложений

  1. Соответствие нормативам — GDPR, HIPAA, SOX требуют резервного копирования
  2. Disaster Recovery — восстановление после сбоев
  3. Compliance Reporting — документирование резервных копий
  4. Cost Optimization — автоматическое перемещение в дешевые хранилища
  5. Long-term Archival — долговременное хранение на лентах

Мониторинг TSM из Java

public class TSMMonitoring {
    
    public BackupHealth checkBackupHealth(String nodeName) 
        throws TSMException {
        
        TSMClient client = new TSMClient();
        
        // Получить последнюю сессию
        Session lastSession = client.getLastSession(nodeName);
        
        BackupHealth health = new BackupHealth();
        health.setNodeName(nodeName);
        health.setLastBackupTime(lastSession.getEndTime());
        health.setStatus(lastSession.getStatus());
        health.setDataBytes(lastSession.getTotalBytes());
        health.setDurationMinutes(lastSession.getDurationMinutes());
        
        // Проверить успешность
        if (lastSession.getStatus().equals("COMPLETED")) {
            health.setHealthy(true);
        } else {
            health.setHealthy(false);
        }
        
        return health;
    }
}

class BackupHealth {
    private String nodeName;
    private long lastBackupTime;
    private String status;
    private long dataBytes;
    private int durationMinutes;
    private boolean healthy;
    
    // getters и setters
}

Заключение

TSM (IBM Spectrum Protect) — это корпоративное решение для:

  • Резервного копирования
  • Архивирования
  • Управления хранилищем
  • Соответствия нормативам

Для Java приложений TSM обеспечивает надежное сохранение критичных данных и возможность восстановления при необходимости.