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
Passo 1: Instalar Raspbian no Nó Mestre
1.1 Instalar o Raspbian
-
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.
-
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.
-
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
-
Instalar o ISC DHCP Server:
sudo -s apt install -y isc-dhcp-server
-
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; }
- Adicione suas configurações de DHCP conforme necessário, por exemplo:
-
Reiniciar o servidor DHCP:
systemctl restart isc-dhcp-server
-
Definir as interfaces de escuta:
Edite o arquivo/etc/default/isc-dhcp-server
:INTERFACESv4="eth0"
-
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):
-
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
- Abra o arquivo
-
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.
-
-
Salvar e sair do editor:
- No
nano
, pressioneCtrl+O
para salvar eCtrl+X
para sair.
- No
-
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
- Para aplicar as mudanças, reinicie o serviço de rede ou reinicie o Raspberry Pi:
-
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
.
- Após reiniciar, verifique se o endereço IP estático foi configurado corretamente:
1.4 Verificar a Instalação
- 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
-
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)
-
Instalar o
btrfs-progs
:apt install btrfs-progs
-
Criar o sistema de arquivos:
mkfs.btrfs /dev/sda1
-
Adicionar ao fstab:
Edite o arquivo/etc/fstab
:/dev/sda1 /mnt/usb btrfs defaults 0 0
-
Montar o SSD:
mkdir /mnt/usb mount /mnt/usb
2.2 Configurar a Imagem do Sistema Operacional
-
Baixar a imagem do Raspbian:
Vá para Raspberry Pi OS 64-bit e copie o link para uma imagem sem GUI. -
Baixar e extrair a imagem:
cd /mnt/usb wget <link_copiado> -O os.img.xz unxz os.img.xz
-
Montar a imagem:
dev=$(losetup -Pf --show os.img) mkdir mnt mount ${dev}p2 mnt
-
Copiar o sistema de arquivos:
btrfs subvolume create slave rsync -av --info=progress2 mnt/ slave/
-
Desmontar a partição principal:
umount mnt
-
Montar a partição de firmware:
mount ${dev}p1
Passo 2: Configurar os Nós Escravos
2.1 Particionar o SSD
-
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)
-
Instalar o
btrfs-progs
:apt install btrfs-progs
-
Criar o sistema de arquivos:
mkfs.btrfs /dev/sda1
-
Adicionar ao fstab:
Edite o arquivo/etc/fstab
:/dev/sda1 /mnt/usb btrfs defaults 0 0
-
Montar o SSD:
mkdir /mnt/usb mount /mnt/usb
2.2 Configurar a Imagem do Sistema Operacional
-
Baixar a imagem do Raspbian:
Vá para Raspberry Pi OS 64-bit e copie o link para uma imagem sem GUI. -
Baixar e extrair a imagem:
cd /mnt/usb wget <link_copiado> -O os.img.xz unxz os.img.xz
-
Montar a imagem:
dev=$(losetup -Pf --show os.img) mkdir mnt mount ${dev}p2 mnt
-
Copiar o sistema de arquivos:
btrfs subvolume create slave rsync -av --info=progress2 mnt/ slave/
-
Desmontar o sistema principal:
umount mnt
-
Montar a partição de firmware:
mount ${dev}p1
-
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
-
Instalar o servidor NFS:
apt install nfs-kernel-server
-
Habilitar serviços necessários:
systemctl enable --now rpcbind systemctl enable --now nfs-server
-
Recarregar lista de exportação:
exportfs -r
-
Verificar as exportações:
showmount -e localhost
2.4 Servir os Arquivos de Boot via TFTP
-
Instalar o servidor TFTP e criar a árvore de diretórios:
apt install tftp-hpa mkdir -p tftpboot chown tftp:tftp tftpboot
-
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"
-
Reiniciar o servidor TFTP:
systemctl restart tftpd-hpa
-
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
-
Montar as pastas:
mount -a
-
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
-
Configurar o
fstab
dos escravos para montar/
via NFS:
Edite o arquivoslave/etc/fstab
:pi-master:/mnt/usb/slave / nfs vers=3 0 0
-
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
-
Vincular o arquivo
hosts
do mestre aos escravos:
Edite o arquivo/etc/fstab
:/etc/hosts /mnt/usb/slave/etc/hosts none bind 0 0
-
Remover o arquivo de hostname nos escravos:
rm slave/etc/hostname
2.5.1 Configurar SSH
-
Gerar uma chave SSH no nó mestre:
ssh-keygen -t rsa -b 4096 -C "pi@cluster"
-
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
-
Chroot no sistema:
for fs in dev proc sys; do mount -R {,slave}/$fs; done chroot slave /bin/bash . /etc/profile
-
Desativar serviços desnecessários:
systemctl disable resize2fs_once systemctl disable sshswitch systemctl disable userconfig apt remove dphys-swapfile
-
Habilitar o serviço SSH:
systemctl enable ssh
-
Sair do chroot:
PressioneCtrl+D
.
2.6 Configurar o Boot via Rede nos Escravos
- No escravo, bootar uma imagem genérica e configurar o boot via rede:
Navegue pararaspi-config
Advanced Options > Boot Order > Network Boot
e reinicie.
Neste ponto, o nó escravo deve conseguir bootar via rede.