Machine 마이그레이션
Fly.io는 필요에 따라 Machines를 문제가 있는 호스트에서 건강한 호스트로 마이그레이션해요. 이 페이지에서는 호스트 과밀, 폐기, 예정된 유지보수 같은 사유로 Machine이 이전되는 과정을 단계별로 설명하고, Machine이 마이그레이션되었는지 확인하는 방법을 다뤄요.
출처: 문서
본문
Fly.io는 필요에 따라 Machines를 문제가 있는 호스트에서 건강한 호스트로 마이그레이션해요. Machine 마이그레이션의 사유에는 호스트 과밀, 폐기, 예정된 유지보수 등이 있어요. 마이그레이션 과정은 여러분의 애플리케이션이 Fly.io 플랫폼에서 효율적으로 실행되도록 도와줘요. Machines를 다른 호스트로 마이그레이션하기 위해 조치할 필요는 없고, 앱에 여러 Machines가 있다면 마이그레이션으로 인한 앱 가동 중단도 없어야 해요.
Machine 마이그레이션 과정
우리는 다음 과정으로 Machines를 마이그레이션해요:
- Fly.io 플랫폼 전체에서 여러 Machine 마이그레이션을 조정하기 위한 내부 잠금 확보.
- Machine 중지.
- Machine의 볼륨을 대상 호스트로 포크(복제)(Machine에 연결된 볼륨이 있는 경우).
- 대상 호스트에서 새 Machine 시작.
- 내부 잠금 해제.
다음 섹션들에서 마이그레이션 과정을 더 자세히 설명해요.
1. 내부 잠금 확보
우리는 마이그레이션용 내부 잠금을 여러분의 네트워크 ID로 설정해요. 조직의 모든 앱은 기본적으로 프라이빗 네트워크에 있어요. 피할 방법이 없는데, Machine은 마이그레이션 전에 중지됩니다. 네트워크 ID로 잠글 때, 우리는 같은 앱의 다른 Machines나 실제로 여러분의 네트워크에 있는 다른 앱들을 동시에 마이그레이션하지 않도록 보장해요. 이렇게 하면 데이터베이스의 클러스터링이나 쿼럼(quorum) 문제를 막고, 여러 Machines가 있는 앱의 가동 중단을 방지할 수 있어요.
2. Machine 중지
우리는 Machine에 fly.toml의 kill_signal이나 Machine 설정의 stop_config 설정으로 구성된 신호를 보낸 다음 종료해요. 이것은 실행 중인 앱 Machine의 우아한 종료(graceful shutdown)를 시작해야 해요.
3. Machine의 볼륨 포크
Machine에 연결된 볼륨이 있다면, 그 데이터를 포함한 볼륨의 정확한 복사본을 대상 호스트에 만들어요. 새 볼륨은 원래 볼륨과 다른 볼륨 ID를 가지게 돼요.
4. 새 machine 시작
대상 호스트에서 새 Machine을 시작하고, 해당되는 경우 3단계에서 복사한 볼륨을 연결해요. 새 Machine은 원래 Machine과 같은 Machine ID를 가져요.
6PN 주소는 원래 머신과 다를 거예요. Fly.io 프라이빗 네트워크에서 통신하는 대부분의 앱은 우리 내부 DNS를 사용해 6PN 주소를 조회하며, 그 기능은 평소처럼 계속 동작해요. 앱은 6PN 주소가 정적으로 유지된다고 의존해서는 안 된다는 점을 기억하세요.
5. 내부 잠금 해제
우리는 여러분의 프라이빗 네트워크에서 내부 잠금을 해제해요. 영향받은 호스트에 여러분의 앱 중 어떤 것이 더 많은 Machines를 가지고 있다면 과정이 반복돼요.
Machine이 마이그레이션되었는지 확인
보통 우리가 Machine을 마이그레이션한 후 조치할 필요는 없지만, fly machine status 명령으로 Event Logs에서 마이그레이션 이벤트를 확인할 수 있어요. 예를 들어 다음 Machine은 launch Event Log의 migrated=true 정보가 나타내듯이 마이그레이션되었어요:
fly machine status --app epic-stack-691c
? Select a machine: d8dd625fed5568 crimson-grass-559 (started, region ord, process group 'app')
Machine ID: d8dd625fed5568
Instance ID: 01J08P60K8NK33K9P5MQ5M4QN8
State: started
VM
ID = d8dd625fed5568
Instance ID = 01J08P60K8NK33K9P5MQ5M4QN8
State = started
Image = epic-stack-691c:deployment-01HW81ZEKCE8GB6GV7506VCS7T
Name = crimson-grass-559
Private IP = fdaa:5:a89e:a7b:152:c79c:e922:2
Region = ord
Process Group = app
CPU Kind = shared
vCPUs = 1
Memory = 1024
Created = 2024-06-13T11:36:59Z
Updated = 2024-06-13T11:37:01Z
Entrypoint =
Command =
Volume = vol_r6gzo1p3yq83yxjv
Event Logs
STATE EVENT SOURCE TIMESTAMP INFO
started start flyd 2024-06-13T13:37:01.36+02:00
created launch flyd 2024-06-13T13:36:59.864+02:00 migrated=true