본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Machine 수 확장하기 (Scale the Number of Machines)

원문 보기 위키 갱신

앱의 최대 용량은 앱에 속한 Fly Machine 수에 의해 결정돼요. fly scale count 명령으로 앱을 수평 확장하고, Machine을 복제(clone)하거나 파괴(destroy)하는 방법을 알려드릴게요.

앱의 최대 용량은 앱에 속한 Fly Machine 수에 의해 결정돼요. Machine을 만들거나 파괴함으로써 앱을 수평으로 확장해요.

기존 Machine을 시작하고 멈추는 것은 만들고 파괴하는 것보다 훨씬 빠릅니다. 정지된 Machine은 실행 중인 것보다 저렴해요. Machine은 정지하면 CPU와 RAM을 해제하고, rootfs는 Docker 이미지에서 새로 다시 빌드되어 시작할 준비를 해요.

버스트성 워크로드의 경우, 피크 부하를 처리할 만큼 충분한 Machine을 만들고, 필요에 따라 Machine을 정지·시작해 앱의 활성 용량을 조정하는 것을 권장합니다.

자세한 내용은 다음을 참고하세요:

앱을 처음 배포한 후 Fly Launch가 관리하는 Machine 수를 변경하는 방법은 두 가지예요:

  1. fly scale count 하위 명령 사용
  2. 앱의 기존 Machine을 명시적으로 복제하거나 파괴하는 방법

fly scale count는 여러분이 지정한 대상 스케일에 도달하기 위해 내부 규칙을 사용해 Machine을 만들거나 파괴해요. 대상 Machine 수가 기존 총 수보다 높으면 Machine이 생성되고, 대상 Machine 수가 기존 총 수보다 낮으면 Machine이 파괴돼요.

fly scale count 또는 fly machine clone/fly machine destroy로 Machine을 만들거나 파괴하면 결과 스케일은 fly deploy에 보존돼요—단, 정확히 0대로 축소하는 경우는 예외예요. 기존 Machine이 전혀 없다면 fly deploy는 primary_region에서 그리고 fly.toml 파일에 구성된 [processes]에 따라 새 Machine으로 앱을 시드해요. 새 앱을 시작하거나 0에서 배포할 때 몇 대의 Machine이 생성되는지에 대한 자세한 내용은 첫 배포 시 기본 중복을 참조하세요.

앱의 현재 스케일 보기

fly scale show는 앱 Machine의 모든 스케일 정보를 출력해요. 각 리전에서, 앱의 각 프로세스 그룹에서, 각 VM 사양의 Machine이 몇 대인지요.

이를 설명하는 예시가 여기 있어요:

```bash cmd fly scale show ```
VM Resources for app: my-app-name

Groups
NAME    COUNT   KIND            CPUS    MEMORY  REGIONS
app     3       shared          4       1024 MB mia,scl(2)
disk    3       shared          4       1024 MB ord(2),scl
task    4       performance     1       2048 MB iad,mia,ord,scl

이 앱에는 총 10대의 Machine이 있어요. app 프로세스 그룹은 scl(산티아고)에 2대, mia(마이애미)에 1대가 있어요. disk는 ord(시카고)에 2대, scl에 1대예요. task는 iad(애슈번), mia, ord, scl 각각에 Machine 1대씩이 있어요. 여러분의 앱에 가장 잘 맞는 곳에 Machine을 배치할 수 있어요.

출처: 문서

본문

단일 리전에서 Machine 수 확장하기

다음 예시는 Fly 앱의 기본 프로세스 그룹인 app 프로세스 그룹에 적용돼요. 프로세스 그룹을 정의하지 않으면, fly machine 명령이나 Machines API로 만든 Machine을 제외하고 앱의 모든 Machine이 app 프로세스 그룹에 속해요.

fly scale count는 명시적인 프로세스별 대상 수를 전달하지 않으면 기본 프로세스 그룹에 변경을 적용해요.

yyz(토론토)에 두 대의 Machine이 있는 새로 배포된 웹 앱의 fly scale show 출력은 다음과 같아요:

```bash cmd fly scale show ```
VM Resources for app: my-app-name

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS 
app     2       shared  1       256 MB  yyz(2) 

확장하는 가장 간단한 방법은 fly scale count <target-count>를 사용하는 거예요. 이 명령은 앱의 기존 리전에 있는 기본 프로세스 그룹에 Machine을 더 추가할 뿐이에요:

fly scale count 4

결과:

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS 
app     4       shared  1       256 MB  yyz(4) 

이제 yyz에 네 대의 Machine이 있어요.

