LINSTOR — operações
LINSTOR — operacoes comuns (com comandos e explicacao)
Guia pratico com os comandos usados no cluster SP. Complementa linstor-conceitos.md.
Indice
- Inspecionar estado
- Reorganizar replicas por andar
- Labels e regras de placement
- Auto-evict (recuperacao automatica)
- Adicionar node (diskless)
- Manutencao — retirar node temporariamente
Inspecionar estado
Listar nodes
linstor node listMostra: estado (Online/Offline), IP, tipo (COMBINED/SATELLITE/CONTROLLER).
Listar storage pools
linstor storage-pool listMostra capacidade livre por node.
Listar resources (volumes)
linstor resource listMostra a situacao mais importante: qual node tem UpToDate, Diskless, TieBreaker, InUse.
Glossario rapido:
| Estado | Significado |
|---|---|
UpToDate | Diskful, dados sincronizados |
Inconsistent | Diskful, sync em andamento |
Outdated | Diskful, dados antigos (perdeu conexao, volta rapido) |
Diskless | Sem disco local, acessa via rede |
TieBreaker | Diskless especial, so voto de quorum |
InUse | VM atualmente acessando |
Ver status DRBD em um node
ssh root@<node> 'drbdadm status <nome-resource>'Mostra o ponto de vista daquele node — role (Primary/Secondary), replicacao (Established/SyncSource/SyncTarget), progresso de sync (done:XX.XX%).
Listar resources que usam storage pool especifico
linstor resource list-volumesMostra DeviceName (/dev/drbdNNNN), pool de cada replica, tamanho alocado.
Reorganizar replicas por andar
Cenario: o cluster SP tem nodes ippri-11/12 no andar A e ippri-31 no andar B. Por default, LINSTOR coloca as 2 replicas nos 2 primeiros nodes disponiveis — pode colocar ambas em nodes do mesmo andar.
Objetivo: ter uma replica em cada andar. Se o andar A cair (energia, rede), dados continuam acessiveis.
Estado inicial do VyOS (pm-f4b8777b):
ippri-11 — UpToDate (andar A) — VM rodando aquiippri-12 — UpToDate (andar A)ippri-31 — TieBreaker (andar B)Passo 1 — Adicionar disco no ippri-31 (TB vira diskful)
linstor resource toggle-disk pve-ippri-31 pm-f4b8777b --storage-pool ssd-poolExplicacao: toggle-disk alterna o estado de disco. Se nao tem disco local (TB ou diskless), cria um LV no pool especificado e inicia sync. Se tem, remove.
Temporariamente fica com 3 replicas diskful (11, 12, 31). Nao e problema — LINSTOR aceita mais do que place_count.
Passo 2 — Aguardar sync completar
# Poll ate o disco local virar UpToDateuntil ssh root@pve-ippri-31 'drbdadm status pm-f4b8777b | head -3 | grep -q "^\s*disk:UpToDate"'; do sleep 15donePara o VyOS (~935 MiB), leva ~30 segundos em 10G. Se o volume for grande, pode levar minutos/horas.
Nao faca o passo 3 antes do sync completar — voce perderia redundancia.
Passo 3 — Remover disco do ippri-12 (vira diskless)
linstor resource toggle-disk pve-ippri-12 pm-f4b8777b --disklessExplicacao: --diskless forca o LV a ser removido, mas o node continua participando como cliente DRBD (acessa via rede). Se o LINSTOR achar que precisa de TieBreaker para quorum, pode reconverter automaticamente.
Estado final:
ippri-11 — UpToDate (andar A)ippri-12 — Diskless (andar A)ippri-31 — UpToDate (andar B) ← NOVA replica em andar diferenteReverter
Se precisar voltar: repita os passos trocando os nodes.
linstor resource toggle-disk pve-ippri-12 pm-f4b8777b --storage-pool ssd-pool# aguardar synclinstor resource toggle-disk pve-ippri-31 pm-f4b8777b --disklessLabels e regras de placement
Para automatizar a distribuicao entre andares em novos volumes, use labels.
Aplicar labels nos nodes
linstor node set-property pve-ippri-11 Aux/floor Alinstor node set-property pve-ippri-12 Aux/floor Alinstor node set-property pve-ippri-31 Aux/floor BExplicacao:
set-propertygrava metadados no nodeAux/*= namespace para propriedades custom (auxiliary) — LINSTOR ignora mas permite query- Poderia ser
Aux/rack,Aux/dc, qualquer nome
Forcar placement entre andares diferentes
linstor resource-group modify sp-ssd-replicated --replicas-on-different Aux/floorExplicacao: quando o LINSTOR auto-coloca um novo volume usando sp-ssd-replicated, ele exige que cada replica esteja em um node com Aux/floor diferente.
Efeito:
- 2 replicas → nunca ambas no andar A ou B
- Se so tiver nodes de 1 andar disponivel, falha na criacao (forca voce a arrumar o cluster)
Verificar
linstor resource-group listDeve mostrar ReplicasOnDifferent: ['Aux/Aux/floor'] na coluna SelectFilter.
O
Aux/Aux/floorexibido e o full path da property no LINSTOR (namespaceAux/+ chaveAux/floor). Voce define comoAux/floorno comando--replicas-on-different=Aux/floor, mas o display lista com o prefixo duplicado. E o mesmo valor.
Outras regras uteis
| Regra | Efeito |
|---|---|
--replicas-on-same Aux/site | Forca replicas no mesmo site (oposto) |
--do-not-place-with-regex '.*-backup' | Nao coloca junto com volumes que matchem regex |
--storage-pool ssd-pool,nvme-pool | Aceita multiplos pools (LINSTOR escolhe) |
Auto-evict (recuperacao automatica)
Problema: se um node diskful morre e nao volta, suas replicas ficam offline. Sem acao, o cluster roda com menos redundancia ate voce intervir.
Solucao: auto-evict — depois de X minutos offline, LINSTOR marca o node como perdido e recria a replica em outro node automaticamente.
Configurar
# Tempo antes de evictar (minutos)linstor controller set-property DrbdOptions/AutoEvictAfterTime 30
# Quantos nodes podem estar offline simultaneamente para acionar evictlinstor controller set-property DrbdOptions/AutoEvictMaxDisconnectedNodes 1
# Nunca reduzir abaixo deste numero de replicaslinstor controller set-property DrbdOptions/AutoEvictMinReplicaCount 2Explicacao de cada opcao:
- AutoEvictAfterTime 30: node tem que estar offline por 30 minutos consecutivos antes do LINSTOR assumir que morreu. Evita evicts durante reboots, manutencoes curtas.
- AutoEvictMaxDisconnectedNodes 1: se 2+ nodes caem ao mesmo tempo, nao evicta nada (provavelmente e problema de rede, nao morte de hardware). Safety brake.
- AutoEvictMinReplicaCount 2: nunca reduz uma resource abaixo de 2 replicas. Mesmo se nao tiver pra onde ir, prefere manter o buraco a rodar com replicacao unica.
Verificar
linstor controller list-properties | grep EvictFluxo quando o evict dispara
- Node offline ha 30 min → LINSTOR marca com
EvictionTarget=true - Pra cada resource diskful que estava no node evictado:
- Escolhe outro node que tenha o pool (respeitando
replicas-on-differentetc.) - Cria novo LV, inicia sync via DRBD
- Quando sync termina, resource tem place_count replicas novamente
- Escolhe outro node que tenha o pool (respeitando
- Voce e notificado (syslog/prometheus/alertmanager — conforme seu stack)
Desligar o node definitivamente apos evict
Quando o node nao voltar mesmo:
linstor node delete pve-ippri-XXIsso remove ele do controller. Se o node voltar depois, precisa re-criar (node create + reinstall satellite).
Desabilitar auto-evict por node
linstor node set-property <node> DrbdOptions/AutoEvictAllowEviction FalseUtil para um node em manutencao planejada (voce sabe que volta).
Adicionar node (diskless)
Cenario: voce quer rodar VMs em um node que nao tem disco no pool (exemplo: ippri-32 com GPU, sem SSD).
Pre-requisitos:
- Node alcanca o controller via rede (
10.10.10.1no cluster SP) - Pacotes
linstor-satelliteinstalados - Node ja inscrito na rede LINSTOR (10.10.10.0/24 em SP)
Passos
# 1. Registrar no controller# --node-type combined: roda controller-eligible + satellite (default)# --node-type satellite: so storage agent (use se nao quer ele rodar controller)linstor node create pve-ippri-32 10.10.10.32 --node-type combined
# 2. Aplicar labels (opcional mas recomendado pra anti-afinidade)linstor node set-property pve-ippri-32 Aux/floor A # ou B conforme andar fisico
# 3. NAO precisa criar storage-pool diskless — ja existe default (DfltDisklessStorPool)
# 4. Validarlinstor node listSobre
--node-type combinedvssatellite: em cluster pequeno (3-5 nodes),combinede o padrao — todos sao “controller-eligible” e o controller ativo flutua via DRBD. Em cluster grande,satellitepuro pode reduzir overhead e simplifica troubleshooting (so 1 ou 3 controllers dedicados).
Depois disso, o pvesm status no novo node ja mostra linstor-ssd-01 como active (nao mais ”?”). VMs ja podem ser migradas pra la.
Com disco local (diskful)
Se adicionar tambem com disco local (ampliar capacidade do pool):
# No node, preparar VG/thinpoolssh root@pve-ippri-32 'vgcreate linstor_ssd /dev/sdX /dev/sdY && lvcreate -T -l 100%FREE linstor_ssd -n thinpool'
# Registrar pool no LINSTORlinstor storage-pool create lvmthin pve-ippri-32 ssd-pool linstor_ssd/thinpool
# Verificarlinstor storage-pool listPronto — o novo node participa do ssd-pool com capacidade propria.
Manutencao
Tirar node para manutencao (sem evict)
# Desabilitar auto-evict temporariamentelinstor node set-property pve-ippri-XX DrbdOptions/AutoEvictAllowEviction False
# Desabilitar o node (LINSTOR para de tentar usar)linstor node evacuate pve-ippri-XXevacuate move todas as replicas diskful do node para outros nodes. Apos evacuar, pode reiniciar/desligar tranquilo.
Voltar o node
# Node sobe, reconecta automaticamentelinstor node list # verificar Online
# Reabilitar evict (depois que estabilizar)linstor node set-property pve-ippri-XX DrbdOptions/AutoEvictAllowEviction TrueTrocar disco com falha
# 1. Remover pool antigo (sem remover VG!)linstor storage-pool delete pve-ippri-XX ssd-pool
# 2. No node, recriar VGssh root@pve-ippri-XX 'vgremove linstor_ssd && vgcreate linstor_ssd /dev/sdNEW'ssh root@pve-ippri-XX 'lvcreate -T -l 100%FREE linstor_ssd -n thinpool'
# 3. Recriar poollinstor storage-pool create lvmthin pve-ippri-XX ssd-pool linstor_ssd/thinpool
# 4. LINSTOR recria as replicas perdidas automaticamentelinstor resource list # acompanharEstado atual do cluster SP (ref 2026-04-20)
Topologia de nodes
| Node | Andar | Papel | SSDs |
|---|---|---|---|
| pve-ippri-11 | A | COMBINED | /dev/sdd, /dev/sde |
| pve-ippri-12 | A | COMBINED | /dev/sdb, /dev/sdc |
| pve-ippri-31 | B | COMBINED | /dev/sdc, /dev/sdd |
Distribuicao de resources (apos reorganizacao)
| Resource | VM | ippri-11 (A) | ippri-12 (A) | ippri-31 (B) | Observacao |
|---|---|---|---|---|---|
| pm-f4b8777b | VyOS 6001 | UpToDate (InUse) | Diskless | UpToDate | Replicas em andares diferentes |
| pm-7b4626d8 | traefik 6002 | UpToDate | Diskless | UpToDate | Replicas em andares diferentes |
| pm-20aeef71 | gpu-sp-01 1010 | TieBreaker | UpToDate | UpToDate (InUse) | Replicas em andares diferentes |
| pm-babed8db | (template) | UpToDate | TieBreaker | UpToDate | Replicas em andares diferentes |
Configuracao do cluster
Resource group: sp-ssd-replicated PlaceCount: 2 StoragePool: ssd-pool ReplicasOnDifferent: Aux/floor
Controller properties: DrbdOptions/AutoEvictAfterTime: 30 (min) DrbdOptions/AutoEvictAllowEviction: True DrbdOptions/AutoEvictMaxDisconnectedNodes: 1 DrbdOptions/AutoEvictMinReplicaCount: 2Observacoes importantes
TieBreaker NAO vira replica sozinho
Sem auto-evict, TieBreaker nunca se promove a diskful. Ele so tem voto de quorum.
Com auto-evict, o LINSTOR pode promover (de fato recriar) uma replica diskful no node que era TB, depois de AutoEvictAfterTime minutos. Mas nao e “instantaneo” — envolve criar LV e sync pela rede.
Writes sao sempre sincronos
Cada write espera ACK de todos os diskful. Com ippri-11 e ippri-31 em andares diferentes, a latencia de write inclui o pior dos dois discos + rede entre andares. Se a rede inter-andares for ruim, writes ficam lentos.
Monitore: ping entre 10.10.20.11 e 10.10.20.31 deve ser <0.5ms.
Proxmox live migration
Depois dessa reorganizacao, uma VM no linstor-ssd-01 pode ser migrada para qualquer node que tenha replica ou seja diskless. Exemplo:
qm migrate 6001 pve-ippri-31 --onlineDeve completar em segundos. O disco ja esta disponivel no destino (UpToDate local).
Mudanca de CPU type
VMs com cpu: host so migram entre CPUs identicos. No cluster SP ippri-11/12 (Intel) vs ippri-31 (AMD Ryzen), migracao live requer cpu: x86-64-v2-AES ou similar.
Para VyOS SP ja foi alterado:
qm set 6001 -cpu x86-64-v2-AES(Precisa reboot da VM para aplicar.)
Comandos de referencia rapida
# Ver tudolinstor node listlinstor storage-pool listlinstor resource listlinstor resource-group list
# Mudar topologialinstor resource toggle-disk <node> <resource> --storage-pool <pool> # addlinstor resource toggle-disk <node> <resource> --diskless # remove
# Labelslinstor node set-property <node> Aux/<chave> <valor>linstor node list-properties <node>
# Resource grouplinstor resource-group modify <rg> --replicas-on-different Aux/<chave>
# Auto-evictlinstor controller set-property DrbdOptions/AutoEvictAfterTime <min>linstor controller list-properties | grep Evict
# Debug DRBDssh root@<node> 'drbdadm status <resource>'ssh root@<node> 'drbdsetup status <resource> --verbose --statistics'