멀티 리전 클러스터 연합하기
멀티 리전 클러스터 연합하기 (Federate multi-region clusters)
노마드는 리전 단위로 동작하며 페더레이션(federation)을 일급 지원해요. 페더레이션을 사용하면 사용자가 어떤 리전에 있는 서버든, 심지어 다른 리전에 있는 서버라도, 어떤 리전을 대상으로 해서든 작업(job)을 제출하거나 HTTP API와 상호작용할 수 있어요.
여러 노마드 클러스터를 연합하려면 클러스터 간 네트워크 연결이 필요해요. 각 클러스터의 서버는 RPC와 Serf로 통신할 수 있어야 해요. 연합된 클러스터는 WAN을 통해 통신할 것으로 예상되므로, 리전 내 서버들처럼 낮은 지연 시간이 필요하진 않아요.
노마드 서버들이 네트워크로 연결될 수 있게 되면, 한 리전의 어느 서버에서든 원격 리전의 서버로 nomad server join 명령을 실행해 클러스터를 연합할 수 있어요.
출처: 문서
본문
사전 요구사항
이 가이드에서 설명하는 작업을 수행하려면 포트 4646, 4647, 4648이 열려 있는 두 개의 노마드 환경이 필요해요. 이 Terraform 환경을 사용해 샌드박스 환경을 프로비저닝할 수 있어요. 이 가이드는 각 클러스터에 서버 노드 하나와 클라이언트 노드 두 개가 있는 두 개의 클러스터를 가정해요. Terraform 코드가 이미 포트 4646을 열어 두지만, nomad server join을 실행하려는 서버에서는 포트 4647과 4648도 열어야 해요(자세한 내용은 Nomad Port Requirements 문서 참고).
참고: 이 튜토리얼은 데모용이며 각 클러스터에 서버 노드가 하나뿐이라고 가정해요. 프로덕션 구성은 참조 아키텍처(reference architecture)를 참고해 주세요.
현재 리전 확인
현재 각 클러스터는 기본 global 리전에 있어요. 각 클러스터의 아무 노드에서 nomad server members를 실행해 확인할 수 있어요:
$ nomad server members
Name Address Port Status Leader Protocol Build Datacenter Region
ip-172-31-29-34.global 172.31.29.34 4648 alive true 2 0.10.1 dc1 global
리전 변경
개별 클러스터의 리전을 각각 west와 east로 바꾸려면, 서버와 클라이언트의 에이전트 설정에 region 파라미터를 추가해요(제공된 샌드박스 환경을 사용한다면 이 설정은 /etc/nomad.d/nomad.hcl에 있어요).
다음은 한 클러스터의 노드에서 필요한 변경을 보여주는 설정 파일 스니펫이에요(다른 클러스터의 서버와 클라이언트에서는 이 값을 east로 바꾸는 것을 잊지 마세요):
data_dir = "/opt/nomad/data"
bind_addr = "0.0.0.0"
region = "west"
# ...
각 클러스터에 필요한 변경을 마쳤으면 각 노드에서 nomad 서비스를 다시 시작해요:
$ sudo systemctl restart nomad
클러스터의 아무 노드에서 nomad server members 명령을 다시 실행해 서버가 올바른 리전에 구성되어 있는지 확인해요. 아래 출력은 west 리전에서 명령을 실행한 결과예요(다른 클러스터에서도 실행해 east 리전인지 확인하세요):
$ nomad server members
Name Address Port Status Leader Protocol Build Datacenter Region
ip-172-31-29-34.west 172.31.29.34 4648 alive true 2 0.10.1 dc1 west
리전 연합
한 클러스터의 서버에서 nomad server join 명령을 실행하고, 권위 있는 리전의 리더 IP 주소를 포트 4648을 지정해 제공해요.
west 리전의 서버에서 east 리전의 서버를 대상으로 nomad server join 명령을 실행하는 예시는 다음과 같아요:
$ nomad server join 172.31.26.138:4648
Joined 1 servers successfully
클러스터 연합 확인
클러스터를 연합한 뒤 nomad server members 명령의 출력은 양쪽 리전의 서버를 모두 보여줘요:
$ nomad server members
Name Address Port Status Leader Protocol Build Datacenter Region
ip-172-31-26-138.east 172.31.26.138 4648 alive true 2 0.10.1 dc1 east
ip-172-31-29-34.west 172.31.29.34 4648 alive true 2 0.10.1 dc1 west
원격 클러스터의 작업 상태 확인
west 리전의 노마드 클러스터에서 nomad status 명령을 실행해 east 리전에 있는 작업의 상태를 확인해 봐요:
$ nomad status -region="east"
No running jobs
리전이 제대로 연합되지 않았다면 다음 출력을 받게 돼요:
$ nomad status -region="east"
Error querying jobs: Unexpected response code: 500 (No path to region)