본문 바로가기

Bigdata Hadoop

라즈베리파이 클러스터를 구축하는 방법

반응형

 

물리적 클러스터를 구축하는 이유는 무엇인가요?

 

주의: 라즈베리파이 OS는 Bookworm 으로 업데이트되었습니다.

 

오늘날에는 Amazon이나 Digital Ocean 또는 다른 클라우드 제공업체에 가서 몇 초 만에 가상 머신을 가동할 수 있습니다. 하지만 클라우드는 다른 사람의 컴퓨터일 뿐입니다. 라즈베리파이 클러스터는 모든 종류의 클러스터 컴퓨팅 관련 기술에 사용할 수 있는 저비용의 다목적 시스템이며, 클러스터를 구성하는 머신을 완전히 제어할 수 있습니다. 처음부터 무언가를 직접 만들어 보면 다른 곳에서는 배울 수 없는 교훈을 얻을 수 있습니다.

 

참고 문서는 이 링크를 따라가세요.

 

 

이제 라즈베리파이 OS 북웜용으로 업데이트되었습니다.

 

우리가 구축할 것 

 

클러스터 배선도

 

단일 관리형 스위치에 연결된 8개의 노드 클러스터를 구성하겠습니다. 노드 중 하나는 소위 "헤드" 노드로, 이 노드에는 USB3 이더넷 동글을 통해 LAN/WAN에 두 번째 기가비트 이더넷 연결과 USB3-to-SATA 커넥터를 통해 장착된 외부 1TB SSD가 있습니다. 헤드 노드는 평소처럼 SD 카드에서 부팅하지만, 나머지 7개 노드인 '컴퓨팅' 노드는 네트워크 부팅으로 구성되며, 헤드 노드는 부팅 서버 역할을 하고 OS 이미지는 외부 디스크에 저장됩니다. 1TB 디스크는 네트워크 부팅 볼륨 역할을 할 뿐만 아니라 클러스터의 모든 컴퓨팅 노드에 공유되는 스크래치 파티션도 호스팅 합니다. 8개의 라즈베리파이 보드에는 모두 라즈베리파이 PoE+ HAT가 부착됩니다. 즉, PoE+ 지원 스위치를 사용하기 때문에 각 노드에 이더넷 케이블 하나만 연결하면 되고 별도의 USB 허브를 통해 전원을 공급할 필요가 없습니다.

 

필요한 것

 

소모품

 

  • 라즈베리파이 4 8개
  • 라즈베리파이 PoE+ 모자 8개
  • 8포트 기가비트 PoE 지원 스위치
  • USB 3 - 기가비트 이더넷 어댑터
  • USB 3 - SATA 어댑터
  • SSD SATA 드라이브
  • 이더넷 케이블 8개
  • 16GB SD 카드
  • 클러스터 케이스

 

"브램블"이라고도 하는 라즈베리파이 클러스터를 구성하는 데 필요한 부품 목록은 구축하려는 클러스터의 크기와 유형에 따라 짧을 수도 있고 상당히 길어질 수도 있습니다. 따라서 클러스터를 구성할 부품을 주문하기 전에 클러스터의 용도에 대해 생각하는 것이 중요합니다. 위의 목록은 8-Pi 클러스터에 사용한 것이지만, 여러분의 요구 사항은 다를 수 있습니다.

 

필요한 것은 라즈베리파이 컴퓨터 전체이며, 저희처럼 PoE를 통해 전원을 공급하려는 경우 그에 상응하는 수의 라즈베리파이 PoE+ HAT 보드와 적절한 PoE+ 스위치가 필요합니다. 하지만 그 외에도 마이크로 SD 카드, 이더넷 케이블, USB- 이더넷 어댑터, USB-SATA 어댑터 케이블과 적절한 크기의 SSD 드라이브, 그리고 모든 구성품을 구입한 후 넣을 케이스가 필요합니다. 케이스는 클러스터를 구축한 후 클러스터로 무엇을 하려는지에 따라 맞춤형으로 디자인된 '클러스터 케이스'일 수도 있고 랙에 장착할 수 있는 것일 수도 있습니다.

 

그러나 클러스터를 정확히 어떤 용도로 설정할 것인지에 따라 구성 요소를 선택할 수 있는 여지가 많습니다. 예를 들어, 클러스터에서 실행할 작업의 종류에 따라 제가 사용한 4GB 모델 대신 저렴한 2GB 또는 1GB 보드를 사용할 수 있습니다. 또는 각 노드에 로컬 디스크가 있는 것이 중요할 수 있으므로 각 보드에 디스크를 연결하여 로컬 스토리지를 제공하는 것을 고려해야 할 수도 있습니다.

 

그러나 클러스터를 구축할 때 가장 중요한 선택은 노드에 전원을 공급하는 방법입니다. 저희는 이 클러스터에 PoE를 사용했는데, 각 노드에 PoE+ HAT 보드를 추가하고 라즈베리 파이 보드에 전원을 공급할 수 있는 더 비싼 스위치를 구입하는 것이었는데, 대규모 클러스터의 경우 이 방법이 가장 좋은 방법일 것입니다. 소규모 클러스터의 경우 USB 허브에서 노드에 전원을 공급하거나, 4개 이하의 가장 작은 클러스터의 경우 개별 전원 공급 장치에서 각 노드에 직접 전원을 공급하는 방법을 고려할 수 있습니다.

 

나만의 USB 팬 만들기

 

PoE를 사용하여 클러스터에 전원을 공급하기로 결정한 경우, 몇 가지 케이블을 만들어야 할 수도 있습니다. 예를 들어, 제가 사용하고 있는 케이스 뒷면의 팬은 Raspberry Pi의 GPIO 헤더 블록에 연결하기 위한 것이지만, Raspberry Pi PoE+ HAT를 사용하여 노드에 전원을 공급하기 때문에 GPIO 헤더에 액세스 할 수 없습니다. 

 

기부 USB 케이블과 냉각 팬 더미

 

 

