Skip to main content

Enterprise Server 3.20 は、現在リリース候補として使用できます。

複数のデータ ディスクの構成

追加のデータ ディスクを構成し、それらを使用してさまざまなサービスのデータをホストできます。

この機能を使用できるユーザーについて

GitHub Enterprise Server

メモ

複数のデータ ディスクを構成して使用する機能はパブリック プレビュー にあり、変更される可能性があります。 プレビューに関するフィードバックをお聞かせください。 顧客の成功チームと共有したり、 コミュニティディスカッションの投稿にコメントを残したりすることができます。 お客様のフィードバックをカスタマー サクセス チームと共有することをお勧めします。

GHES インスタンスに追加のディスクを導入する理由

  • リソース分散の改善:

    • 異なるサービスには、固有のディスク要件があります。
    • MySQL は、主に待機時間と IOPS に依存します。
    • 一部のリソース (リポジトリなど) は、コストの高いブロック ストレージの恩恵を受けない場合があります。
  • 最大化された VM の制限:

    • 多くの場合、1 つのディスクでインスタンスの制限を最大限に引き出すことができません。
    • コストの観点からは、通常、最もコストの高いストレージまたは最速のストレージですべてを実行することは不可能または価値がありません。
  • リソースの割り当てとサービスの分離が明確になります。

    • リソースは、ターゲットを絞った方法で割り当てることができ、重要なサービスが不足するのを防ぐことができます。
  • 規模の調整:

    • スタンドアロン トポロジと高可用性トポロジの両方のお客様は、必要に応じてスケールアウトできます。
  • 復元:

    • ログをルート ディスクから分離すると、ログのボリュームによってルート ディスクがあふれないようにすることで、回復性が向上します。

Constraints

  • マルチデータ ディスクは、スタンドアロンおよび高可用性 (HA) トポロジでのみサポートされます。

  • 1 つのデプロイで複数のデータ ディスクが構成されると、その展開に対してこの変更を元に戻すことはできません。

  • マルチデータ ディスクの設定とデータの移行には、通常、ある程度のダウンタイムが必要です。

    • これを最小限に抑えるには、マルチデータ ディスクを使用してレプリカを構成し、プライマリからデータをレプリケートしてから、レプリカにフェールオーバーします。
    • マルチデータ ディスクをプライマリに直接追加する場合は、はるかに長いダウンタイムが予想されます。
  • パブリック プレビュー期間中は、非運用環境でのみマルチデータ ディスクを使用する必要があります。

  • MySQL、リポジトリ、システム ログ、GitHub ログを同じディスクに移行することはお勧めしません。 追加の各ディスクには、移行を 1 つだけ含める必要があります。

  • 現時点では、MySQL、リポジトリ、システム ログ、および GitHub ログのみを追加のディスクに移行できます。

  • システム ログを移行した後、GitHub Enterprise Server ノードを再起動して、システム レベルで動作していることを確認する必要があります。 構成の適用はノードの起動時にも実行されるため、しばらく時間がかかります。

リソースのレコメンデーション

現在のディスクよりも高速または高速なディスクを追加すると、パフォーマンスが向上します。 ストレージ デバイスは、通常、IOPS (1 秒あたりの入力/出力操作)、スループット、待機時間によって測定されます。 MySQL の場合は、既存のデータ ディスクよりも待機時間が短く、IOPS が高いディスクを使用することをお勧めします。 リポジトリの場合は、現在のデータ ディスクよりも高い IOPS とスループットのディスクを選択します。ログの場合は、既存のデータ ディスクよりも高い IOPS とスループットのディスクを使用して、ログ アクティビティからの継続的な書き込み操作を処理することをお勧めします。

高可用性のセットアップでは、プライマリ レプリカとすべてのレプリカの両方でマルチデータ ディスクを使用することをお勧めします。 プライマリにマルチデータ ディスクがあるがレプリカが存在しない構成を混在することはお勧めしません。

複数のデータ ディスクとデータ パスを設定する

[前提条件]

  • 作業を開始する前に、データの最新のバックアップを作成することをお勧めします。
  • この機能を試すテスト環境を作成します。
    • パブリック プレビュー期間中は、テスト環境 でのみ この機能を使用することをお勧めします。
    • 機能が一般公開されたら、運用環境で使用する前に、非運用環境で機能をテストすることをお勧めします。

インストラクション

  1. GHES の新しいインストールを実行することも、既存の GHES インスタンスを使用することもできます。 /data/userでデータ ディスクが構成されている必要があります。

  2.        `/data/user`設定したら、ブロック ストレージ デバイスをインスタンスに追加します。
    

    現在、 ghe-storage-find は、ブロック ストレージ パスのアルファベット順に基づいて、 /data/user を設定するための最初のブロック ストレージを選択します。 これは、GHES アプライアンスの最初のブートで発生します。

           `/data/user`に使用するディスクをより詳細に制御するには、最初に接続されたディスクを 1 つだけ使用して初期化プロセスを完了することをお勧めします。
    
  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 はパスの例のみであることに注意してください。 システム上のパスと一致しない可能性があります。 同様に、 dbgitsystemlogsgithublogs も例です。 別の名前を選択することもできます。

  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
    

システム ログを移行するには:

``` shell copy
/usr/local/share/enterprise/ghe-storage-migrate-logs systemlogs
```

システム ログを移行した後、インスタンスを再起動します。

``` shell copy
sudo reboot
```

GitHub ログを移行するには:

``` shell copy
/usr/local/share/enterprise/ghe-storage-migrate-github-logs githublogs
```
  1. メンテナンス モードを終了します。

    Shell
    gh es maintenance set --enabled false
    
  2. インスタンスを一定期間テストして、すべてが期待どおりに動作することを確認します。

  3.        **十分なテスト後にのみ**、 `/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/mysqldu -sh /data/user/repositoriesdu -sh /var/logdu -sh /data/github/current/logdu -sh /data/github/shared/log を使用して、新しいレプリカのディスク領域の要件を計算します。

  2. 新しい HA レプリカにマルチディスクを設定します。

  3. HA プライマリがレプリカにレプリケートできるようにします。

  4.        [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/initiating-a-failover-to-your-replica-appliance) に記載されているフェールオーバー シーケンスに従います。
    

レプリケーション プロセスには時間がかかる場合があります。その利点は、バックグラウンドで実行されるため、メンテナンス モードからの実際の中断が大幅に減少することです。

例: 追加のディスクの構成

この例では、ディスクの初期化とデータ移行に必要なコマンドと出力を示します。 具体的には、 /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/repositoriesを、ghe-storage-multi-disk initを使用して作成されたすべてのディスク パスに移行します。

  • ghe-storage-migrate-mysql * /data/user/mysqlを、ghe-storage-multi-disk initを使用して作成されたすべてのディスク パスに移行します。

  • ghe-storage-migrate-logs * /var/logを、ghe-storage-multi-disk initを使用して作成されたすべてのディスク パスに移行します。

  • ghe-storage-migrate-github-logs * /data/github/current/log/data/github/shared/logを、ghe-storage-multi-disk initを使用して作成されたすべてのディスク パスに移行します。