볼륨이 있는 앱 확장하기

볼륨이 있는 앱을 확장할 때 fly scale count 명령은 생성하는 Machine에 볼륨을 연결해요. 먼저 Machine의 리전에 이미 존재하는 연결되지 않은 볼륨을 사용하고, 기존 볼륨이 충분하지 않거나 전혀 없으면 새 볼륨을 만들어요.

fly scale count 명령이 Machine을 파괴하면 볼륨은 연결이 해제되고 확장할 때 다시 사용할 수 있어요.

`fly scale count` 명령은 새 빈 볼륨을 만들거나 기존 볼륨을 연결하며, 볼륨 간에 데이터를 복사하거나 이동하지 않습니다.

이 예시에서 앱은 disk 프로세스에 연결된 볼륨이 있는 Machine 1대와 연결되지 않은 볼륨 1개로 시작하며, 모두 yul 리전에 있어요. disk 프로세스를 3대의 Machine으로 확장하는 다음 명령은 새 Machine 2대와 새 볼륨 1개를 만들어요:

```bash cmd fly scale count disk=3 --region yul ```
App 'my-app-name' is going to be scaled according to this plan:
  +2 machines for group 'disk' on region 'yul' with size 'shared-cpu-1x'
  +1 new volumes and using 1 existing volumes for group 'disk' in region 'yul'
? Scale app my-app-name? (y/N)

앞선 예시가 지정하는 것은 다음과 같아요:

  • 연결되지 않은 볼륨이 있고 Machine을 두고 싶은 리전.
  • 프로세스 그룹. my-app-name 앱이 disk 프로세스 그룹에 속한 Machine용 볼륨을 갖기 때문이에요.

앱의 리전 확장하기

--region 옵션은 하나 이상의 리전 코드를 사용해요. fly scale count는 이 옵션에 나열한 리전들에 걸쳐 지정한 대상 수에 도달하도록 Machine을 만들거나/파괴하며, 이 리전들 사이에서 변경 사항의 균형을 맞추려고 해요.

예를 들어, 앱에서 yyz(토론토)와 ewr(시커커스) 리전 사이에 총 세 대의 Machine을 두려면:

fly scale count 3 --region yyz,ewr

위 예시에서 앱에 yyz와 ewr 이외의 리전에 기존 Machine이 있다면 fly scale show로 보이는 결과 총 Machine 수는 3보다 많아요:

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS        
web     4       shared  1       256 MB  ewr,mia,yyz(2)

fly scale 명령당 단일 리전을 지정해 리전별로 스케일을 명시적으로 설정할 수도 있어요. 예를 들어:

fly scale count 4 --region ewr

--region을 사용하지 않으면 대상 수는 앱에 어떤 프로세스 그룹에 속한 Machine이 이미 있는 모든 리전에 분산돼요.

프로세스 그룹별 확장

fly scale count는 프로세스 그룹별 명시적 대상 수를 받아요.

nrt(도쿄)와 yyz(토론토) 두 리전에서 실행되는 두 개의 프로세스 그룹을 가진 앱이 여기 있어요:

```bash cmd fly scale show ```
VM Resources for app: my-app-name

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS       
web     4       shared  1       256 MB  nrt(2),yyz(2)
worker  4       shared  1       256 MB  nrt(2),yyz(2)

리전으로 변경을 제한하지 않고 web Machine 10대, worker Machine 6대로 확장하세요:

```bash cmd fly scale count web=10 worker=6 ```
App 'my-app-name' is going to be scaled according to this plan:
  +3 machines for group 'web' on region 'yyz' with size 'shared-cpu-1x'
  +3 machines for group 'web' on region 'nrt' with size 'shared-cpu-1x'
  +1 machines for group 'worker' on region 'yyz' with size 'shared-cpu-1x'
  +1 machines for group 'worker' on region 'nrt' with size 'shared-cpu-1x'
? Scale app my-app-name? Yes
Executing scale plan
  Created 9080eeddc29387 group:web region:yyz size:shared-cpu-1x
  ...
  Created 1781779b52d489 group:worker region:nrt size:shared-cpu-1x
```bash cmd fly scale show ```
...
Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS       
web     10      shared  1       256 MB  nrt(5),yyz(5)
worker  6       shared  1       256 MB  nrt(3),yyz(3)

특정 리전에서 앱이 필요 이상으로 많은 용량을 가진다면, 리전별로 Machine을 확장할 수도 있어요. 다음 예시는 두 프로세스를 yyz(토론토) 리전에서만 Machine 한 대씩 축소해요:

fly scale count web=4 worker=2 --region yyz