따라서 적어도 저에게는 기증받은 USB 케이블을 가져와서 케이블을 만들어야 할 때입니다. USB 케이블의 끝을 잘라내고 비닐을 벗겨내면 4개의 전선이 있는데, 대부분 절연 금속 피복 안에 들어 있습니다. 케이블 내부의 전선은 작고 섬세하므로 덮개가 있는 경우 조심스럽게 벗겨내세요. 빨간색(+5V)과 검은색(GND) 전선을 찾아야 합니다. 나머지 두 개는 일반적으로 흰색과 녹색이며 데이터를 전달합니다. 이 데이터 전선은 필요 없으므로 그냥 잘라내면 됩니다. 

 

 

프랑켄 케이블 납땜

 

팬의 빨간색과 검은색 와이어를 USB 케이블의 빨간색과 검은색 와이어에 납땜합니다. 이때 가장 좋은 방법은 납땜 연결부 각각에 약간의 열수축 튜브를 사용한 다음 납땜된 두 커넥터 모두에 더 큰 열수축 튜브를 사용하는 것입니다. 이렇게 하면 팬과 새 케이블의 USB 플러그 끝이 전기적으로 절연되고 기계적으로 안전하게 연결됩니다. 

 

 

완성된 4개의 프랑켄 케이블

 

제가 사용하는 클러스터 케이스에는 4개의 팬이 후면에 장착되어 있습니다. 왼쪽 두 개는 헤드 노드에서, 또는 헤드 노드에 USB 소켓이 더 필요한 경우 왼쪽의 첫 번째 컴퓨팅 노드에서, 오른쪽 두 개는 가장 오른쪽에 있는 컴퓨팅 노드에서 전원을 공급할 계획입니다. 

 

4개의 후면 배기 팬이 클러스터 케이스에 장착되어 있습니다.

 

 

프랑켄 케이블이 필요한 가장 일반적인 경우는 아마도 GPIO 헤더에 액세스할 수 없기 때문에 USB를 통해 팬에 전원을 공급하는 경우일 것입니다. 하지만 이 케이블이 필요한 다른 이유도 있을 수 있습니다. 예를 들어, 몇 년 전에 구축한 클러스터의 경우 +5V 전원 공급 장치가 아닌 USB 허브에서 이더넷 스위치에 전원을 공급하기 위해 케이블을 연결해야 했습니다.

 

라즈베리파이 구성하기

 

시작하려면 시작하기 문서에 따라 라즈베리 파이를 설정하세요. 운영체제의 경우, 마우스와 키보드 없이 헤드리스(마우스와 키보드 없이) 실행할 수 있도록 Raspberry Pi OS(기타) > Raspberry Pi OS Lite를 선택합니다.

OS 사용자 지정 단계에서 다음과 같이 설정을 수정합니다:

 

  • 원하는 호스트 이름을 입력합니다(이 튜토리얼에서는 파이 클러스터를 권장합니다).
  • 사용자 이름(이 튜토리얼에서는 pi를 권장합니다)과 비밀번호를 입력합니다(나중에 인증할 때 필요합니다).
  • Pi가 Wi-Fi에 자동으로 연결될 수 있도록 무선 LAN 구성 옆의 확인란을 선택합니다.
  • 네트워크 SSID(이름)와 비밀번호를 입력합니다(Wi-Fi 설정이나 라우터의 스티커에서 찾을 수 있습니다).
  • 마우스와 키보드 없이도 Pi에 연결할 수 있도록 SSH 활성화 옆의 확인란을 선택합니다.

 

헤드 노드 구축하기 

 

 

SSD 디스크와 외부 이더넷 동글이 연결된 헤드 노드

 

정확한 연결 방법은 클러스터 구성 요소와 케이스를 선택했는지 여부 또는 어떤 종류의 케이스를 가지고 있는지에 따라 달라집니다. 저는 헤드 노드를 케이스의 맨 왼쪽에 끼우려고 합니다. 이렇게 하면 케이스의 한쪽 벽에 장착 나사를 사용하여 SSD 드라이브를 장착하여 제자리에 고정할 수 있습니다.

 

 

클러스터 프레임에 연결된 SSD 디스크를 보여주는 반대쪽에서 본 헤드 노드 보기

 

 

무선으로 연결

 

설정 중에 헤드 노드가 로컬 무선 네트워크를 인식하도록 구성했으므로 설정 중에 지정한 이름을 사용하여 헤드 노드에 직접 ssh로 연결할 수 있습니다: 

 

$ ssh <username>@pi-cluster.local

<username>@pi-cluster.local's password:
$

 

nmcli를 입력하여 네트워크 구성을 살펴보면 다음과 같습니다.  

 

$ nmcli
wlan0: connected to preconfigured
        "Broadcom BCM43438 combo and Bluetooth Low Energy"
        wifi (brcmfmac), DC:A6:32:6A:16:91, hw, mtu 1500
        inet4 10.3.194.40/22
        route4 10.3.192.0/22 metric 600
        route4 default via 10.3.194.1 metric 600
        inet6 2001:4d4e:300:c2:1fd1:9c44:f362:3805/64
        inet6 fe80::a725:b6cc:ce19:3caf/64
        route6 fe80::/64 metric 1024
        route6 2001:4d4e:300:c2::/64 metric 600
        route6 default via fe80::dccc:45ff:fe78:a3cc metric 600

lo: connected (externally) to lo
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
        inet4 127.0.0.1/8
        inet6 ::1/128

eth0: disconnected
        "eth0"
        1 connection available
        ethernet (bcmgenet), DC:A6:32:6A:16:90, hw, mtu 1500

DNS configuration:
        servers: 10.3.31.1
        domains: pitowers.org
        interface: eth1

        servers: fe80::8498:d3ff:fe31:8eac
        interface: eth1

        servers: 10.3.194.1
        domains: pitowers.org
        interface: wlan0

        servers: fe80::dccc:45ff:fe78:a3cc
        interface: wlan0

$

 

 

10.3.\* 주소로 wlan0이 로컬 네트워크에 연결되어 있고 스위치에 연결한 eth0은 연결이 끊어진 것을 볼 수 있습니다. 프로젝트 후반부에 헤드 노드를 각 컴퓨팅 노드와 스마트 스위치에 IP 주소를 할당하는 DHCP 서버로 전환하여 이 문제를 해결하겠습니다.

 

