← Назад к вопросам
Что такое 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 для:
- Резервного копирования данных
- Управления версиями файлов
- Обеспечения соответствия нормативам (GDPR, HIPAA)
- Архивирования баз данных
Интеграция 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 приложений
- Соответствие нормативам — GDPR, HIPAA, SOX требуют резервного копирования
- Disaster Recovery — восстановление после сбоев
- Compliance Reporting — документирование резервных копий
- Cost Optimization — автоматическое перемещение в дешевые хранилища
- 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 обеспечивает надежное сохранение критичных данных и возможность восстановления при необходимости.