Примечание.
Возможность настраивать и использовать несколько дисков данных находится в 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 и пропускной способностью, чем у вашего существующего диска данных, чтобы выполнять непрерывные операции записи из логирования.
В настройках с высокой доступностью лучше использовать мультиданные диски как на основной, так и на всех копиях. Конфигурации микширования, где основная имеет мультидата-диски, а реплика — нет, не рекомендуется.
Настройка нескольких дисков с данными и путей данных
Предпосылки
- Рекомендуем сделать недавнюю резервную копию данных перед началом работы.
- Создайте тестовую среду, чтобы попробовать эту функцию.
- Во время публичного предпросмотра мы рекомендуем использовать эту функцию только в тестовой среде.
- Когда функция становится общедоступной, мы рекомендуем протестировать её в непроизводственной среде перед использованием в производстве.
Инструкции
-
Вы можете провести чистую установку GHES или использовать существующий экземпляр GHES. Диск данных должен быть настроен на
/data/user. -
После
/data/userнастройки добавьте к экземпляру дополнительные устройства для хранения блоков.В настоящее время
ghe-storage-findвыбирает первое блочное хранилище для настройки/data/userна основе алфавитного порядка пути к блочному хранилищу. Это происходит при первой загрузке устройства GHES.Чтобы иметь больший контроль над использованием диска
/data/user, лучше завершить процесс инициализации с одним присоединённым диском изначально. -
Инициализируйте многодисковую установку с помощью новых устройств блочного хранения. Чтобы инициализировать поддержку мультидисков, запустите
ghe-storage-multi-disk init. При каждой перезагрузкеghe-multi-disk.serviceони автоматически перемонтируют существующие диски с данными на правильных путях.Shell /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
/usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 dbShell /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
/usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 gitShell /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme4n1 systemlogs
/usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme4n1 systemlogsShell /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme5n1 githublogs
/usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme5n1 githublogs
Обратите внимание, что /dev/nvme2n1, /dev/nvme3n1``/dev/nvme4n1, , и /dev/nvme5n1 являются только примерными путями. Они могут не совпадать с путями в вашей системе. Аналогично, db, git``systemlogs, и githublogs являются примерами. Вы можете выбрать разные имена.
-
Переключитесь в режим обслуживания.
Shell gh es maintenance set --enabled true
gh es maintenance set --enabled true -
Мигрируйте желаемые пути данных.
Для миграции MySQL:
Shell /usr/local/share/enterprise/ghe-storage-migrate-mysql db
/usr/local/share/enterprise/ghe-storage-migrate-mysql dbДля миграции репозиториев:
Shell /usr/local/share/enterprise/ghe-storage-migrate-repositories git
/usr/local/share/enterprise/ghe-storage-migrate-repositories gitДля миграции системных журналов:
Shell /usr/local/share/enterprise/ghe-storage-migrate-logs systemlogs
/usr/local/share/enterprise/ghe-storage-migrate-logs systemlogsПосле миграции системных логов перезагрузите экземпляр:
Shell sudo reboot
sudo rebootTo migrate GitHub logs:
Shell /usr/local/share/enterprise/ghe-storage-migrate-github-logs githublogs
/usr/local/share/enterprise/ghe-storage-migrate-github-logs githublogs -
Выход из режима технического обслуживания.
Shell gh es maintenance set --enabled false
gh es maintenance set --enabled false -
Протестируйте экземпляр в течение какого-то времени, чтобы убедиться, что всё работает как ожидается.
-
**Только после достаточного тестирования удаляют**`/data/user/mysql-backup` , `/data/user/repositories-backup`, `/var/log-backup`, `/data/github/current/log-backup`и `/data/github/shared/log-backup`.Хранение этих папок во время тестирования позволяет откатить их в экстренной ситуации. После достаточного тестирования следует удалить эти папки, чтобы освободить место.
Руководство для конфигураций с высокой доступностью
Следующие рекомендации помогают сократить простои в топологиях с высокой доступностью (HA). Если вы используете автономную топологию, у нас пока нет подобных дополнительных рекомендаций.
Для топологий HA лучший подход — создать новую реплику с несколькими настроенными дисками данных, воспроизвести данные из первичной и затем продвинуть реплику в основную. Перенос данных на дополнительные диски текущего основного не рекомендуется, так как этот процесс может привести к значительным простоям.
- Настройте новую реплику 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 на первичном для расчёта требований к месту на диске для новой реплики.
- Настройте мультидиск на новой реплике HA.
- Позвольте первичному HA реплицироваться в реплику.
- Следуйте последовательности резервирования, как описано в 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
statusinitinfomountstart-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помощью .
- Мигрирует