두 번째 이더넷 연결 추가

 

SD 카드를 설정할 때 무선 인터페이스를 wlan0으로 구성했기 때문에 네트워크를 통해 헤드 노드에 연결할 수 있었습니다. 그러나 대용량 파일을 주고받을 수 있고 유선 인터페이스가 훨씬 안정적이기 때문에 무선에 의존하기보다는 클러스터를 네트워크에 유선으로 연결하는 것이 좋습니다. 이렇게 하려면 이더넷 연결이 추가로 필요하므로 USB 3-기가비트 이더넷 어댑터를 헤드 노드에 추가하겠습니다. 온보드 이더넷 소켓(eth0)은 PoE 스위치에 연결하여 클러스터 내부 연결로 사용하고, 두 번째 이더넷 연결(eth1)은 외부와 통신하는 데 사용하겠습니다.

 

대부분의 경우 eth1은 네트워크 관리자에 의해 자동으로 활성화되며 LAN의 DHCP 서버에서 IP 주소를 할당받습니다. 어댑터를 연결하면 다음과 같은 화면이 표시됩니다, 

 

eth1: connected to Wired connection 2
        "Realtek RTL8153"
        ethernet (r8152), 00:E0:4C:68:1D:DA, hw, mtu 1500
        ip4 default, ip6 default
        inet4 10.3.31.194/24
        route4 10.3.31.0/24 metric 100
        route4 default via 10.3.31.1 metric 100
        inet6 2001:4d4e:300:1f:6f2a:f4b1:65a8:b420/64
        inet6 fe80::7a88:6d47:4554:bd80/64
        route6 fe80::/64 metric 1024
        route6 2001:4d4e:300:1f::/64 metric 100
        route6 default via fe80::8498:d3ff:fe31:8eac metric 100

 

 

명령줄에 nmcli를 입력한 결과에 추가됩니다. 온보드 이더넷 소켓인 eth0을 이더넷 스위치에 연결하여 클러스터에 대한 내부 연결 역할을 하도록 놔두겠습니다. 내부적으로 192.168.50.*/24 주소를 클러스터에 할당하고, 헤드 노드의 IP 주소는 192.168.50.1로 합니다. 

 

$ sudo nmcli con mod "Wired connection 1" ipv4.addresses 192.168.50.1/24 ipv4.method manual
$ sudo nmcli con down "Wired connection 1"
$ sudo nmcli con up "Wired connection 1"

 

그런 다음 모든 것이 계획대로 진행되었다면 다음과 같은 내용이 표시되어야 합니다: 

 

$ nmcli
eth1: connected to Wired connection 2
        "Realtek RTL8153"
        ethernet (r8152), 00:E0:4C:68:1D:DA, hw, mtu 1500
        ip4 default, ip6 default
        inet4 10.3.31.194/24
        route4 10.3.31.0/24 metric 100
        route4 default via 10.3.31.1 metric 100
        inet6 2001:4d4e:300:1f:6f2a:f4b1:65a8:b420/64
        inet6 fe80::7a88:6d47:4554:bd80/64
        route6 fe80::/64 metric 1024
        route6 2001:4d4e:300:1f::/64 metric 100
        route6 default via fe80::8498:d3ff:fe31:8eac metric 100

wlan0: connected to preconfigured
        "Broadcom BCM43438 combo and Bluetooth Low Energy"
        wifi (brcmfmac), DC:A6:32:6A:16:91, hw, mtu 1500
        inet4 10.3.194.40/22
        route4 10.3.192.0/22 metric 600
        route4 default via 10.3.194.1 metric 600
        inet6 2001:4d4e:300:c2:1fd1:9c44:f362:3805/64
        inet6 fe80::a725:b6cc:ce19:3caf/64
        route6 fe80::/64 metric 1024
        route6 2001:4d4e:300:c2::/64 metric 600
        route6 default via fe80::dccc:45ff:fe78:a3cc metric 600

eth0: connected to Wired connection 1
        "eth0"
        ethernet (bcmgenet), DC:A6:32:6A:16:90, hw, mtu 1500
        inet4 192.168.50.1/24
        route4 192.168.50.0/24 metric 101
        inet6 fe80::a5a8:6819:ddc6:6b2f/64
        route6 fe80::/64 metric 1024

lo: connected (externally) to lo
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
        inet4 127.0.0.1/8
        inet6 ::1/128

DNS configuration:
        servers: 10.3.31.1
        domains: pitowers.org
        interface: eth1

        servers: fe80::8498:d3ff:fe31:8eac
        interface: eth1

        servers: 10.3.194.1
        domains: pitowers.org
        interface: wlan0

        servers: fe80::dccc:45ff:fe78:a3cc
        interface: wlan0

$

 

 

DHCP 서버 구성하기

 

이제 eth1을 통해 "두 번째" 기가비트 이더넷이 외부로 연결되고 온보드 이더넷이 고정 IP 주소로 구성되었으므로, 이제 라즈베리파이를 eth0의 클러스터를 위한 DHCP 서버로 만들 차례입니다. 먼저 DHCP 서버 자체를 설치합니다:

 

$ sudo apt install isc-dhcp-server

 

를 실행한 다음 다음과 같이 /etc/dhcp/dhcpd.conf 파일을 편집합니다: 

 

ddns-update-style none;
authoritative;
log-facility local7;

# No service will be given on this subnet
subnet 10.3.31.0 netmask 255.255.255.0 {
}

# The internal cluster network
group {
   option broadcast-address 192.168.50.255;
   option routers 192.168.50.1;
   default-lease-time 600;
   max-lease-time 7200;
   option domain-name "cluster";
   option domain-name-servers 8.8.8.8, 8.8.4.4;
   subnet 192.168.50.0 netmask 255.255.255.0 {
      range 192.168.50.20 192.168.50.250;

      # Head Node
      host cluster {
         hardware ethernet dc:a6:32:6a:16:90;
         fixed-address 192.168.50.1;
      }

   }
}

 

그런 다음 새 서버 설정을 반영하도록 /etc/default/isc-dhcp-server 파일을 편집합니다: 

 

DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
DHCPDv4_PID=/var/run/dhcpd.pid
INTERFACESv4="eth0"

 

파일과 /etc/hosts 파일로 이동합니다: 

 

127.0.0.1	localhost
::1		localhost ip6-localhost ip6-loopback
ff02::1		ip6-allnodes
ff02::2		ip6-allrouters

127.0.1.1	cluster

192.168.50.1	cluster

 

 

를 설정한 다음 헤드 노드를 재부팅하여 DHCP 서비스를 시작할 수 있습니다.

 

알려지지 않은 호스트에는 192.168.50.20부터 시작하는 IP 주소가 할당되도록 설정했습니다. 컴퓨팅 노드의 MAC 주소를 알고 나면 /etc/dhcp/dhcpd.conf 파일에 추가하여 앞으로는 무작위로 주소를 받는 대신 고정 IP 주소를 받도록 할 수 있습니다. 클러스터에 관리형 스위치가 있는 경우 재부팅 후 헤드 노드에 다시 로그인하면 자체적으로 IP 주소를 가져오는 NETGEAR 스위치와 같이 DHCP 서비스가 작동하는지 확인할 수 있습니다: 

 

$ dhcp-lease-list
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC                IP              hostname       valid until         manufacturer
==================================================================================
80:cc:9c:94:53:35  192.168.50.20   GS308EPP       2021-12-06 14:19:52 NETGEAR
$

 

그렇지 않으면 관리되지 않는 스위치는 자체 주소를 요청하지 않으므로 첫 번째 노드를 추가할 때까지 기다려야 합니다. 그러나 관리형 스위치가 있는 경우에는 헤드 노드와 비슷한 방식으로 /etc/dhcp/dhcpd.conf 및 /etc/hosts 파일에 주소를 추가하여 클러스터 내에서 고정 IP 주소를 부여할 수 있습니다. 저는 호스트 이름으로 switch를 사용했습니다:

 

192.168.50.1	cluster
192.168.50.254	switch

 

 

및 192.168.50.254를 할당된 IP 주소로 사용합니다: 

 

subnet 192.168.50.0 netmask 255.255.255.0 {
   range 192.168.50.20 192.168.50.250;

   # Head Node
   host cluster {
      hardware ethernet dc:a6:32:6a:16:90;
      fixed-address 192.168.50.1;
   }

   # NETGEAR Switch
   host switch {
      hardware ethernet 80:cc:9c:94:53:35;
      fixed-address 192.168.50.254;
   }
}

 

 

외장 디스크 추가

 

컴퓨팅 노드를 네트워크 부팅하려면 조금 더 많은 공간이 필요합니다. 플래시 스틱을 헤드 노드의 USB 포트 중 하나에 연결하여 이 작업을 수행할 수 있지만, 클러스터에 충분한 데이터 공간을 제공하기 위해 USB 3-SATA 어댑터 케이블을 사용하여 실험실의 선반에 있던 1TB SSD를 연결하겠습니다. 디스크를 헤드 노드의 USB 3 소켓 중 하나에 꽂고 GUID 파티션 테이블로 포맷하고 디스크에 단일 ext4 파티션을 생성합니다. 

 

 

$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted --a optimal /dev/sda mkpart primary ext4 0% 100%
$ sudo mkfs -t ext4 /dev/sda1
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 244175218 4k blocks and 61046784 inodes
Filesystem UUID: 1a312035-ffdb-4c2b-9149-c975461de8f2
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
	102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
$

 

그런 다음 디스크를 수동으로 마운트 하여 모든 것이 정상인지 확인할 수 있습니다: 

 

$ sudo mkdir /mnt/usb
$ sudo mount /dev/sda1 /mnt/usb
$ sudo systemctl daemon-reload

 

를 실행한 다음 /etc/fstab 파일에 다음을 추가하여 부팅 시 자동으로 마운트 되도록 합니다: 

 

/dev/sda1 /mnt/usb auto defaults,user 0 1

 

재부팅하기 전에 디스크를 수동으로 마운트할 수 있는지 확인해야 합니다. 디스크를 /etc/fstab 파일에 항목으로 추가하면 디스크를 사용할 수 없는 경우 부팅 중에 Raspberry Pi가 중단될 수 있기 때문입니다.

 

클러스터에서 디스크를 사용할 수 있게 만들기

 

클러스터 전체에서 디스크를 사용할 수 있게 만들고 싶을 것입니다. NFS 서버 소프트웨어를 설치해야 합니다: 

 

$ sudo apt install nfs-kernel-server

 

 

공유할 수 있는 마운트 지점을 만듭니다: 

 

$ sudo mkdir /mnt/usb/scratch
$ sudo chown pi:pi /mnt/usb/scratch
$ sudo ln -s /mnt/usb/scratch /scratch

 

그런 다음 /etc/exports 파일을 편집하여 디스크를 마운트 할 수 있는 IP 주소 목록을 추가합니다: 

 

/mnt/usb/scratch 192.168.50.0/24(rw,sync)

 

여기서는 "192.168.50.0에서 `192.168.50.254` 사이의 모든 IP 주소"를 줄여서 192.168.50.0/24로 내보내고 있습니다. 이렇게 한 후 rpcbind와 nfs-server 서비스를 모두 활성화한 다음 시작해야 합니다: 

 

$ sudo systemctl enable rpcbind.service
$ sudo systemctl start rpcbind.service
$ sudo systemctl enable nfs-server.service
$ sudo systemctl start nfs-server.service

 

 

마지막으로 재부팅합니다: 

 

$ sudo reboot

 

 

첫 번째 노드 추가하기

 

헤드 노드에서 네트워크 부팅하도록 컴퓨팅 노드를 설정하겠습니다. 그러기 위해서는 먼저 네트워크 부팅을 위해 노드를 구성해야 합니다. 이 작업은 라즈베리파이 모델에 따라 다릅니다. 그러나 Raspberry Pi 4의 경우 보드는 SD 카드에서 한번만 부팅해야 하며 부팅 순서는 raspi-config 명령줄 도구를 사용하여 구성해야 합니다.

 

네트워크 부팅 활성화

 

