이전 포스트에서 한 컴퓨터 내에서 NSQ를 사용하는 방법에 대해 다뤘다.
하지만 NSQ를 사용하는 목적은 컴퓨터 한 대가 아닌 클러스터를 만들기 위함이고, NSQ의 장점 중 하나가 원격 클러스터링이라 했는데 책에서는 다루지 않아서 따로 알아보았다.
먼저 요약하자면 원격 클러스터 구축을 위해서는 원격 컴퓨팅 엔진, 포트 개방을 위한 포트포워딩, NSQ 설치가 필요하다.
GCP Compute Engine
일단 여러 컴퓨터로 클러스터를 이루려면 현재 사용중인 맥북 외의 다른 컴퓨터가 있어야 한다.
하지만 없으므로 Google Cloud Platform, 줄여서 GCP에서 원격 클러스터링을 하는 방법을 생각했다.
GCP는 90일간 300불 가량의 크레딧을 제공해서 무료로 원격 컴퓨팅 엔진을 사용해볼 수 있다.
먼저 GCP에 로그인을 한 후, Compute Engine 인스턴스를 생성한다.
이때 몇가지 설정하는데 그냥 기본 설정만 하고 넘어가도 문제 없다.
원격 컴퓨터에 접속
간단하게 대시보드에서 SSH 버튼을 눌러서 브라우저에서 접속할 수 있지만, VSC에서 작업할 수 있는 환경을 만들어보자.
대시보드를 보면 외부 IP가 할당되어 있음을 볼 수 있는데, 이 IP를 사용해 VSC에서 인스턴스에 접속할 수 있다.
그전에 먼저 ssh키부터 만들어보자.
ssh-keygen
위의 명령어를 사용하면 ssh키가 만들어진다. (명령어 입력후 묻는 말에 다 엔터치면 된다.)
맥의 경우 ssh키는 ~/.ssh 폴더에 만들어진다. (finder로 들어갔을 때 .ssh 폴더가 안보이면 ⌘ + ⇧ + . 을 누르면 숨김 파일이 보인다.)
.ssh 폴더에서 ~.pub으로 생성된 퍼블릭키를 찾아서 복사한다. (더블 클릭하면 안열리고 텍스트 편집기로 열면 열린다.)
이제 GCP로 돌아가서 Compute Engine에서 설정의 메타데이터로 들어간다.
메타데이터에서 복사한 퍼블릭 키를 SSH 키에 추가하면 된다.
그러면 이제 IP를 이용해서 VSC에서 원격 컴퓨터에 접속할 수 있게 된다. (사실 VSC에 SSH 관련 확장 프로그램도 설치해야 하는데 나는 이미 설치를 해둔 상태라 상관없다.)
VSC 창에서 왼쪽 아래의 초록색 버튼을 누르면 위 사진처럼 창이 하나 뜨는데, 여기서 호스트에 연결을 누른 후 나오는 창에 GCP의 외부 IP를 입력하면 GCP 인스턴스에 접속하게 된다.
패키지 설치
원격 컴퓨터에 설치된 패키지를 확인해보면 python3는 설치되어 있지만 nsq는 설치되어 있지 않음을 알 수 있다.
원격 컴퓨팅 엔진에서 nsqd를 실행시키고 싶으면 이 접은 글의 과정을 거쳐 nsq를 설치해야 하지만 그냥 소비자로서만 사용하고 싶다면 이 과정 없이 파이썬 모듈인 pynsq만 설치하면 된다.
패키지를 설치하기 전에 sudo apt-get update 명령을 통해 apt-get을 업데이트 시켜주자. (관리자 계정으로 접속한게 아니어서 모든 명령 앞에 sudo를 붙여줘야 작동한다.)
nsq 설치 사이트에 접속하면 리눅스 버전이 있는데, GCP의 정보를 보고 amd 또는 arm을 선택하면 된다.
인스턴스의 이미지 버전을 보면 amd64임을 확인할 수 있다.
nsq 설치 파일을 다운받아서 VSC를 통해 파일을 업로드해도 되지만 리눅스의 wget 명령어를 통해 직접 다운로드 받아보자.
wget도 설치 되어 있지 않기 때문에 먼저 wget를 설치해줘야 한다. sudo apt install wget로 설치하자.
그리고 sudo wget '다운로드 링크'를 통해 설치 파일을 다운로드 받는다.
다운 받은 파일은 .tar.gz 압축 파일이므로 tar -zxvf "파일명" 명령으로 압축을 풀어야 한다.
(파일이름이 기니까 nsq치고 tab키를 누르면 바로 파일명을 입력할 수 있다.)
압축 해제한 실행파일은 실행 파일 경로를 연결해주는 심볼릭 링크를 만들어야 사용할 수 있다.
압축 해제한 폴더에 들어가면 /bin 폴더 밑에 몇가지 실행파일이 존재한다.
이들의 실행 파일 경로를 모두 연결을 해줘야 하는데, 우리가 필요한 것은 nsqd와 nsq_stat이므로 이들만 처리하자.
bin 폴더에 들어가서 ln -s $PWD/nsqd /bin/nsqd 명령을 하고 nsq_stat도 똑같이 한다.
파이썬에서 nsq를 사용하기 위한 pynsq 모듈을 설치하려면 먼저 pip를 설치해야 한다.
sudo apt-get install pip를 하고 pip install pynsq를 하자.
포트포워딩
원격으로 nsqd를 접속하기 위해서는 nsqd를 실행할 컴퓨터의 포트를 개방해야 한다.
포트포워딩이란 컴퓨터의 포트와 네트워크의 포트를 연결시키는 작업이라고 할 수 있다.
생각보다 간단하다.
사용중인 와이파이 공유기의 설정에서 포트포워딩을 진행하면 된다.
나는 처음에 공유기와 맥북만 포트포워딩을 했는데, 인터넷이 모뎀-공유기-맥북 순으로 들어와서 모뎀과 공유기도 포트포워딩을 통해 포트를 개방해야 했다.
nsq에서 사용하는 포트가 4150, 4151이므로 모뎀-공유기, 공유기-맥북을 각각 2개씩 포트포워딩을 진행한다.
실행
이제 맥북에서 nsqd를 실행하고 원격 컴퓨팅 엔진에서 파이썬 코드를 실행해 소비자를 nsqd에 연결시킨다.
그리고 nsqd에 메시지를 보내 정상 작동하는지 확인하자.
이전 포스트에서 설명했듯이 nsqd는 그냥 터미널에 nsqd라고 치면 실행된다.
원격 컴퓨팅 엔진에서는 파이썬 코드를 실행시키는데 맥북의 nsqd와 원격으로 연결되어야 하므로 이전에 ip 주소를 '127.0.0.1:4150'이라고 썼던 것 대신 포트포워딩한 ip 주소를 입력해주어야 한다.
내 컴퓨터의 경우는 모뎀-공유기-맥북 순으로 인터넷이 들어오므로 모뎀의 ip 주소인 xxx.xxx.xxx.xxx:4150를 사용해야 한다. (포트포워딩을 했기 때문에 공유기의 4150번 포트를 거쳐 맥북의 4150번 포트로 들어오게 된다.)
이렇게 ip 주소를 지정한 후 파이썬 코드를 실행하면, 즉시 컴퓨터의 nsqd가 반응해 연결된 것을 표시해준다.
마지막으로 nsqd에 메시지를 보내주면 정상작동함을 볼 수 있다.
맥북에 소비자 하나, 원격 컴퓨팅 엔진에 소비자 하나를 만들어 사용하면 어떻게 될까?
연산이 비교적 간단한 연산이라 연산시간보다 전송시간이 오래 걸려 원격 컴퓨팅 엔진에서는 50개의 메시지 중 고작 3개의 메시지를 처리하고 있음을 볼 수 있다.
'Python' 카테고리의 다른 글
[고성능 파이썬] 6.2 행렬과 벡터 연산 (0) | 2023.02.13 |
---|---|
[고성능 파이썬] 6.1 행렬과 벡터연산 (0) | 2023.02.10 |
[고성능 파이썬] 10.2 클러스터와 작업 큐 - NSQ와 도커 (0) | 2023.02.07 |
[고성능 파이썬] 10.1 클러스터와 작업큐 (0) | 2023.02.06 |
[Python] 함수 (0) | 2023.01.26 |