Tutorial - Cluster com Raspberry Pi 4

Tutorial: Configurando um Cluster de Raspberry Pi com Boot via Rede

Este tutorial irá guiá-lo na instalação do Raspbian no nó mestre, configuração do servidor DHCP e preparação dos nós escravos para boot via NFS e TFTP.

Índice

    1. Instalar Raspbian no Nó Mestre
  1. Configurar os Nós Escravos

Passo 1: Instalar Raspbian no Nó Mestre

1.1 Instalar o Raspbian

  1. Baixe a imagem do Raspbian:

    • Vá para o site oficial do Raspberry Pi.
    • Escolha a versão sem GUI e copie o link para download.
  2. Grave a imagem no cartão SD:

    • Use o Raspberry Pi Imager ou outro software de gravação de imagens.
    • Insira o cartão SD no seu computador.
    • Selecione a imagem baixada e o cartão SD como destino.
    • Inicie o processo de gravação.
  3. Configure o Raspberry Pi:

    • Insira o cartão SD no Raspberry Pi.
    • Conecte o Raspberry Pi a um monitor, teclado e rede.
    • Ligue o Raspberry Pi.
    • Siga as instruções de configuração inicial.

1.2 Configurar o Servidor DHCP

  1. Instalar o ISC DHCP Server:

    sudo -s
    apt install -y isc-dhcp-server
    
  2. Editar a configuração do DHCP:

    nano /etc/dhcp/dhcpd.conf
    
    • Adicione suas configurações de DHCP conforme necessário, por exemplo:
      subnet 10.0.0.0 netmask 255.255.255.0 {
          range 10.0.0.10 10.0.0.50;
          option routers 10.0.0.1;
          option domain-name-servers 10.0.0.1;
      }
      
  3. Reiniciar o servidor DHCP:

    systemctl restart isc-dhcp-server
    
  4. Definir as interfaces de escuta:
    Edite o arquivo /etc/default/isc-dhcp-server:

    INTERFACESv4="eth0"
    
  5. Verificar logs em caso de problemas:

    journalctl -xeu isc-dhcp-server
    

1.3 Configurar um Endereço IP Estático na Interface Principal

Para garantir que o nó mestre mantenha o mesmo endereço IP, é importante configurar um endereço IP estático. Siga os passos abaixo para configurar um endereço IP estático na interface principal (eth0):

  1. Editar o arquivo de configuração do dhcpcd:

    • Abra o arquivo /etc/dhcpcd.conf com seu editor de texto preferido, por exemplo, nano:
      sudo nano /etc/dhcpcd.conf
      
  2. Adicionar a configuração do endereço IP estático:

    • No arquivo /etc/dhcpcd.conf, adicione as seguintes linhas ao final do arquivo. Isso configurará o endereço IP estático, o gateway (roteador) e os servidores DNS:

      interface eth0
      static ip_address=10.0.0.1/24
      static routers=10.0.0.1
      static domain_name_servers=8.8.8.8 8.8.4.4
      
    • Explicação das linhas:

      • interface eth0: Especifica a interface de rede para a qual a configuração se aplica (neste caso, eth0).
      • static ip_address=10.0.0.1/24: Define o endereço IP estático. O /24 indica a máscara de sub-rede (255.255.255.0).
      • static routers=10.0.0.1: Define o gateway padrão (geralmente o endereço IP do roteador).
      • static domain_name_servers=8.8.8.8 8.8.4.4: Define os servidores DNS. Aqui usamos os servidores DNS públicos do Google.
  3. Salvar e sair do editor:

    • No nano, pressione Ctrl+O para salvar e Ctrl+X para sair.
  4. Reiniciar o serviço de rede:

    • Para aplicar as mudanças, reinicie o serviço de rede ou reinicie o Raspberry Pi:
      sudo systemctl restart dhcpcd
      
    • Alternativamente, você pode reiniciar o Raspberry Pi:
      sudo reboot
      
  5. Verificar a configuração:

    • Após reiniciar, verifique se o endereço IP estático foi configurado corretamente:
      ip addr show eth0
      
    • Procure a linha que mostra o endereço IP e verifique se está configurado como 10.0.0.1.

1.4 Verificar a Instalação

  1. Verifique se o DHCP server está rodando corretamente:
    systemctl status isc-dhcp-server
    

Agora que o nó mestre está configurado com Raspbian e um servidor DHCP funcional, prossiga para a configuração dos nós escravos.

Passo 2: Configurar os Nós Escravos

2.1 Particionar o SSD

  1. Listar discos e particionar:

    fdisk -l
    fdisk /dev/sda
    

    No fdisk, use os comandos:

    g   (para criar uma nova tabela de partição GPT)
    n   (para adicionar uma nova partição)
    w   (para escrever as alterações)
    
  2. Instalar o btrfs-progs:

    apt install btrfs-progs
    
  3. Criar o sistema de arquivos:

    mkfs.btrfs /dev/sda1
    
  4. Adicionar ao fstab:
    Edite o arquivo /etc/fstab:

    /dev/sda1       /mnt/usb        btrfs       defaults    0   0
    
  5. Montar o SSD:

    mkdir /mnt/usb
    mount /mnt/usb
    

2.2 Configurar a Imagem do Sistema Operacional

  1. Baixar a imagem do Raspbian:
    Vá para Raspberry Pi OS 64-bit e copie o link para uma imagem sem GUI.

  2. Baixar e extrair a imagem:

    cd /mnt/usb
    wget <link_copiado> -O os.img.xz
    unxz os.img.xz
    
  3. Montar a imagem:

    dev=$(losetup -Pf --show os.img)
    mkdir mnt
    mount ${dev}p2 mnt
    
  4. Copiar o sistema de arquivos:

    btrfs subvolume create slave
    rsync -av --info=progress2 mnt/ slave/
    
  5. Desmontar a partição principal:

    umount mnt
    
  6. Montar a partição de firmware:

    mount ${dev}p1
    
    