가장 쉬운 방법은 Raspberry Pi Imager 소프트웨어를 사용하여 Raspberry Pi OS Lite(64비트)로 두 번째 SD 카드를 굽는 것입니다. 헤드 노드에서 했던 것처럼 보드를 부팅하기 전에 SSH를 활성화하는 것 외에는 특별히 이 설치를 구성할 필요가 없습니다.

 

Note: 무선 LAN을 구성하거나 활성화하지 않아야 합니다.

 

그런 다음 클러스터 스위치에 연결된 보드를 부팅합니다: 

 

 

원래 헤드 노드 옆에 PoE+를 사용하여 두 번째 라즈베리 파이 4에 전원을 공급합니다.

 

보드가 헤드 노드의 DHCP 서버로부터 IP 주소를 할당받은 후 클러스터 서브넷에 표시되어야 하며, dhcp-lease-list를 사용하여 헤드 노드에서 클러스터 네트워크를 확인할 수 있습니다: 

 

$ dhcp-lease-list
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC                IP              hostname       valid until         manufacturer
===============================================================================================
dc:a6:32:6a:16:87  192.168.50.21   raspberrypi    2021-12-07 11:54:29 Raspberry Pi Ltd
$

 

이제 새 보드에 SSH로 접속하여 명령줄에서 raspi-config를 사용하여 네트워크 부팅을 활성화할 수 있습니다: 

 

$ ssh pi@192.168.50.21
$ sudo raspi-config

 

고급 옵션 > 부팅 순서 > 네트워크 부팅을 선택합니다. 그런 다음 장치를 재부팅해야 부트 로더 EEPROM에 변경된 부팅 순서를 프로그래밍할 수 있습니다. 네트워크 부팅을 활성화하려고 할 때 "EEPROM bin 파일을 찾을 수 없습니다"라는 오류가 발생하면 계속 진행하기 전에 라즈베리파이의 펌웨어를 업데이트해야 합니다. 다음 명령을 실행하세요: 

 

$ sudo apt install rpi-eeprom
$ sudo rpi-eeprom-update -d -a
$ sudo reboot

 

그런 다음 노드가 재부팅에서 다시 시작되면 네트워크 부팅을 다시 한 번 설정해 보세요. 라즈베리파이가 재부팅되면 vcgencmd를 사용하여 부팅 순서를 확인합니다: 

 

$ vcgencmd bootloader_config
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0


[all]
BOOT_ORDER=0xf21
$

 

이제 BOOT_ORDER가 0xf21로 표시되어 라즈베리파이가 SD 카드에서 먼저 부팅을 시도한 후 네트워크를 통해 부팅을 시도한다는 것을 알 수 있을 것입니다. 더 진행하기 전에 라즈베리파이의 이더넷 MAC 주소와 일련번호를 모두 기록해 두어야 합니다. 

 

$ ethtool -P eth0
Permanent address: dc:a6:32:6a:16:87
$ grep Serial /proc/cpuinfo | cut -d ' ' -f 2 | cut -c 9-16
6a5ef8b0
$

 

그 후에는 적어도 지금은 보드를 종료하고 SD 카드를 제거할 수 있습니다.

 

헤드 노드를 부팅 서버로 설정

 

이제 부팅 서버로 작동하도록 헤드 노드를 구성해야 합니다. 여기에는 몇 가지 옵션이 있지만, 여기서는 독립형 TFTP 서버와 함께 기존 DHCP 서버를 사용하겠습니다. 서버에 대한 마운트 지점을 생성하고 설치해야 합니다: 

 

$ sudo apt install tftpd-hpa
$ sudo apt install kpartx
$ sudo mkdir /mnt/usb/tftpboot
$ sudo chown tftp:tftp /mnt/usb/tftpboot

 

etc/default/tftpd-hpa 파일을 편집합니다: 

 

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/mnt/usb/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"

 

그런 다음 서비스를 다시 시작합니다: 

 

$ sudo systemctl restart tftpd-hpa

 

그런 다음 부팅 이미지를 설정해야 하며 클라이언트당 하나의 이미지를 만들어야 합니다. 첫 번째 단계는 웹에서 최신 이미지를 가져와 마운트 하여 몇 가지 변경 사항을 적용한 다음 이미지 내부의 파티션을 마운트 하여 콘텐츠를 외부 디스크에 복사하는 것입니다: 

 

$ sudo su
# mkdir /tmp/image
# cd /tmp/image
# wget -O raspios_lite_latest.img.xz https://downloads.raspberrypi.com/raspios_lite_arm64_latest
# xz -d raspios_lite_latest.img.xz
# kpartx -a -v *.img
# mkdir bootmnt
# mkdir rootmnt
# mount /dev/mapper/loop0p1 bootmnt/
# mount /dev/mapper/loop0p2 rootmnt/
# mkdir -p /mnt/usb/rpi1
# mkdir -p /mnt/usb/tftpboot/6a5ef8b0
# cp -a rootmnt/* /mnt/usb/rpi1
# cp -a bootmnt/* /mnt/usb/rpi1/boot/firmware

 

여기서 "6a5ef8b0"은 앞서 검색한 첫 번째 노드의 일련번호입니다.

그 후 루트 파일 시스템을 사용자 지정할 수 있습니다: 

# touch /mnt/usb/rpi1/boot/firmware/ssh
# echo pi:$(echo 'raspberry' | openssl passwd -6 -stdin) > /mnt/usb/rpi1/boot/firmware/userconf.txt
# sed -i /UUID/d /mnt/usb/rpi1/etc/fstab
# echo "192.168.50.1:/mnt/usb/tftpboot/6a5ef8b0 /boot/firmware nfs defaults,vers=3 0 0" >> /mnt/usb/rpi1/etc/fstab
# echo "console=serial0,115200 console=tty root=/dev/nfs nfsroot=192.168.50.1:/mnt/usb/rpi1,vers=3 rw ip=dhcp rootwait" > /mnt/usb/rpi1/boot/firmware/cmdline.txt

 

 

다음 헤드 노드의 /etc/exports 파일에 추가합니다: 

 

# echo "/mnt/usb/rpi1 192.168.50.0/24(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports

 

그리고 스스로 뒷정리를 하세요: 

 

