Skip to main content

이 버전의 GitHub Enterprise Server는 다음 날짜에 중단됩니다. 2026-08-25. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 더 뛰어난 성능, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise Server로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

여러 데이터 디스크 구성

추가 데이터 디스크를 구성하고 다른 서비스의 데이터를 호스트하는 데 사용할 수 있습니다.

누가 이 기능을 사용할 수 있나요?

GitHub Enterprise Server

GHES 인스턴스에 더 많은 디스크를 도입하는 이유는 무엇인가요?

  • 향상된 리소스 배포:
    • 서비스에는 고유한 디스크 요구 사항이 있습니다.
    • MySQL은 대부분 대기 시간 및 IOPS에 민감합니다.
    • 리포지토리와 같은 일부 리소스는 비용이 많이 드는 블록 스토리지의 이점을 활용하지 못합니다.
  • 최대 VM 제한:
    • 단일 디스크는 인스턴스의 제한 사항을 최대화할 수 없는 경우가 많습니다.
    • 비용 관점에서 볼 때 가장 비싸거나 가장 빠른 스토리지에서 모든 것을 실행하는 것은 일반적으로 불가능하거나 가치가 없습니다.
  • 리소스 할당과 서비스 간의 명확한 분리:
    • 리소스를 대상으로 할당하여 중요한 서비스가 부족해지는 것을 방지할 수 있습니다.
  • 스케일링:
    • 독립 실행형 토폴로지와 고가용성 토폴로지의 고객은 필요에 따라 규모를 확장할 수 있습니다.

Constraints

  • 다중 데이터 디스크는 독립 실행형 및 HA(고가용성) 토폴로지에서만 지원됩니다.

  • 배포에서 여러 데이터 디스크를 구성한 후에는 해당 배포에 대해 이 변경 내용을 실행 취소할 수 없습니다.

  • 다중 데이터 디스크를 설정하고 데이터를 마이그레이션하려면 일반적으로 약간의 가동 중지 시간이 필요합니다.

    • 이를 최소화하려면 다중 데이터 디스크가 있는 복제본을 구성하고, 기본에서 데이터를 복제한 후 복제본으로 장애 조치를 수행하면 됩니다.
    • 주 데이터베이스에 직접 다중 데이터 디스크를 추가하는 경우 훨씬 더 긴 가동 중지 시간이 예상됩니다.
  • 공개 미리 보기 중에는 비프로덕션 환경에서만 다중 데이터 디스크를 사용해야 합니다.

  • MySQL 및 리포지토리를 동일한 디스크로 마이그레이션하지 않는 것이 좋습니다.

  • 현재 MySQL 및 리포지토리만 추가 디스크로 마이그레이션할 수 있습니다.

리소스 추천

현재 디스크보다 빠르거나 빠른 디스크를 추가하면 성능이 향상됩니다. 스토리지 디바이스는 일반적으로 IOPS(초당 입력/출력 작업), 처리량 및 대기 시간으로 측정됩니다. MySQL의 경우 대기 시간이 짧고 IOPS가 기존 데이터 디스크보다 높은 디스크를 사용하는 것이 좋습니다. 리포지토리의 경우 현재 데이터 디스크보다 IOPS 및 처리량이 높은 디스크를 선택합니다.

고가용성 설정에서는 주 복제본과 모든 복제본 모두에서 다중 데이터 디스크를 사용하는 것이 가장 좋습니다. 주 데이터베이스에 다중 데이터 디스크가 있지만 복제본이 없는 구성을 혼합하는 것은 권장되지 않습니다.

여러 데이터 디스크 및 데이터 경로 설정

필수 조건

  • 시작하기 전에 데이터의 최근 백업을 수행하는 것이 좋습니다.
  • 이 기능을 사용해 보기 위한 테스트 환경을 만듭니다.
    • 공개 미리 보기 중에는 테스트 환경에서 이 기능을 사용하는 것이 좋습니다.
    • 기능이 일반 공급되면 프로덕션 환경에서 사용하기 전에 비프로덕션 환경에서 기능을 테스트하는 것이 좋습니다.