Passo 2: Configurar os Nós Escravos

2.1 Particionar o SSD

  1. Listar discos e particionar:

    fdisk -l
    fdisk /dev/sda
    

    No fdisk, use os comandos:

    g   (para criar uma nova tabela de partição GPT)
    n   (para adicionar uma nova partição)
    w   (para escrever as alterações)
    
  2. Instalar o btrfs-progs:

    apt install btrfs-progs
    
  3. Criar o sistema de arquivos:

    mkfs.btrfs /dev/sda1
    
  4. Adicionar ao fstab:
    Edite o arquivo /etc/fstab:

    /dev/sda1       /mnt/usb        btrfs       defaults    0   0
    
  5. Montar o SSD:

    mkdir /mnt/usb
    mount /mnt/usb
    

2.2 Configurar a Imagem do Sistema Operacional

  1. Baixar a imagem do Raspbian:
    Vá para Raspberry Pi OS 64-bit e copie o link para uma imagem sem GUI.

  2. Baixar e extrair a imagem:

    cd /mnt/usb
    wget <link_copiado> -O os.img.xz
    unxz os.img.xz
    
  3. Montar a imagem:

    dev=$(losetup -Pf --show os.img)
    mkdir mnt
    mount ${dev}p2 mnt
    
  4. Copiar o sistema de arquivos:

    btrfs subvolume create slave
    rsync -av --info=progress2 mnt/ slave/
    
  5. Desmontar o sistema principal:

    umount mnt
    
  6. Montar a partição de firmware:

    mount ${dev}p1
    
  7. Copiar a partição de firmware:

    mkdir -p slave/boot/firmware
    rsync -av --info=progress2 mnt/ slave/boot/firmware
    umount mnt
    

2.3 Servir via NFS

  1. Instalar o servidor NFS:

    apt install nfs-kernel-server
    
  2. Habilitar serviços necessários:

    systemctl enable --now rpcbind
    systemctl enable --now nfs-server
    
  3. Recarregar lista de exportação:

    exportfs -r
    
  4. Verificar as exportações:

    showmount -e localhost
    

2.4 Servir os Arquivos de Boot via TFTP

  1. Instalar o servidor TFTP e criar a árvore de diretórios:

    apt install tftp-hpa
    mkdir -p tftpboot
    chown tftp:tftp tftpboot
    
  2. Configurar o servidor TFTP:
    Edite o arquivo /etc/default/tftpd-hpa:

    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/mnt/usb/tftpboot"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="--secure --create"
    
  3. Reiniciar o servidor TFTP:

    systemctl restart tftpd-hpa
    
  4. Configurar a pasta de firmware para ser vinculada à árvore do servidor TFTP:
    Edite o arquivo /etc/fstab:

    /mnt/usb/slave/boot/firmware    /mnt/usb/tftpboot   none    bind    0   0
    
  5. Montar as pastas:

    mount -a
    
  6. Configurar os nós escravos para montar o root via NFS:

    echo 'console=serial0,115200 console=tty root=/dev/nfs nfsroot=10.0.0.1:/mnt/usb/slave,vers=3 rw ip=dhcp rootwait' > slave/boot/firmware/cmdline.txt
    

2.5 Configurar os Sistemas Escravos

  1. Configurar o fstab dos escravos para montar / via NFS:
    Edite o arquivo slave/etc/fstab:

    pi-master:/mnt/usb/slave    /   nfs vers=3  0   0
    
  2. Adicionar o mestre e os escravos ao arquivo hosts do mestre:
    Edite o arquivo /etc/hosts:

    10.0.0.1    pi-master
    10.0.0.2    pi-slave-01
    10.0.0.3    pi-slave-03
    
  3. Vincular o arquivo hosts do mestre aos escravos:
    Edite o arquivo /etc/fstab:

    /etc/hosts      /mnt/usb/slave/etc/hosts    none    bind    0   0
    
  4. Remover o arquivo de hostname nos escravos:

    rm slave/etc/hostname
    

2.5.1 Configurar SSH

  1. Gerar uma chave SSH no nó mestre:

    ssh-keygen -t rsa -b 4096 -C "pi@cluster"
    
  2. Copiar a chave SSH para o root do escravo:

    cat ~/.ssh/id_rsa.pub >> slave/root/.ssh/authorized_keys
    

2.5.2 Configurar os Serviços do Sistema

  1. Chroot no sistema:

    for fs in dev proc sys; do mount -R {,slave}/$fs; done
    chroot slave /bin/bash
    . /etc/profile
    
  2. Desativar serviços desnecessários:

    systemctl disable resize2fs_once
    systemctl disable sshswitch
    systemctl disable userconfig
    apt remove dphys-swapfile
    
  3. Habilitar o serviço SSH:

    systemctl enable ssh
    
  4. Sair do chroot:
    Pressione Ctrl+D.

2.6 Configurar o Boot via Rede nos Escravos

  1. No escravo, bootar uma imagem genérica e configurar o boot via rede:
    raspi-config
    
    Navegue para Advanced Options > Boot Order > Network Boot e reinicie.

Neste ponto, o nó escravo deve conseguir bootar via rede.

Projeto muito legal, otima forma de aprender.
Galera que esta realizando muito engajada.
Vou participar na próxima vez