# systemctl restart rpcbind
# systemctl restart nfs-server
# umount bootmnt/
# umount rootmnt/
# cd /tmp; rm -rf image
# exit
$

 

마지막으로 다음과 같이 /etc/dhcp/dhcpd.conf 파일을 편집해야 합니다: 

 

ddns-update-style none;
authoritative;
log-facility local7;
option option-43 code 43 = text;
option option-66 code 66 = text;

# No service will be given on this subnet
subnet 10.3.31.0 netmask 255.255.255.0 {
}

# The internal cluster network
group {
   option broadcast-address 192.168.50.255;
   option routers 192.168.50.1;
   default-lease-time 600;
   max-lease-time 7200;
   option domain-name "cluster";
   option domain-name-servers 8.8.8.8, 8.8.4.4;
   subnet 192.168.50.0 netmask 255.255.255.0 {
      range 192.168.50.20 192.168.50.250;

      # Head Node
      host cluster {
         hardware ethernet dc:a6:32:6a:16:90;
         fixed-address 192.168.50.1;
      }

      # NETGEAR Switch
      host switch {
         hardware ethernet 80:cc:9c:94:53:35;
         fixed-address 192.168.50.254;
      }

      host rpi1 {
         option root-path "/mnt/usb/tftpboot/";
         hardware ethernet dc:a6:32:6a:16:87;
         option option-43 "Raspberry Pi Boot";
         option option-66 "192.168.50.1";
         next-server 192.168.50.1;
         fixed-address 192.168.50.11;
         option host-name "rpi1";
      }

   }
}

 

 

를 클릭하고 라즈베리 파이를 재부팅합니다: 

 

$ sudo reboot

 

 

노드 네트워크 부팅

 

컴퓨팅 노드에서 SD 카드를 제거했는지 확인하고 Raspberry Pi를 스위치에 다시 연결합니다. 여분의 모니터가 있다면 HDMI 포트에 연결하여 노드가 부팅되는 동안 진단 화면을 볼 수 있도록 하는 것이 좋습니다.

 

처음으로 첫 번째 컴퓨팅 노드를 네트워크 부팅합니다. 디버깅을 위해 디스플레이에 연결되어 있습니다.

 

모든 것이 계획대로 진행되면 보드가 아무 문제 없이 부팅되어야 합니다. 몇 가지 정리해야 할 사항이 있지만 이제 컴퓨팅 노드에 직접 SSH로 로그인할 수 있을 것입니다.

 

$ ssh pi@192.168.50.11

pi@192.168.50.11's password:
$

 

모니터에서 부팅 메시지를 보거나 로그를 확인해 보면 이미지가 완전히 깨끗하게 나타나지 않은 것을 볼 수 있을 것입니다. 컴퓨트 노드에 다시 로그인하면 Raspberry Pi가 처음 부팅할 때 파일 시스템 크기를 조정하려고 시도하는 기능을 끄고 스왑 데몬을 제거하여 앞으로는 이런 일이 발생하지 않도록 할 수 있습니다.

 

$ sudo systemctl disable resize2fs_once.service
$ sudo systemctl disable sshswitch.service
$ sudo apt remove dphys-swapfile

 

다음으로, raspi-config 명령줄 도구를 사용하여 호스트 이름을 기본 raspberrypi에서 rpi1로 변경해야 합니다:

 

$ sudo raspi-config

 

시스템 옵션 > 호스트 이름을 선택하여 컴퓨팅 노드의 호스트 이름을 변경하고 "예"를 선택하여 재부팅합니다.

 

마지막으로, 매번 컴퓨팅 및 헤드 노드의 IP 주소를 사용할 필요가 없도록 현재 및 향후 컴퓨팅 노드를 헤드 및 컴퓨팅 노드의 /etc/hosts 파일에 추가하여 작업을 조금 더 쉽게 만들 수 있습니다: 

 

127.0.0.1	localhost
::1		localhost ip6-localhost ip6-loopback
ff02::1		ip6-allnodes
ff02::2		ip6-allrouters

127.0.1.1	cluster

192.168.50.1	cluster
192.168.50.254	switch

192.168.50.11	rpi1
192.168.50.12	rpi2
192.168.50.13	rpi3
192.168.50.14	rpi4
192.168.50.15	rpi5
192.168.50.16	rpi6
192.168.50.17	rpi7

 

스크래치 디스크 마운트

 

일반적으로 네트워크 디스크를 마운트 할 때는 /etc/fstab 파일에 직접 항목으로 추가하는 대신 자동 복구를 사용합니다. 하지만 여기서는 전체 루트 파일 시스템이 네트워크를 통해 마운트 되므로 불필요한 작업처럼 보입니다. 재부팅 후 컴퓨팅 노드에 다시 로그인하여 마운트 지점을 추가합니다:

 

$ sudo mkdir /scratch
$ sudo chown pi:pi scratch

 

/etc/fstab 파일을 편집하여 스크래치 디스크를 추가합니다:

 

192.168.50.1:/mnt/usb/scratch /scratch nfs defaults 0 0

 

그런 다음 컴퓨트 노드를 재부팅합니다:

 

$ sudo reboot

 

 

비밀번호 없는 보안 셸 클러스터

 

헤드 노드와 컴퓨트 노드 간에 보안 셸을 사용하고 매번 비밀번호를 입력해야 하는 것은 꽤 번거로울 수 있습니다. 따라서 공개/개인 키 쌍을 생성하여 비밀번호 없이 보안 셸을 사용하도록 설정해 보겠습니다. 컴퓨팅 노드에서 /etc/ssh/sshd_config 파일을 편집하여 공개 키 로그인을 사용하도록 설정해야 합니다: 

 

PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no

 

다음 sshd 서버를 다시 시작합니다: 

 

$ sudo systemctl restart ssh

 

그런 다음 헤드 노드로 돌아가서 공개/개인 키 쌍을 생성하고 공개 키를 컴퓨트 노드에 배포해야 합니다. 요청 시 빈 암호를 입력하세요. 

 

