Skip to main content

Enterprise Server 3.20 은(는) 현재 릴리스 후보로 제공됩니다.

여러 데이터 디스크 구성

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

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

GitHub Enterprise Server

참고

여러 데이터 디스크를 구성하고 사용하는 기능은 공개 미리 보기에 있으며 변경될 수 있습니다. 미리 보기에 대한 피드백을 듣고 싶습니다. 고객 성공 팀과 공유하거나 커뮤니티 토론 게시물에 의견을 남길 수 있습니다. 선호하는 옵션은 고객 성공 팀과 피드백을 공유하는 것입니다.

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

  • 향상된 리소스 배포:

    • 서비스에는 고유한 디스크 요구 사항이 있습니다.
    • MySQL은 대부분 대기 시간 및 IOPS에 민감합니다.
    • 리포지토리와 같은 일부 리소스는 비용이 많이 드는 블록 스토리지의 이점을 활용하지 못합니다.
  • 최대 VM 제한:

    • 단일 디스크는 인스턴스의 제한 사항을 최대화할 수 없는 경우가 많습니다.
    • 비용 관점에서 볼 때 가장 비싸거나 가장 빠른 스토리지에서 모든 것을 실행하는 것은 일반적으로 불가능하거나 가치가 없습니다.
  • 리소스 할당과 서비스 간의 명확한 분리:

    • 리소스를 대상으로 할당하여 중요한 서비스가 부족해지는 것을 방지할 수 있습니다.
  • 스케일링:

    • 독립 실행형 토폴로지와 고가용성 토폴로지의 고객은 필요에 따라 규모를 확장할 수 있습니다.
  • 복구:

    • 루트 디스크에서 로그를 격리하면 로그 볼륨이 루트 디스크에 플러딩되지 않도록 방지하여 복원력이 향상됩니다.

Constraints

  • 다중 데이터 디스크는 독립 실행형 및 HA(고가용성) 토폴로지에서만 지원됩니다.
  • 배포에서 여러 데이터 디스크를 구성한 후에는 해당 배포에 대해 이 변경 내용을 실행 취소할 수 없습니다.
  • 다중 데이터 디스크를 설정하고 데이터를 마이그레이션하려면 일반적으로 약간의 가동 중지 시간이 필요합니다.
    • 이를 최소화하려면 다중 데이터 디스크가 있는 복제본을 구성하고, 기본에서 데이터를 복제한 후 복제본으로 장애 조치를 수행하면 됩니다.
    • 주 데이터베이스에 직접 다중 데이터 디스크를 추가하는 경우 훨씬 더 긴 가동 중지 시간이 예상됩니다.
  • 공개 미리 보기 중에는 비프로덕션 환경에서만 다중 데이터 디스크를 사용해야 합니다.

  • MySQL, 리포지토리, 시스템 로그 또는 GitHub 로그를 동일한 디스크로 마이그레이션하지 않는 것이 좋습니다. 각 추가 디스크는 하나의 마이그레이션만 포함해야 합니다.
  • 현재 MySQL, 리포지토리, 시스템 로그 및 GitHub 로그만 추가 디스크로 마이그레이션할 수 있습니다.
  • 시스템 로그를 마이그레이션한 후, 시스템 수준에서 정상적으로 작동하는지 확인하려면 GitHub Enterprise Server 노드를 다시 부팅해야 합니다. 노드를 시작하는 동안 구성이 실행되기 때문에 다소 시간이 걸립니다.

리소스 추천

현재 디스크보다 빠르거나 빠른 디스크를 추가하면 성능이 향상됩니다. 스토리지 디바이스는 일반적으로 IOPS(초당 입력/출력 작업), 처리량 및 대기 시간으로 측정됩니다. MySQL의 경우 대기 시간이 짧고 IOPS가 기존 데이터 디스크보다 높은 디스크를 사용하는 것이 좋습니다. 리포지토리의 경우 현재 데이터 디스크보다 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
    
    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme4n1 systemlogs
    
    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme5n1 githublogs
    

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

  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
    

    시스템 로그를 마이그레이션하려면 다음을 수행합니다.

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-logs systemlogs
    

    시스템 로그를 마이그레이션한 후 인스턴스를 다시 부팅합니다.

    Shell
    sudo reboot
    

    GitHub 로그를 마이그레이션하려면 다음을 수행합니다.

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

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

란 1. 충분한 테스트 후에만/data/user/mysql-backup, /data/user/repositories-backup, /var/log-backup, /data/github/current/log-backup 그리고 /data/github/shared/log-backup를 제거하십시오.

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

고가용성 구성에 대한 지침

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

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

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

