Skip to main content

Настройка нескольких дисков с данными

Вы можете настроить дополнительные диски с данными и использовать их для хранения данных различных сервисов.

Кто может использовать эту функцию?

GitHub Enterprise Server

Примечание.

Возможность настраивать и использовать несколько дисков данных находится в public preview и может измениться. Мы будем рады услышать ваши отзывы о предварительном просмотре. Вы можете поделиться им со своей командой по работе с клиентами или оставить комментарий в сообщении в обсуждении сообщества. Наш лучший вариант — делиться отзывами с командой по работе с клиентами.

Зачем добавлять больше дисков в экземпляр GHES?

  • Улучшенное распределение ресурсов:

    • У разных сервисов есть уникальные требования к диску.
    • MySQL в основном зависит от задержки и IOPS.
    • Некоторые ресурсы (например, репозитории) не так сильно выигрывают от дорогого блочного хранилища.
  • Максимальные лимиты виртуальных машин:

    • Один диск часто не способен полностью реализовать ограничения экземпляра.
    • С точки зрения стоимости, обычно нецелесообразно и не стоит запускать всё на самом дорогом или быстром хранилище.
  • Более чёткое разделение распределения ресурсов и услуг:

    • Ресурсы можно распределять целенаправленно, чтобы предотвратить нехватку критически важных услуг.
  • Масштабирование:

    • Клиенты как на автономных, так и на высокодоступных топологиях могут масштабироваться по мере необходимости.
  • Устойчивость:

    • Изоляция журналов от корневой диска повышает устойчивость, предотвращая переполнение объёма журналов на корневой диск.

Constraints

  • Мультиданные поддерживаются только в топологиях Автономной и Высокой Доступности (HA).

  • После того как в развертывании настроено несколько дисков данных, это изменение нельзя отменить в данном развертывании.

  • Настройка мульти-дисков и миграция данных обычно требуют некоторого простоя.

    • Вы можете минимизировать это, настроив реплику с мульти-дата-дисками, реплицировав данные с первичного и затем переключившись на реплику.
    • Если вы добавляете мульти-дата-диски напрямую к основному, ожидайте гораздо более длительного простоя.
  • Во время публичного предварительного просмотра мультиданные диски следует использовать только в непроизводственных средах.

  • Не рекомендуется мигрировать MySQL, репозитории, системные логи или логи GitHub на один и тот же диск. Каждый дополнительный диск должен содержать только одну миграцию.

  • В настоящее время можно перенести на дополнительные диски только MySQL, репозитории, системные логи и GitHub.

  • После миграции системных журналов требуется перезагрузка узла GitHub Enterprise Server, чтобы убедиться, что он работает на уровне системы. Это займёт некоторое время, так как Config Apply также запускается во время запуска узла.

Рекомендации по ресурсам

Если добавить диски, которые работают так же быстро или быстрее, чем текущие, производительность должна улучшиться. Устройства хранения обычно измеряются по IOPS (Input/Output Operations Per Second), пропускной способности и задержке. Для 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``systemlogs, и githublogs являются примерами. Вы можете выбрать разные имена.

  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
    

    To migrate GitHub logs:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-github-logs githublogs
    
  3. Выход из режима технического обслуживания.

    Shell
    gh es maintenance set --enabled false
    
  4. Протестируйте экземпляр в течение какого-то времени, чтобы убедиться, что всё работает как ожидается.

  5.        **Только после достаточного тестирования удаляют**`/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.

Хотя процесс репликации может занять много времени, преимущество в том, что он работает в фоновом режиме, поэтому фактические сбои из-за режима обслуживания значительно уменьшаются.

Пример: настройка дополнительных дисков

Этот пример демонстрирует необходимые команды и выходы для инициализации диска и миграции данных. В частности, /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помощью .