$ ssh-keygen -t rsa -b 4096 -C "pi@cluster"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa
Your public key has been saved in /home/pi/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XdaHog/sAf1QbFiZj7sS9kkFhCJU9tLN0yt8OvZ52gA pi@cluster
The key's randomart image is:
+---
[RSA 4096]----+
|     ...o  *+o   |
|      ...+o+*o . |
|       .o.=.B++ .|
|         = B.ooo |
|        S * Eoo  |
|         .o+o=   |
|         ..+=o.  |
|          ..+o +.|
|           .  +o.|
+----
[SHA256]-----+
$ ssh-copy-id -i /home/pi/.ssh/id_rsa.pub pi@rpi1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/pi/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
pi@rpi1's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'pi@rpi1'"
and check to make sure that only the key(s) you wanted were added.
$

 

그 후에는 비밀번호를 입력하지 않고도 컴퓨팅 노드에 로그인할 수 있습니다.

 

외부 세계로의 액세스

 

현재 컴퓨팅 노드에 없는 한 가지는 LAN에 대한 액세스입니다. 지금은 컴퓨팅 노드가 헤드 노드만 볼 수 있고 나중에 다른 컴퓨팅 노드를 추가하면 나머지 노드도 볼 수 있습니다. 하지만 이 문제는 해결할 수 있습니다! 헤드 노드에서 다음 줄의 주석 처리를 해제하여 /etc/sysctl.conf 파일을 편집합니다: 

net.ipv4.ip_forward=1

 

 

포워딩을 활성화한 후에는 iptables를 구성해야 합니다: 

 

$ sudo apt install iptables
$ sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

 

다음 /etc/rc.local 파일에 종료 0 줄 바로 위에 부팅 시 테이블을 로드하는 줄을 추가합니다: 

 

