Skip to main content

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

追加のデータ ディスクを構成し、それらを使用して MySQL とリポジトリのデータをホストできます。

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

GitHub Enterprise Server

メモ

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

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

  • リソース分散の改善:
    • 異なるサービスには、固有のディスク要件があります。
    • MySQL は、主に待機時間と IOPS に依存します。
    • 一部のリソース (リポジトリなど) は、コストの高いブロック ストレージの恩恵を受けない場合があります。
  • 最大化された VM の制限:
    • 多くの場合、1 つのディスクでインスタンスの制限を最大限に引き出すことができません。
    • コストの観点からは、通常、最もコストの高いストレージまたは最速のストレージですべてを実行することは不可能または価値がありません。
  • リソースの割り当てとサービスの分離が明確になります。
    • リソースは、ターゲットを絞った方法で割り当てることができ、重要なサービスが不足するのを防ぐことができます。
  • 規模の調整:
    • スタンドアロン トポロジと高可用性トポロジの両方のお客様は、必要に応じてスケールアウトできます。

Constraints

  • マルチデータ ディスクは、スタンドアロンおよび高可用性 (HA) トポロジでのみサポートされます。
  • 1 つのデプロイで複数のデータ ディスクが構成されると、その展開に対してこの変更を元に戻すことはできません。
  • マルチデータ ディスクの設定とデータの移行には、通常、ある程度のダウンタイムが必要です。
    • これを最小限に抑えるには、マルチデータ ディスクを使用してレプリカを構成し、プライマリからデータをレプリケートしてから、レプリカにフェールオーバーします。
    • マルチデータ ディスクをプライマリに直接追加する場合は、はるかに長いダウンタイムが予想されます。
  • パブリック プレビュー期間中は、非運用環境でのみマルチデータ ディスクを使用する必要があります。
  • MySQL とリポジトリを同じディスクに移行することはお勧めしません。
  • 現時点では、MySQL とリポジトリのみを追加のディスクに移行できます。

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

現在のディスクよりも高速または高速なディスクを追加すると、パフォーマンスが向上します。 ストレージ デバイスは、通常、IOPS (1 秒あたりの入力/出力操作)、スループット、待機時間によって測定されます。 MySQL の場合は、既存のデータ ディスクよりも待機時間が短く、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
    
           `/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/mysqldu -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) に記載されているフェールオーバー シーケンスに従います。
    

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

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

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