해당 시리즈는 라즈베리파이 3개를 연결하고 하둡(Hadoop)과 스파크(spark)를 사용하여 빅데이터를 다루는 과정을 보여줍니다.
이번 글에서는 마스터에서 슬레이브 컴퓨터에 바로 접속할 수 있도록 SSH를 설정할 것이다. 이 과정을 해두면 나중에 훨씬 편리하다. 또한 이 과정부터 클러스터링 과정이라고 볼 수 있다.
- Static IP Addresses 셋팅하기
- hosts와 hostname 변경하기
- SSH 활성화 및 연결하기
- 공개키/개인키 생성하여 복제하기
- 클러스터 관리 함수 만들기
기술적인 부분에 들어가기 앞서 클러스터와 마스터/슬레이브 개념에 대해서 간단하게 살펴보자.
클러스터란
클러스터(컴퓨터 클러스터)는 컴퓨터 여러 대가 연결되어 하나의 컴퓨터처럼 작동되는 시스템이다. 좀 더 자세하게 설명한다면 각각의 OS를 가진 여러 대의 컴퓨터가 분산 컴퓨팅 프로그램에 의해서 하나의 컴퓨터가 여러 대의 컴퓨터를 통제하여 사용할 수 있는 것이다. 위 정의에서 여러 대의 컴퓨터를 통제하는 하나의 컴퓨터를 ‘마스터’라고 하며, 그외 통제 당하는 컴퓨터를 ‘슬레이브’라고 지칭한다. 해당 프로젝트에서는 라즈베리 파이 3개를 사용하므로 마스터 1개 슬레이브 2개로 구성된다.
클러스터 셋팅하기
본격적으로 클러스터를 셋팅해보자. 지금부터 진행하는 과정은 연결할 모든 라즈베리 파이에서 진행해야 한다. 먼저 라즈베리 파이에 접속한다.
1 | ssh pi@raspberrypi.local |
Static IP Addresses 셋팅하기
그 다음으로는 네트워킹을 더 편하게 하기 위해 라우터에서 할당하는 IP를 지정하여 각각의 라즈베리 파이의 고정 IP 주소로 설정한다. 그 방법은 각각의 라즈베리 파이에서 /etc/dhcpcd.conf
에 접속하여 static_ip_address
를 수정하면 된다. 만약 에디터가 없다면 아래의 코드를 입력하여 vim
을 설치하자.
1 | apt-get install vim |
그 다음 명령어 cd
를 이용해 etc
디렉토리로 접속한 후, dhcpcd.conf
파일을 오픈한다.
1 | cd etc |
마지막으로 아래의 부분을 수정한다.
1 | interface eth0 |
고정 IP 주소는 현재 라즈베리 파이가 연결되어 있는 라우터에서 제공되는 것을 그대로 사용하면 된다. 라우터에서 제공하는 IP는 사용하는 기계마다 다르기 때문에 만약 해당 라즈베리 파이의 IP를 모른다면 아래의 명령어를 입력하여 확인한다.
1 | ifconfig |
또한 vim을 사용하는 방법은 I
를 누르면 INSERT 모드로 변경되고, 변경할 부분을 수정한 다음 esc
키를 누른다. 그 다음 :w
를 입력하면 변경사항이 저장되고 :q
을 입력하여 파일에서 나오면 수정이 완료된 것이다.
hosts와 hostname 변경하기
다음으로 변경해야 할 것은 etc
에 속해있는 hosts
와 hostname
이다. 여기서 각각의 라즈베리 파이의 이름을 설정할 수 있다. 이 프로젝트에서는 pi-master, pi-slave1, pi-slave2 을 각각의 이름으로 사용한다.
hostname
파일에는 해당 라즈베리 파이의 초기 셋팅된 이름이 들어있다. 따라서 해당 라즈베리 파이를 어떻게 사용할 것인지 정했다면 그에 맞게 이름을 변경한다. 예를 들어 마스터로 쓰는 라즈베리 파이의 경우 hostname
파일의 내용을 “pi-master”로 변경해야 하고, 나머지 라즈베리 파이들도 각각 “pi-slave1”, “pi-slave2”로 변경해주면 된다.
1 | cd /etc |
그 다음 hosts
에 들어가서 각각의 고정 IP 주소와 변경한 이름들을 추가하여 저장한다.
1 | vim hosts |
위 코드를 입력하면 hosts
파일이 열리고 해당 파일에 아래의 내용을 추가한다.
1 | 192.168.0.0x pi-master |
SSH 활성화 및 연결하기
그 다음은 ssh키를 활성화해야 한다. 각각의 라즈베리 파이에 아래의 코드를 입력하여 ssh를 활성화하자.
1 | sudo systemctl enable ssh |
이제 활성화된 컴퓨터에 서로의 이름만으로 접속하기 위해서는 ~/.ssh/config
을 생성하여 각 정보를 저장해야 한다. 먼저 .ssh
디렉토리를 생성하고 config
파일을 만들자.
1 | cd ~/ |
위 코드로 디렉토리와 파일이 생성되었다면, 아래의 코드를 입력하여 정보를 입력하면 된다.
1 | Host 변경한 이름 |
여기서 중요한 것은 마스터인 경우 슬레이브들의 정보도 모두 입력해야 한다는 것이다. 슬레이브들은 본인의 정보만 저장하면 되지만, 마스터는 모두 가지고 있어야 한다. 예시는 아래와 같다.
1 | # pi-master의 config |
이렇게 설정하면 ssh 활성화 및 연결이 완료된다.
공개키/개인키 생성하여 복제하기
이름으로 편하게 들어갈 수 있지만 아직까지는 비밀번호를 입력해야 한다. 만약 슬레이브 100개를 관리한다면 비밀번호를 매번 입력하는 것은 매우 번거로울 것이다. 공개키와 개인키를 만들어 사용하면 ssh에서 비밀번호 없이 로그인할 수 있다. 따라서 우리는 공개키/개인키를 설정하여 이름만 입력하면 슬레이브에 바로 접속할 수 있도록 해줄 것이다. 과정은 다음과 같다.
- 각 라즈베리 파이에서 아래의 코드를 입력하여 공개키와 개인키를 생성한다.
1 | ssh-keygen –t ed25519 |
- 슬레이브에서 아래의 코드를 입력하여 슬레이브의 공개키들을 마스터 컴퓨터의
~/.ssh/authorized_keys
에 복사한다.
1 | cat ~/.ssh/id_ed25519.pub | ssh pi@<마스터 고정 IP> 'cat >> .ssh/authorized_keys' |
- 마찬가지로 마스터의 공개키도
authorized_keys
에 복사한다.
1 | cat .ssh/id_ed25519.pub >> .ssh/authorized_keys |
위 과정을 완료하면 마스터에서는 비밀번호 입력 없이 아래의 코드만을 사용하여 슬레이브에 접속할 수 있다.
1 | ssh pi-slave1 |
만약 모든 라즈베리 파이에서 이와 같이 접속하고 싶다면 만든 파일들을 슬레이브에 복사하면 된다. 아래의 코드를 마스터에서 입력하면 복사된다.
1 | scp ~/.ssh/authorized_keys <슬레이브 이름>:~/.ssh/authorized_keys |
클러스터 로그인 함수 만들기
만약 연결하는 슬레이브가 100개라면 매번 이름을 입력하는 것도 번거로운 일이다. 따라서 모든 슬레이브에 접속하는 함수를 만들어 사용할 것이다. 이렇게 하면 슬레이브에 일괄적으로 접속해야 하는 일들을 한번에 처리할 수 있다. 따라서 아래의 함수들은 마스터에만 저장되어 있으면 된다.
함수를 사용하려면 아래의 코드들을 ~/.bashrc
파일 끝에 추가하자.
1 | function otherpis { |
위 함수는 마스터를 제외한 슬레이브의 이름들을 반환해준다.
1 | function clustercmd { |
clustercmd
는 각각 슬레이브에 바로 접속해준다. 이 함수 뒤에 코드를 입력하면 해당 코드가 슬레이브 모두에 적용된다.
1 | function clusterreboot { |
clusterreboot
는 모든 슬레이브들을 일괄적으로 종료한 후 재부팅해주며, clustershutdown
는 모든 슬레이브를 종료한다. 또한 clusterscp
은 원하는 파일을 슬레이브에 복사한다.
마지막으로 아래의 코드를 입력하여 변경사항을 저장하고 슬레이브에도 해당 파일을 복사한다.
1 | source ~/.bashrc && clusterscp ~/.bashrc |