데이터 마이그레이션을 계획하려면 주 복제본에서 du -sh /data/user/mysql, du -sh /data/user/repositories, du -sh /var/log, du -sh /data/github/current/log, 및 du -sh /data/github/shared/log를 사용하여 새 복제본에 대한 디스크 공간 요구 사항을 계산하십시오.

  1. 새 HA 복제본에서 다중 디스크를 설정합니다.
  2. HA 주 노드가 레플리카로 복제되도록 허용합니다.
  3.        [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으로 마이그레이션됩니다. 또한 시스템 로그가 /data/multi-disk/systemlogs/log로 마이그레이션되고, GitHub 로그가 /data/multi-disk/githublogs로 마이그레이션됩니다.

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-multi-disk init /dev/nvme4n1 systemlogs
Starting initialization sequence for /dev/nvme4n1 at /data/multi-disk/systemlogs...

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

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:~$ /usr/local/share/enterprise/ghe-storage-migrate-logs systemlogs
Start log migration to /data/multi-disk/systemlogs...
Success: /var/log moved to /data/multi-disk/systemlogs/log
Please restart the GitHub Enterprise instance to apply the changes.
Script exited with exit code: 0

admin@ghe-test-primary:~$ sudo reboot

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-github-logs githublogs
Error: Config apply currently in progress. Please wait for it to finish...

# Wait for config apply to finish

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-github-logs githublogs
Start github log migration to /data/multi-disk/githublogs...
Success:  moved to /data/multi-disk/githublogs
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...
Multi disk setup is enabled...
Potential disks are automatically mounted on startup...
# Disk check
Detected multi disk path at /data/multi-disk/db...
/data/multi-disk/db is set up correctly for multi disk use.
Detected multi disk path at /data/multi-disk/git...
/data/multi-disk/git is set up correctly for multi disk use.
Detected multi disk path at /data/multi-disk/githublogs...
/data/multi-disk/githublogs is set up correctly for multi disk use.
Detected multi disk path at /data/multi-disk/systemlogs...
/data/multi-disk/systemlogs is set up correctly for multi disk use.
# Service migration check
MySQL migration was detected...
/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.
GitHub current log migration was detected...
/data/github/current/log -> /data/multi-disk/githublogs/github-current-log is correctly symlinked.
GitHub shared log migration was detected...
/data/github/shared/log -> /data/multi-disk/githublogs/github-shared-log is correctly symlinked.
Logs migration was detected...
/var/log -> /data/multi-disk/systemlogs/log 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"
DISK_SYSTEMLOGS="lvm"
DISK_GITHUBLOGS="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"
# Multi-disk logs path is stored in /etc/multi-disk/ghe-multi-disk-logs-mount
GHCURRENT_LOG_MIGRATION_PATH="/data/multi-disk/githublogs/github-current-log"
GHSHARED_LOG_MIGRATION_PATH="/data/multi-disk/githublogs/github-shared-log"
ENABLE_MULTI_DISK_LOGS_MOUNT=true

LOGS_MIGRATION_PATH=/data/multi-disk/systemlogs/log

admin@ghe-test-primary:~$ ls /var/log/multi-disk/
ghe-storage-init-db.log   ghe-storage-init-git.log    ghe-storage-migrate-github-logs.log   ghe-storage-migrate-mysql.log   ghe-storage-init-githublogs.log   ghe-storage-init-systemlogs.log   ghe-storage-migrate-logs.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"
DISK_SYSTEMLOGS="lvm"
DISK_GITHUBLOGS="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"
# Multi-disk logs path is stored in /etc/multi-disk/ghe-multi-disk-logs-mount
GHCURRENT_LOG_MIGRATION_PATH="/data/multi-disk/githublogs/github-current-log"
GHSHARED_LOG_MIGRATION_PATH="/data/multi-disk/githublogs/github-shared-log"

$ cat /etc/multi-disk/ghe-multi-disk-logs-mount
ENABLE_MULTI_DISK_LOGS_MOUNT=true

LOGS_MIGRATION_PATH=/data/multi-disk/systemlogs/log

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

$ ls -l /var/log/multi-disk/
total 64
-rw-r--r-- 1 root root  2115 Feb 13 16:32 ghe-storage-init-db.log
-rw-r--r-- 1 root root  2478 Feb 13 16:36 ghe-storage-init-githublogs.log
-rw-r--r-- 1 root root  2114 Feb 13 16:36 ghe-storage-init-git.log
-rw-r--r-- 1 root root  2378 Feb 13 16:36 ghe-storage-init-systemlogs.log
-rw-r--r-- 1 root root 20450 Feb 13 17:27 ghe-storage-migrate-github-logs.log
-rw-r--r-- 1 root root  1053 Feb 13 17:15 ghe-storage-migrate-logs.log
-rw-r--r-- 1 root root  2460 Feb 13 16:38 ghe-storage-migrate-mysql.log
-rw-r--r-- 1 root root 19011 Feb 13 16:42 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을(를) 사용하여 생성된 모든 디스크 경로로 마이그레이션합니다.

  • ghe-storage-migrate-logs * /var/logghe-storage-multi-disk init을(를) 사용하여 생성된 모든 디스크 경로로 마이그레이션합니다.

  • ghe-storage-migrate-github-logs * /data/github/current/log/data/github/shared/logghe-storage-multi-disk init를 사용하여 만든 모든 디스크 경로로 마이그레이션합니다.