Skip to content

LINSTOR — operações

LINSTOR — operacoes comuns (com comandos e explicacao)

Guia pratico com os comandos usados no cluster SP. Complementa linstor-conceitos.md.

Indice

  1. Inspecionar estado
  2. Reorganizar replicas por andar
  3. Labels e regras de placement
  4. Auto-evict (recuperacao automatica)
  5. Adicionar node (diskless)
  6. Manutencao — retirar node temporariamente

Inspecionar estado

Listar nodes

Terminal window
linstor node list

Mostra: estado (Online/Offline), IP, tipo (COMBINED/SATELLITE/CONTROLLER).

Listar storage pools

Terminal window
linstor storage-pool list

Mostra capacidade livre por node.

Listar resources (volumes)

Terminal window
linstor resource list

Mostra a situacao mais importante: qual node tem UpToDate, Diskless, TieBreaker, InUse.

Glossario rapido:

EstadoSignificado
UpToDateDiskful, dados sincronizados
InconsistentDiskful, sync em andamento
OutdatedDiskful, dados antigos (perdeu conexao, volta rapido)
DisklessSem disco local, acessa via rede
TieBreakerDiskless especial, so voto de quorum
InUseVM atualmente acessando

Ver status DRBD em um node

Terminal window
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

Terminal window
linstor resource list-volumes

Mostra 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 aqui
ippri-12 — UpToDate (andar A)
ippri-31 — TieBreaker (andar B)

Passo 1 — Adicionar disco no ippri-31 (TB vira diskful)

Terminal window
linstor resource toggle-disk pve-ippri-31 pm-f4b8777b --storage-pool ssd-pool

Explicacao: 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

Terminal window
# Poll ate o disco local virar UpToDate
until ssh root@pve-ippri-31 'drbdadm status pm-f4b8777b | head -3 | grep -q "^\s*disk:UpToDate"'; do
sleep 15
done

Para 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)

Terminal window
linstor resource toggle-disk pve-ippri-12 pm-f4b8777b --diskless

Explicacao: --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 diferente

Reverter

Se precisar voltar: repita os passos trocando os nodes.

Terminal window
linstor resource toggle-disk pve-ippri-12 pm-f4b8777b --storage-pool ssd-pool
# aguardar sync
linstor resource toggle-disk pve-ippri-31 pm-f4b8777b --diskless

Labels e regras de placement

Para automatizar a distribuicao entre andares em novos volumes, use labels.

Aplicar labels nos nodes

Terminal window
linstor node set-property pve-ippri-11 Aux/floor A
linstor node set-property pve-ippri-12 Aux/floor A
linstor node set-property pve-ippri-31 Aux/floor B

