Skip to main content

여러 데이터 디스크 구성

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

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

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` 예입니다. 다른 이름을 선택할 수 있습니다.
    
  4. 유지 관리 모드로 전환합니다.

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

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

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

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

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

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

  8.        **충분한 테스트 후에만** 제거 `/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.        [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/initiating-a-failover-to-your-replica-appliance)에 설명된 대로 장애 조치(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을(를) 사용하여 생성된 모든 디스크 경로로 마이그레이션합니다.