feat(infraestrutura): adiciona plugin infraestrutura (agents, skills, knowledge e metadados do projeto)
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
---
|
||||
name: proxmox-cluster
|
||||
description: Formação de cluster Proxmox com 2+ nodes — configuração de Corosync, Quorum e preparação para High Availability.
|
||||
disable-model-invocation: true
|
||||
layer: wiki
|
||||
---
|
||||
|
||||
# Proxmox Cluster
|
||||
|
||||
Formar cluster Proxmox 2+ nodes com Corosync, Quorum e preparação para High Availability.
|
||||
|
||||
## Quando Usar
|
||||
|
||||
- Formar cluster 2-node após migration complete
|
||||
- Adicionar node a cluster existente
|
||||
- Configurar quorum e fencing
|
||||
- Preparar para HA (skill /proxmox-ha)
|
||||
|
||||
## Sintaxe
|
||||
|
||||
```bash
|
||||
/proxmox-cluster create --node-a <ip-hostname> --node-b <ip-hostname> [--cluster-name]
|
||||
/proxmox-cluster join --node <ip> --cluster <existing-cluster-ip>
|
||||
```
|
||||
|
||||
## Exemplos
|
||||
|
||||
```bash
|
||||
# Criar cluster 2-node
|
||||
/proxmox-cluster create --node-a server.descomplicar.pt --node-b cluster.descomplicar.pt --cluster-name descomplicar
|
||||
|
||||
# Adicionar 3º node
|
||||
/proxmox-cluster join --node pve-node3.descomplicar.pt --cluster cluster.descomplicar.pt
|
||||
```
|
||||
|
||||
## Knowledge Sources
|
||||
|
||||
### NotebookLM
|
||||
```bash
|
||||
mcp__notebooklm__notebook_query \
|
||||
notebook_id:"276ccdde-6b95-42a3-ad96-4e64d64c8d52" \
|
||||
query:"proxmox cluster corosync quorum pvecm ha"
|
||||
```
|
||||
|
||||
## Workflow Completo
|
||||
|
||||
### Pre-Requisites
|
||||
|
||||
**1. Verificar Nodes Prontos**
|
||||
```bash
|
||||
# Ambos nodes devem ter:
|
||||
- Proxmox VE 8.x instalado (/proxmox-setup)
|
||||
- Networking configurado (NAT ou vSwitch)
|
||||
- PBS configurado (/pbs-config)
|
||||
- Mesma versão PVE
|
||||
- Hostnames únicos
|
||||
- Conectividade IP entre nodes
|
||||
```
|
||||
|
||||
**2. Validar Conectividade**
|
||||
```bash
|
||||
# De Node A → Node B
|
||||
ping -c 3 <node-b-ip>
|
||||
ssh root@<node-b-ip> pveversion
|
||||
|
||||
# De Node B → Node A
|
||||
ping -c 3 <node-a-ip>
|
||||
ssh root@<node-a-ip> pveversion
|
||||
```
|
||||
|
||||
**3. Sincronizar Time (CRITICAL)**
|
||||
```bash
|
||||
# Ambos nodes devem ter NTP configurado
|
||||
timedatectl status
|
||||
|
||||
# Instalar chrony se necessário
|
||||
apt install chrony
|
||||
systemctl enable --now chronyd
|
||||
```
|
||||
|
||||
**4. Backup Pre-Cluster**
|
||||
```bash
|
||||
# Backup configs de ambos nodes
|
||||
tar -czf /tmp/pre-cluster-backup.tar.gz /etc/pve /etc/network
|
||||
|
||||
# Transfer para PBS
|
||||
```
|
||||
|
||||
### Fase 1: Cluster Creation (Node B)
|
||||
|
||||
**1.1 Criar Cluster em Node B (Primeiro Node)**
|
||||
```bash
|
||||
# SSH to Node B (cluster.descomplicar.pt)
|
||||
ssh root@<node-b-ip>
|
||||
|
||||
# Criar cluster
|
||||
pvecm create descomplicar
|
||||
|
||||
# Verificar
|
||||
pvecm status
|
||||
|
||||
# Expected output:
|
||||
# Cluster information
|
||||
# Name: descomplicar
|
||||
# Nodes: 1
|
||||
# Expected votes: 1
|
||||
```
|
||||
|
||||
**1.2 Obter Cluster Join Info**
|
||||
```bash
|
||||
# Obter join information (para Node A)
|
||||
pvecm nodes
|
||||
|
||||
# Anot IP e nome do cluster
|
||||
```
|
||||
|
||||
### Fase 2: Join Node A ao Cluster
|
||||
|
||||
**2.1 Join Node A**
|
||||
```bash
|
||||
# SSH to Node A (server.descomplicar.pt)
|
||||
ssh root@<node-a-ip>
|
||||
|
||||
# Join cluster (fornecer IP do Node B)
|
||||
pvecm add <node-b-ip>
|
||||
|
||||
# Durante processo:
|
||||
# - Solicita password root do Node B
|
||||
# - Transfere configuração cluster
|
||||
# - Copia /etc/pve/
|
||||
# - Reinicia serviços cluster
|
||||
|
||||
# AGUARDAR ~2-5min
|
||||
```
|
||||
|
||||
**2.2 Verificar Join Successful**
|
||||
```bash
|
||||
# Em Node A:
|
||||
pvecm status
|
||||
|
||||
# Expected output:
|
||||
# Nodes: 2
|
||||
# Expected votes: 2
|
||||
# Quorum: 2 (Active)
|
||||
|
||||
# Listar nodes
|
||||
pvecm nodes
|
||||
|
||||
# Should show both nodes
|
||||
```
|
||||
|
||||
**2.3 Verificar Replicação /etc/pve/**
|
||||
```bash
|
||||
# Em Node A:
|
||||
ls -lah /etc/pve/
|
||||
|
||||
# Should see:
|
||||
# - nodes/ (ambos nodes)
|
||||
# - qemu-server/ (VMs)
|
||||
# - lxc/ (containers)
|
||||
# - storage.cfg (shared)
|
||||
|
||||
# Teste: Criar VM em Node A via Web UI
|
||||
# Verificar aparece em Node B também
|
||||
```
|
||||
|
||||
### Fase 3: Quorum Configuration
|
||||
|
||||
**3.1 Verificar Quorum Votes**
|
||||
```bash
|
||||
pvecm status | grep "Expected votes"
|
||||
|
||||
# 2-node cluster:
|
||||
# Expected votes: 2
|
||||
# Quorum: 2
|
||||
|
||||
# CRITICAL: Com 2 nodes, perder 1 node = perder quorum
|
||||
```
|
||||
|
||||
**3.2 Configurar QDevice (Opcional - 2-node clusters)**
|
||||
|
||||
**Problema 2-node cluster:** Se 1 node falha, cluster perde quorum (não pode fazer alterações).
|
||||
|
||||
**Solução:** Adicionar QDevice externo (3º vote)
|
||||
|
||||
```bash
|
||||
# Em VPS externo leve (ou Raspberry Pi):
|
||||
apt install corosync-qnetd
|
||||
|
||||
# Em ambos PVE nodes:
|
||||
apt install corosync-qdevice
|
||||
|
||||
# Configurar QDevice (em Node A ou B):
|
||||
pvecm qdevice setup <qdevice-ip>
|
||||
|
||||
# Verificar
|
||||
pvecm status
|
||||
# Expected votes: 3 (2 nodes + 1 qdevice)
|
||||
```
|
||||
|
||||
**Recomendação Cluster Descomplicar:**
|
||||
- Iniciar sem QDevice (aceitar limitação 2-node)
|
||||
- Adicionar QDevice futuro se necessário
|
||||
- Ou adicionar 3º node físico
|
||||
|
||||
### Fase 4: Storage Configuration
|
||||
|
||||
**4.1 Configurar Shared Storage (Opcional)**
|
||||
|
||||
**Opções:**
|
||||
- NFS share
|
||||
- Ceph (mínimo 3 nodes)
|
||||
- ZFS replication (não shared, mas sync)
|
||||
|
||||
**Para 2-node sem shared storage:**
|
||||
- VMs ficam em local storage de cada node
|
||||
- Live migration copia disk (mais lento mas funciona)
|
||||
- HA usa storage replication ou aceita downtime de boot
|
||||
|
||||
**4.2 Configurar PBS como Shared**
|
||||
```bash
|
||||
# PBS já configurado (/pbs-config)
|
||||
# Adicionar PBS storage em ambos nodes via Web UI
|
||||
|
||||
# Datacenter → Storage → Add → Proxmox Backup Server
|
||||
# ID: pbs-main
|
||||
# Server: <pbs-ip>
|
||||
# Datastore: main-store
|
||||
# Content: VZDump backup files
|
||||
# Nodes: ALL
|
||||
```
|
||||
|
||||
### Fase 5: Networking Validation
|
||||
|
||||
**5.1 Verificar Cluster Network**
|
||||
```bash
|
||||
# Verificar Corosync usa network correcta
|
||||
cat /etc/pve/corosync.conf
|
||||
|
||||
# Deve usar IP management (não vSwitch)
|
||||
# bindnetaddr: <management-subne
|
||||
Reference in New Issue
Block a user