요청대로 nrt는 변하지 않지만, yyz에서는 web 프로세스가 4대, worker가 2대로 축소돼요.

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS       
web     9       shared  1       256 MB  nrt(5),yyz(4)
worker  5       shared  1       256 MB  nrt(3),yyz(2)

--process-group 옵션을 사용해 확장할 단일 프로세스 그룹을 지정할 수도 있어요:

fly scale count 4 --process-group web --region nrt,yyz

새 리전 추가하기

앱에 리전을 추가하는 것은 그곳에 최소 한 대의 Machine을 두는 것을 의미해요.

예를 들어, 그곳에서 0부터 확장해 syd(시드니)를 앱의 리전에 추가하세요:

fly scale count 2 --region syd

이제 syd가 앱의 regions list에 나타나요:

```bash cmd fly regions list ```
Regions [app]: yyz, syd

앱에 여러 프로세스 그룹이 있다면, 새 리전에 넣을 프로세스를 지정하세요:

fly scale count web=1 worker=1 --region syd

대안으로 특정 Machine을 새 리전으로 복제할 수 있으며, 새 Machine은 소스 Machine의 프로세스 그룹을 상속해요.

--max-per-region으로 리전 간 Machine 균형 맞추기

fly scale count가 제안하는 변경이 불균형해 보이면 --max-per-region을 사용해 리전별 Machine 배치를 더 제어하세요. 이 옵션은 어떤 단일 리전의 결과 Machine 수를 여러분이 제공한 숫자로 제한해요.

--max-per-region을 사용해 Machine 수를 리전들 사이에 더 고르게 재분배할 수도 있어요.

예를 들어, yyz(토론토)에 8대, yul(몬트리올)에 2대, ewr(시커커스)에 1대만 있는 앱에서:

NAME    COUNT   KIND    CPUS    MEMORY  REGIONS           
app     11      shared  1       256 MB  ewr,yul(2),yyz(8)
fly scale count 11 --max-per-region 5
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS              
app     11      shared  1       256 MB  ewr(3),yul(3),yyz(5)

--max-per-region을 프로세스 그룹 및 --region과 단일 fly scale count 명령에서 결합할 수 있어요.

0으로 축소했다가 다시 확장하기

fly scale count로 0대로 축소하세요. 어떤 프로세스도 빠뜨리지 마세요:

fly scale count web=0 worker=0

제대로 됐는지 확인하세요:

```bash cmd fly scale show ```
VM Resources for app: my-app-name

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS 

이제 어떤 프로세스 그룹에도 Machine이 없다면, fly scale count가 본질적으로 기존 Machine을 복제하는 것에 의존하므로 그냥 확장할 수 없어요. 하지만 간단히 재배포할 수는 있어요:

fly deploy
```bash cmd fly scale show ```
...
Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS 
web     2       shared  1       256 MB  yyz(2) 
worker  2       shared  1       256 MB  yyz(2) 

fly deploy는 복원력 목적으로 프로세스당 두 대의 Machine을 만들어요.

다시 사업을 시작할 수 있고 원하는 대로 확장할 수 있어요!

fly machine clone으로 확장하기

Machine을 복제해 앱에 Machine을 추가할 수 있어요. 새 Machine은 예상하듯 지정된 Machine의 복사본이며, 같은 프로세스 그룹에 속해요. 원본 Machine에 Fly Volume이 연결되어 있다면, 새 Machine을 위해 빈 볼륨이 프로비저닝돼요. 새 볼륨에 무엇을 넣을지는 여러분이 결정할 몫이에요. fly machine clone은 원본 Machine의 볼륨 내용을 자동으로 복사하지 않아요.

다음 명령은 기존 Machine을 복제해 새 Machine 세 대를 만들어요:

$ fly machine clone 21781973f03e89
$ fly machine clone --region syd 21781973f03e89
$ fly machine clone --region nrt 21781973f03e89

fly machine destroy로 축소하기

fly machine stop과 fly machine destroy를 사용해 특정 Machine을 제거해 앱을 축소하세요:

$ fly machine stop 9080524f610e87
$ fly machine destroy 9080524f610e87

Machine이 잘못 동작하고 있다면(예: stop이 성공적으로 되지 않을 때), fly machine destroy --force로 없앨 수 있어요.

fly machine destroy --force 0e286039f42e86
볼륨이 연결된 Machine을 파괴하면, 볼륨을 명시적으로 파괴하거나 그 볼륨이 속한 앱을 파괴할 때까지 볼륨은 그대로 유지됩니다.

관련 읽을거리

더 알아보기 (Learn more)