지시

  1. GHES를 새로 설치하거나 기존 GHES 인스턴스를 사용할 수 있습니다. /data/user에 데이터 디스크가 구성되어 있어야 합니다.

  2. 설정되면 /data/user 인스턴스에 블록 스토리지 디바이스를 추가합니다.

    현재 ghe-storage-find는 블록 스토리지 경로의 알파벳 순서에 따라 /data/user을/를 설정하기 위해 첫 번째 블록 스토리지를 선택합니다. 이는 GHES 어플라이언스의 첫 번째 부팅에서 발생합니다.

    사용되는 /data/user디스크를 더 잘 제어하려면 처음에 하나의 디스크만 연결하여 초기화 프로세스를 완료하는 것이 좋습니다.

  3. 새 블록 스토리지 디바이스를 사용하여 다중 디스크 설정을 초기화합니다. 다중 디스크 지원을 초기화하려면 다음을 실행합니다 ghe-storage-multi-disk init. 다시 부팅 ghe-multi-disk.service 할 때마다 기존 데이터 디스크를 올바른 경로에 자동으로 다시 탑재합니다.

    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
    
    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
    

/dev/nvme2n1 /dev/nvme3n1 예제 경로에만 유의하세요. 시스템의 경로와 일치하지 않을 수 있습니다. 마찬가지로, db``git 예입니다. 다른 이름을 선택할 수 있습니다.

  1. 유지 관리 모드로 전환합니다.

    Shell
    gh es maintenance set --enabled true
    
  2. 원하는 데이터 경로를 마이그레이션합니다.

    MySQL을 마이그레이션하려면:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-mysql db
    

    리포지토리를 마이그레이션하려면:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-repositories git
    
  3. 유지 관리 모드를 종료합니다.

    Shell
    gh es maintenance set --enabled false
    
  4. 일정 기간 동안 인스턴스를 테스트하여 모든 것이 예상대로 작동하는지 확인합니다.

  5. 충분한 테스트 후에만 제거 /data/user/mysql-backup/data/user/repositories-backup.

    테스트 중에 이러한 폴더를 유지하면 비상 시 롤백할 수 있습니다. 충분한 테스트 후에는 백업 폴더를 제거하여 공간을 확보해야 합니다.

고가용성 구성에 대한 지침

다음 지침은 HA(고가용성) 토폴로지에서 가동 중지 시간을 줄이는 데 도움이 됩니다. 독립 실행형 토폴로지를 사용하는 경우 현재 유사한 추가 지침이 없습니다.

HA 토폴로지의 경우 여러 데이터 디스크가 구성된 새 복제본을 설치하고 주 데이터베이스에서 데이터를 복제한 다음 복제본을 주 복제본으로 승격하는 것이 가장 좋습니다. 이 프로세스로 인해 상당한 가동 중지 시간이 발생할 수 있으므로 현재 주 데이터베이스의 추가 디스크로 데이터를 마이그레이션하는 것은 권장되지 않습니다.

  1. 더 나은 디스크를 사용하여 새 HA 복제본을 설정합니다.

    데이터 마이그레이션을 계획하려면 주 복제본을 사용하여 du -sh /data/user/mysql``du -sh /data/user/repositories 새 복제본에 대한 디스크 공간 요구 사항을 계산합니다.

  2. 새 HA 복제본에서 다중 디스크를 설정합니다.

  3. HA 주 노드가 레플리카로 복제되도록 허용합니다.

  4. 복제본 어플라이언스로 장애 조치(failover) 시작에 설명된 대로 장애 조치(failover) 시퀀스를 따릅니다.

복제 프로세스는 시간이 오래 걸릴 수 있지만 백그라운드에서 실행되므로 유지 관리 모드의 실제 중단이 크게 줄어듭니다.

예: 추가 디스크 구성

