라즈베리파이 4 클러스터란 여러 대의 라즈베리파이를 서로 연결하여 하나의 큰 시스템처럼 작동시키는 것을 의미합니다. 일반적으로, 한 대의 라즈베리파이는 한정된 연산 능력과 메모리를 가지지만, 여러 대를 클러스터로 구성하면 이러한 제약을 어느 정도 극복할 수 있습니다.
클러스터를 구성하는 이유는 다양하며, 대규모 데이터 처리, 분산 컴퓨팅, 병렬 연산, 서버 로드 밸런싱 등 다양한 용도로 사용될 수 있습니다. 또한, 클러스터 환경에서는 고가용성과 확장성을 확보할 수 있어, 실제 기업 환경과 유사한 시스템을 구축하고 학습할 수 있습니다.
1. 준비물
- 라즈베리파이 4 (2개 이상, 권장 4개)
- 마이크로 SD 카드 (최소 16GB 권장, 라즈베리파이 당 하나씩)
- 전원 어댑터 (라즈베리파이 당 하나씩)
- 네트워크 케이블 (라즈베리파이 당 하나씩)
- 스위치 허브 (최소 4포트 이상)
- 클러스터 케이스 (선택사항이지만 권장)
2. 라즈베리파이 초기 설정
2-1. 라즈비안 설치
- 라즈베리파이 이미져를 공식 웹사이트에서 다운로드합니다.
- 프로그램을 실행한 후, 운영 체제로 라즈비안을 선택합니다.
- 마이크로 SD 카드를 컴퓨터에 연결한 후, 타겟 드라이브로 선택합니다.
- ‘Write’를 클릭하여 설치를 진행합니다.
- 이 과정을 모든 라즈베리파이에 대해 반복합니다.
2-2. 고정 IP 설정
각 라즈베리파이에 고정 IP를 설정하여 네트워크 관리를 용이하게 합니다.
# 현재 네트워크 설정 확인
ifconfig
# 고정 IP 설정 파일 열기
sudo nano /etc/dhcpcd.conf
# 파일 끝에 다음 내용 추가 (예시)
interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8
# 설정 저장 후 재부팅
sudo reboot
각 라즈베리파이마다 다른 IP 주소를 할당해야 합니다. 예를 들어, 192.168.1.101, 192.168.1.102 등으로 설정합니다.
3. 클러스터 구성
3-1. 마스터 노드 설정
- 첫 번째 라즈베리파이를 마스터 노드로 설정합니다.
- 마스터 노드에 SSH로 접속합니다.
# SSH 접속
ssh pi@192.168.1.100
# 호스트 이름 변경 (선택사항)
sudo hostnamectl set-hostname master-node
# 시스템 업데이트
sudo apt-get update && sudo apt-get upgrade -y
# Docker 설치
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Kubernetes 설치 준비
sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall && sudo update-rc.d dphys-swapfile remove
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubeadm kubectl kubelet
3-2. 워커 노드 설정
나머지 라즈베리파이를 워커 노드로 설정합니다. 마스터 노드 설정과 유사하지만, 호스트 이름을 다르게 설정합니다.
# SSH 접속 (IP 주소는 각 노드에 맞게 변경)
ssh pi@192.168.1.101
# 호스트 이름 변경 (선택사항)
sudo hostnamectl set-hostname worker-node-1
# 이후 과정은 마스터 노드와 동일하게 진행
4. 클러스터 초기화
# 마스터 노드에서 실행
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 초기화 완료 후 표시되는 join 명령어를 복사해둡니다.
# 사용자 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# Flannel 네트워크 플러그인 설치
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
5. 워커 노드 추가
각 워커 노드에서 마스터 노드 초기화 시 얻은 join 명령어를 실행합니다.
# 워커 노드에서 실행 (예시)
sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:1234...
6. 클러스터 상태 확인
# 마스터 노드에서 실행
kubectl get nodes # 노드 상태 확인
kubectl get pods --all-namespaces # 모든 네임스페이스의 파드 확인
7. 클러스터 활용
이제 라즈베리파이 클러스터가 구성되었습니다. 이 클러스터를 활용하여 다음과 같은 프로젝트를 진행할 수 있습니다:
- 웹 애플리케이션 배포 및 스케일링
- 분산 데이터 처리 (예: Hadoop, Spark)
- 머신러닝 모델 학습
- IoT 데이터 수집 및 분석
- 고가용성 서비스 구축
클러스터 환경에서의 애플리케이션 개발과 배포를 통해 실제 기업 환경과 유사한 경험을 쌓을 수 있습니다. 지속적으로 학습하고 실험하면서 분산 시스템에 대한 이해를 높이세요!