注意
配置和使用多个数据磁盘的功能位于 公共预览版 中,并可能会更改。 我们很乐意听取你关于预览版的反馈。 你可以与客户成功团队共享它,或在 社区讨论帖子中留下评论。 我们的首选选项是与客户成功团队共享你的反馈。
为什么向 GHES 实例引入更多磁盘?
-
改进了资源分布:
- 不同的服务具有独特的磁盘要求。
- MySQL 主要是延迟和 IOPS 敏感。
- 某些资源(如仓库)从昂贵的块存储中获益较少。
-
最大化的 VM 限制:
- 单个磁盘通常无法用尽实例的性能限制。
- 从成本的角度来看,在最昂贵或最快的存储上运行所有内容通常不可行或值得。
-
更清楚地区分资源分配和服务:
- 资源可以按目标方式分配,从而防止关键服务被饿死。
-
伸缩:
- 在独立拓扑和高可用性拓扑上,用户可以根据需要进行横向扩展。
-
弹性:
- 通过将日志与根磁盘隔离,防止大量日志泛滥至根磁盘,从而增强系统的复原能力。
限制条件
-
多数据磁盘仅在独立和高可用性(HA)拓扑上受支持。
-
在部署中配置多个数据磁盘后,该部署无法撤消此更改。
-
设置多数据磁盘和迁移数据通常需要一些停机时间。
- 你可以通过配置带有多个数据磁盘的副本、从主副本复制数据,然后故障转移到该副本来最大限度地减少这种情况。
- 如果要将多数据磁盘直接添加到主数据库,则预计停机时间要长得多。
-
在公共预览版期间,多数据磁盘应仅在非生产环境中使用。
-
不建议将 MySQL、存储库、系统日志或 GitHub 日志迁移到同一磁盘。 每个附加磁盘应仅包含一个迁移。
-
目前,只能将 MySQL、存储库、系统日志和 GitHub 日志迁移到其他磁盘。
-
将系统日志迁移后,需要重启 GitHub Enterprise Server 节点,以确保在系统级别正常工作。 这需要一些时间,因为配置应用也会在节点启动期间运行。
资源建议
如果您添加的磁盘速度与当前磁盘一样快或更快,应该会看到性能改进。 存储设备通常按 IOPS(每秒输入/输出作)、吞吐量和延迟来度量。 对于 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 reboot若要迁移 GitHub 日志,
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 主节点复制到副本。
- 请按照 发起到副本设备的故障转移 中记录的步骤执行故障转移顺序。
虽然复制过程可能需要很长时间,但优点是它在后台运行,因此维护模式的实际中断会大幅减少。
示例:配置其他磁盘
此示例演示了磁盘初始化和数据迁移所需的命令和输出。 具体而言,/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
statusinitinfomount-
`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创建的任何磁盘路径。