이 예제에서는 디스크 초기화 및 데이터 마이그레이션에 필요한 명령 및 출력을 보여 줍니다. 특히 /data/user/mysql/data/multi-disk/db/mysql로 마이그레이션되고, /data/user/repositories/data/multi-disk/git/repositories로 마이그레이션됩니다.

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk status
Checking system status...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk info
Dumping disk status and information...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
Starting initialization sequence for /dev/nvme2n1 at /data/multi-disk/db...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
Starting initialization sequence for /dev/nvme3n1 at /data/multi-disk/git...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-mysql db
Start MySQL migration to /data/multi-disk/db...
Running checks..
Error: maintenance mode must be enabled before being able to proceed.
ERROR: Last Command: return 1 LINE: 36 ghe-storage-migrate-mysql
Script exited with exit code: 1

admin@ghe-test-primary:~$ ghe-maintenance -s

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-mysql db
Start MySQL migration to /data/multi-disk/db...
Success: /data/user/mysql moved to /data/multi-disk/db/mysql
Script exited with exit code: 0

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-repositories git
Start repository migration to /data/multi-disk/git...
Success: /data/user/repositories moved to /data/multi-disk/git
Script exited with exit code: 0

admin@ghe-test-primary:~$ ghe-maintenance -u

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk status
Checking system status...
/data/user/mysql -> /data/multi-disk/db/mysql is correctly symlinked.
Repositories migration was detected...
/data/user/repositories -> /data/multi-disk/git/repositories is correctly symlinked.

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk info
Dumping disk status and information...
# Multi disk configuration /data/user/multi-disk-config:
DISK_DB="lvm"
DISK_GIT="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"

admin@ghe-test-primary:~$ ls /var/log/multi-disk/
ghe-storage-init-db.log  ghe-storage-init-git.log  ghe-storage-migrate-mysql.log  ghe-storage-migrate-repositories.log

위생 검사

/usr/local/share/enterprise/ghe-storage-multi-disk status/usr/local/share/enterprise/ghe-storage-multi-disk info 둘 다 설정을 확인하는 데 유용합니다.

현재 다중 디스크 구성을 보려면 다음을 사용합니다.

$ cat /data/user/multi-disk-config
DISK_DB="lvm"
DISK_GIT="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"

디스크 초기화 및 마이그레이션 이벤트를 포함하여 다중 디스크 로그를 검토하려면 다음을 실행합니다.

$ ls -l /var/log/multi-disk/
total 56
-rw-r--r-- 1 root root  2398 Mar  3 13:22 ghe-storage-init-db.log
-rw-r--r-- 1 root root  2497 Mar  3 13:23 ghe-storage-init-git.log
-rw-r--r-- 1 root root  2201 Mar  3 13:28 ghe-storage-migrate-mysql.log
-rw-r--r-- 1 root root 37296 Mar  3 13:30 ghe-storage-migrate-repositories.log

여러 디스크를 관리하기 위한 명령

이러한 명령을 사용하면 여러 디스크를 추가하고 특정 서비스 또는 폴더 경로를 해당 디스크로 마이그레이션할 수 있습니다. 원래 폴더 경로는 유지 관리되며 정적 상태로 유지됩니다. 다른 서비스는 변경된 내용을 인식하지 못합니다. 정적 폴더 경로는 새로 마이그레이션된 경로로 심볼릭 링크로 연결됩니다.

명령에는 다음이 포함됩니다.

  • ghe-storage-multi-disk
    • status
    • init
    • info
    • mount
    • start-services (디버깅에만 권장)
    • stop-services (디버깅에만 권장)
  • ghe-storage-migrate-repositories
    • /data/user/repositoriesghe-storage-multi-disk init을(를) 사용하여 생성된 모든 디스크 경로로 마이그레이션합니다.
  • ghe-storage-migrate-mysql
    • /data/user/mysqlghe-storage-multi-disk init을(를) 사용하여 생성된 모든 디스크 경로로 마이그레이션합니다.