Explicacao:

  • set-property grava metadados no node
  • Aux/* = namespace para propriedades custom (auxiliary) — LINSTOR ignora mas permite query
  • Poderia ser Aux/rack, Aux/dc, qualquer nome

Forcar placement entre andares diferentes

Terminal window
linstor resource-group modify sp-ssd-replicated --replicas-on-different Aux/floor

Explicacao: 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

Terminal window
linstor resource-group list

Deve mostrar ReplicasOnDifferent: ['Aux/Aux/floor'] na coluna SelectFilter.

O Aux/Aux/floor exibido e o full path da property no LINSTOR (namespace Aux/ + chave Aux/floor). Voce define como Aux/floor no comando --replicas-on-different=Aux/floor, mas o display lista com o prefixo duplicado. E o mesmo valor.

Outras regras uteis

RegraEfeito
--replicas-on-same Aux/siteForca replicas no mesmo site (oposto)
--do-not-place-with-regex '.*-backup'Nao coloca junto com volumes que matchem regex
--storage-pool ssd-pool,nvme-poolAceita 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

Terminal window
# Tempo antes de evictar (minutos)
linstor controller set-property DrbdOptions/AutoEvictAfterTime 30
# Quantos nodes podem estar offline simultaneamente para acionar evict
linstor controller set-property DrbdOptions/AutoEvictMaxDisconnectedNodes 1
# Nunca reduzir abaixo deste numero de replicas
linstor controller set-property DrbdOptions/AutoEvictMinReplicaCount 2

Explicacao 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

Terminal window
linstor controller list-properties | grep Evict

Fluxo quando o evict dispara

  1. Node offline ha 30 min → LINSTOR marca com EvictionTarget=true
  2. Pra cada resource diskful que estava no node evictado:
    • Escolhe outro node que tenha o pool (respeitando replicas-on-different etc.)
    • Cria novo LV, inicia sync via DRBD
    • Quando sync termina, resource tem place_count replicas novamente
  3. Voce e notificado (syslog/prometheus/alertmanager — conforme seu stack)

Desligar o node definitivamente apos evict

Quando o node nao voltar mesmo:

Terminal window
linstor node delete pve-ippri-XX

Isso remove ele do controller. Se o node voltar depois, precisa re-criar (node create + reinstall satellite).

Desabilitar auto-evict por node

Terminal window
linstor node set-property <node> DrbdOptions/AutoEvictAllowEviction False

Util 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.1 no cluster SP)
  • Pacotes linstor-satellite instalados
  • Node ja inscrito na rede LINSTOR (10.10.10.0/24 em SP)

Passos

Terminal window
# 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. Validar
linstor node list

Sobre --node-type combined vs satellite: em cluster pequeno (3-5 nodes), combined e o padrao — todos sao “controller-eligible” e o controller ativo flutua via DRBD. Em cluster grande, satellite puro 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):

Terminal window
# No node, preparar VG/thinpool
ssh root@pve-ippri-32 'vgcreate linstor_ssd /dev/sdX /dev/sdY && lvcreate -T -l 100%FREE linstor_ssd -n thinpool'
# Registrar pool no LINSTOR
linstor storage-pool create lvmthin pve-ippri-32 ssd-pool linstor_ssd/thinpool
# Verificar
linstor storage-pool list

Pronto — o novo node participa do ssd-pool com capacidade propria.


Manutencao

Tirar node para manutencao (sem evict)

Terminal window
# Desabilitar auto-evict temporariamente
linstor node set-property pve-ippri-XX DrbdOptions/AutoEvictAllowEviction False
# Desabilitar o node (LINSTOR para de tentar usar)
linstor node evacuate pve-ippri-XX

evacuate move todas as replicas diskful do node para outros nodes. Apos evacuar, pode reiniciar/desligar tranquilo.

Voltar o node

Terminal window
# Node sobe, reconecta automaticamente
linstor node list # verificar Online
# Reabilitar evict (depois que estabilizar)
linstor node set-property pve-ippri-XX DrbdOptions/AutoEvictAllowEviction True

Trocar disco com falha

Terminal window
# 1. Remover pool antigo (sem remover VG!)
linstor storage-pool delete pve-ippri-XX ssd-pool
# 2. No node, recriar VG
ssh 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 pool
linstor storage-pool create lvmthin pve-ippri-XX ssd-pool linstor_ssd/thinpool
# 4. LINSTOR recria as replicas perdidas automaticamente
linstor resource list # acompanhar

Estado atual do cluster SP (ref 2026-04-20)

Topologia de nodes

NodeAndarPapelSSDs
pve-ippri-11ACOMBINED/dev/sdd, /dev/sde
pve-ippri-12ACOMBINED/dev/sdb, /dev/sdc
pve-ippri-31BCOMBINED/dev/sdc, /dev/sdd

Distribuicao de resources (apos reorganizacao)

ResourceVMippri-11 (A)ippri-12 (A)ippri-31 (B)Observacao
pm-f4b8777bVyOS 6001UpToDate (InUse)DisklessUpToDateReplicas em andares diferentes
pm-7b4626d8traefik 6002UpToDateDisklessUpToDateReplicas em andares diferentes
pm-20aeef71gpu-sp-01 1010TieBreakerUpToDateUpToDate (InUse)Replicas em andares diferentes
pm-babed8db(template)UpToDateTieBreakerUpToDateReplicas 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: 2

Observacoes 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:

Terminal window
qm migrate 6001 pve-ippri-31 --online

Deve 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:

Terminal window
qm set 6001 -cpu x86-64-v2-AES

(Precisa reboot da VM para aplicar.)


Comandos de referencia rapida

Terminal window
# Ver tudo
linstor node list
linstor storage-pool list
linstor resource list
linstor resource-group list
# Mudar topologia
linstor resource toggle-disk <node> <resource> --storage-pool <pool> # add
linstor resource toggle-disk <node> <resource> --diskless # remove
# Labels
linstor node set-property <node> Aux/<chave> <valor>
linstor node list-properties <node>
# Resource group
linstor resource-group modify <rg> --replicas-on-different Aux/<chave>
# Auto-evict
linstor controller set-property DrbdOptions/AutoEvictAfterTime <min>
linstor controller list-properties | grep Evict
# Debug DRBD
ssh root@<node> 'drbdadm status <resource>'
ssh root@<node> 'drbdsetup status <resource> --verbose --statistics'