_IP=$(hostname -I) || true
if
[ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

iptables-restore < /etc/iptables.ipv4.nat

exit 0

 

재부팅합니다

 

$ sudo reboot

 

주의: 컴퓨트 노드가 아직 실행 중인 경우 해당 노드의 루트 파일시스템이 헤드 노드에 연결된 디스크에 있으므로 먼저 해당 노드에 로그온 한 후 종료해야 합니다. 

 

다음 컴퓨팅 노드 추가

 

나머지 컴퓨팅 노드를 추가하는 것은 첫 번째 노드를 추가하는 것보다 훨씬 더 간단합니다. 이제 사용자 정의 이미지를 사용할 수 있고 첫 번째 컴퓨팅 노드에서 했던 무거운 작업을 피할 수 있기 때문입니다. 다시 SD 카드를 가져와 클러스터 스위치에 연결된 다음 라즈베리 파이를 부팅합니다. 

 

두 번째 컴퓨팅 노드를 부팅합니다.

 

보드가 헤드 노드의 DHCP 서버로부터 IP 주소를 할당받은 후 클러스터 서브넷에 표시되어야 하며, dhcp-lease-list를 사용하여 헤드 노드에서 클러스터 네트워크를 확인할 수 있습니다. 

 

$ dhcp-lease-list
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC                IP              hostname       valid until         manufacturer
===============================================================================================
dc:a6:32:6a:15:e2  192.168.50.21   raspberrypi    2021-12-08 21:15:00 Raspberry Pi Ltd
$

 

 

이제 새 보드에 SSH로 접속하여 명령줄에서 raspi-config를 사용하여 이 보드의 네트워크 부팅을 다시 활성화할 수 있습니다: 

 

$ rm /home/pi/.ssh/known_hosts
$ ssh <username>@129.168.50.21
$ sudo raspi-config

 

고급 옵션 > 부팅 순서 > 네트워크 부팅을 선택합니다. 그런 다음 장치를 재부팅하여 부트 순서 변경을 부트 로더 EEPROM에 프로그래밍해야 합니다. 라즈베리파이가 재부팅되면 vcgencmd를 사용하여 부팅 순서를 확인합니다: 

 

$ vcgencmd bootloader_config
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0


[all]
BOOT_ORDER=0xf21
$

 

이제 BOOT_ORDER가 0xf21로 표시되어 라즈베리파이가 SD 카드에서 먼저 부팅을 시도한 후 네트워크를 통해 부팅을 시도할 것임을 나타냅니다. 더 진행하기 전에 라즈베리파이의 이더넷 MAC 주소와 일련번호를 모두 기록해 두어야 합니다. 

 

$ ethtool -P eth0
Permanent address: dc:a6:32:6a:15:e2
$ grep Serial /proc/cpuinfo | cut -d ' ' -f 2 | cut -c 9-16
54e91338
$

 

 

그런 다음 보드를 종료하고 SD 카드를 제거하면 됩니다. 헤드 노드로 돌아가면 이미 구성된 이미지를 다음 컴퓨팅 노드의 운영 체제 기반으로 사용할 수 있습니다. 

 

$ sudo su
$ mkdir -p /mnt/usb/rpi2
$ cp -a /mnt/usb/rpi1/* /mnt/usb/rpi2
$ mkdir -p /mnt/usb/tftpboot/54e91338
$ echo "/mnt/usb/rpi2/boot/firmware /mnt/usb/tftpboot/54e91338 none defaults,bind 0 0" >> /etc/fstab
$ echo "/mnt/usb/rpi2 192.168.50.0/24(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports
$ exit
$

 

 

그런 다음 /mnt/usb/rpi2/boot/firmware/cmdline.txt를 편집하여 rpi1을 rpi2로 바꿔야 합니다: 

 

console=serial0,115200 console=tty root=/dev/nfs nfsroot=192.168.50.1:/mnt/usb/rpi2,vers=3 rw ip=dhcp rootwait

 

 

그리고 /mnt/usb/rpi2/etc/hostname도 마찬가지입니다: 

 

rpi2

 

마지막으로 헤드 노드에서 /etc/dhcp/dhcpd.conf 파일을 편집합니다: 

 

host rpi2 {
   option root-path "/mnt/usb/tftpboot/";
   hardware ethernet dc:a6:32:6a:15:e2;
   option option-43 "Raspberry Pi Boot";
   option option-66 "192.168.50.1";
   next-server 192.168.50.1;
   fixed-address 192.168.50.12;
   option host-name "rpi2";
}

 

헤드 노드를 재부팅합니다: 

 

$ sudo reboot

 

그 후, rpi1과 rpi2가 모두 실행되고 있는 것을 볼 수 있습니다. 관심이 있으시다면 헤드 노드에 nmap을 설치하여 클러스터 네트워크를 더 자세히 살펴볼 수 있습니다: 

 

$ sudo apt install nmap
$ nmap 192.168.50.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2021-12-09 11:40 GMT
Nmap scan report for cluster (192.168.50.1)
Host is up (0.0018s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
2049/tcp open  nfs

Nmap scan report for rpi1 (192.168.50.11)
Host is up (0.0017s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap scan report for rpi2 (192.168.50.12)
Host is up (0.00047s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap scan report for switch (192.168.50.254)
Host is up (0.014s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 256 IP addresses (4 hosts up) scanned in 6.91 seconds
$

 

 

나머지 노드 추가 

 

 

마지막 브램블

 

나머지 5개의 컴퓨팅 노드를 추가하는 것은 이제 어느 정도 기계적인 과정입니다. rpi3, rpi4, rpi5, rpi6 및 rpi7에 대해 rpi2에 대해 수행한 프로세스를 따라야 합니다. 새 컴퓨팅 노드 각각에 적절한 MAC 주소, 일련번호 및 호스트 이름을 대체합니다: 

 

HostnameMAC AddressSerial Number

rpi1 dc:a6:32:6a:16:87 6a5ef8b0
rpi2 dc:a6:32:6a:15:e2 54e91338
rpi3 dc:a6:32:6a:15:16 6124b5e4
rpi4 dc:a6:32:6a:15:55 52cddb85
rpi5 dc:a6:32:6a:16:1b a0f55410
rpi6 dc:a6:32:6a:15:bb c5fb02d3
rpi7 dc:a6:32:6a:15:4f f57fbb98

 

마지막 컴퓨팅 노드를 가져올 때 나머지 두 개의 프랑켄 케이블을 마지막 노드에 연결하여 제 케이스의 가장 오른쪽 팬에 전원을 공급했습니다.

 

라즈베리 파이 클러스터 제어

 

이제 모든 노드가 실행 중이므로 몇 가지 클러스터 제어 도구가 필요합니다. 제가 가장 좋아하는 도구 중 하나는 parallel-ssh 툴킷입니다. 명령줄에서 헤드 노드에 설치할 수 있습니다: 

 

$ apt install pssh

 

그리고 자체 클러스터 자동화를 구축할 수 있는 뛰어난 ParallelSSH Python 라이브러리와 함께 여러 명령줄 도구(parallel-ssh, parallel-scp, parallel-rsync, parallel-slurp, parallel-nuke)가 설치됩니다. 이러한 도구를 사용하면 헤드 노드와 컴퓨트 노드 간에 작업을 실행 및 제어하고 파일을 이동 및 복사할 수 있습니다. 명령줄 도구를 사용하려면 모든 컴퓨팅 노드를 나열하는 호스트 파일을 만들어야 하는데, 저는 홈 디렉터리에 .pssh_hosts라는 이름으로 저장했습니다: 

 

$ cat .pssh_hosts
rpi1
rpi2
rpi3
rpi4
rpi5
rpi6
rpi7
$

 

파일을 생성한 후에는 명령줄 도구를 사용하여 무엇보다도 7개의 컴퓨팅 노드 모두에서 명령을 실행할 수 있습니다. 

 

$ parallel-ssh -i -h .pssh_hosts free -h
[1] 12:10:15 [SUCCESS] rpi4
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        56Mi       3.7Gi       8.0Mi        64Mi       3.7Gi
Swap:            0B          0B          0B
[2] 12:10:15 [SUCCESS] rpi1
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        55Mi       3.7Gi       8.0Mi        64Mi       3.7Gi
Swap:            0B          0B          0B
[3] 12:10:15 [SUCCESS] rpi2
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        55Mi       3.7Gi       8.0Mi        64Mi       3.7Gi
Swap:            0B          0B          0B
[4] 12:10:15 [SUCCESS] rpi7
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        56Mi       3.7Gi       8.0Mi        97Mi       3.6Gi
Swap:            0B          0B          0B
[5] 12:10:15 [SUCCESS] rpi3
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        55Mi       3.7Gi        16Mi       104Mi       3.6Gi
Swap:            0B          0B          0B
[6] 12:10:15 [SUCCESS] rpi5
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        55Mi       3.7Gi        16Mi        72Mi       3.6Gi
Swap:            0B          0B          0B
[7] 12:10:15 [SUCCESS] rpi6
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        55Mi       3.7Gi       8.0Mi        64Mi       3.7Gi
Swap:            0B          0B          0B
$

 

각 컴퓨팅 노드에서 명령이 얼마나 빨리 실행되었는지에 따라 결과가 임의의 순서로 돌아온다는 점에 유의하세요.

 

원격 종료 서비스 추가하기

 

parallel-ssh는 클러스터 전체에서 소프트웨어를 배포하고 다른 작업을 수행할 수 있는 훌륭한 도구이지만, 때로는 하나의 명령으로 클러스터를 깔끔하게 종료하고 싶을 때가 있습니다. 가장 간단한 방법은 셸 스크립트를 작성하여 각 컴퓨팅 노드에 로그인하고 종료한 다음 헤드 노드 자체를 종료하는 것입니다. 또는 명령을 적절히 편집하여 rshutdown 서비스와 같은 것을 배포할 수도 있습니다.

 

라즈베리파이 클러스터를 더 발전시키세요

 

지금까지 구축한 클러스터는 매우 유연하며, 이제 클러스터로 정확히 무엇을 하려는지에 따라 소프트웨어를 설치할 수 있는 확고한 기반을 갖추게 되었습니다. 예를 들어 모델링을 위한 컴퓨팅 클러스터를 구축하는 경우, 클러스터 전체에서 병렬 처리를 수행하기 위해 MPI와 OpenMP를 설치하려고 할 것입니다. 또는 Kubernetes를 호스팅 하기 위해 클러스터를 구축하려고 할 수도 있습니다. 

 

 

하~ 진짜 길다. 아주 잘 따라왔다. 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^