Skip to main content

配置存储库缓存

你可以通过创建新实例、将存储库缓存连接到主实例,以及配置存储库网络到存储库缓存的副本来配置 GitHub Enterprise Server 的存储库缓存。

关于存储库缓存的配置

可以通过创建名为“存储库缓存”的特殊类型的副本来配置存储库缓存。 然后,您可以设置数据位置策略来控制将哪些存储库网络复制到存储库缓存。

群集不支持存储库缓存。

存储库缓存的 DNS

主实例和存储库缓存应具有不同的 DNS 名称。 例如,如果主实例位于 github.example.com,则可以决定将缓存命名为 europe-ci.github.example.comgithub.asia.example.com

要让 CI 计算机从存储库缓存,而不是主实例中进行提取,可以使用 Git 的 url.<base>.insteadOf 配置设置。 有关详细信息,请参阅 Git 文档中的“git-config”。

例如,CI 计算机的全局 .gitconfig 包含这些行。

[url "https://europe-ci.github.example.com/"]
    insteadOf = https://github.example.com/

然后,当被告知提取 https://github.example.com/myorg/myrepo 时,Git 会改从 https://europe-ci.github.example.com/myorg/myrepo 中提取。

配置存储库缓存

  1. 在所需的平台上设置新的 GitHub Enterprise Server 实例。 此实例将是你的存储库缓存。 有关详细信息,请参阅“设置 GitHub Enterprise Server 实例”。

  2. 设置与主设备密码匹配的管理员密码,然后继续。

  3. 单击创建副本节点

  4. 在“Add new SSH key”下,输入 SSH 密钥。

  5. 单击“添加密钥”。

  6. 使用 SSH 连接到存储库缓存的 IP 地址。

    ssh -p 122 admin@REPLICA-IP
    
  7. 要为副本生成密钥对,请使用包含主设备 IP 地址的 ghe-repl-setup 命令,并复制该命令返回的公钥。

    ghe-repl-setup PRIMARY_IP
    
  8. 若要将公钥添加到主设备上的授权密钥列表中,请浏览到 https://PRIMARY-HOSTNAME/setup/settings 并将从副本复制的密钥添加到列表中。

  9. 要验证与主实例的连接并为存储库缓存启用副本模式,请再次运行 ghe-repl-setup

    • 如果存储库缓存是唯一的附加节点,则不需要参数。

      ghe-repl-setup PRIMARY-IP
      
    • 如果要配置除一个或多个现有副本之外的存储库缓存,请使用 -a--add 参数。

      ghe-repl-setup -a PRIMARY-IP
      
  10. 若要配置存储库缓存,请使用 ghe-repl-node 命令并包含必要的参数。

    • 为存储库缓存设置一个 cache-location,将 CACHE-LOCATION 替换为字母数字标识符,例如部署缓存的区域。 CACHE-LOCATION 值不能是保留用于子域隔离的任何子域,例如 assetsmedia。 有关已保留名称的列表,请参阅“启用子域隔离”。

    • 为存储库缓存设置 cache-domain,同时将 EXTERNAL-CACHE-DOMAIN 替换为客户端将用于访问存储库缓存的主机名 Git。 如果没有指定 cache-domain,GitHub Enterprise Server 会将 CACHE-LOCATION 值作为子域追加到为实例配置的主机名前面。 有关详细信息,请参阅“为实例配置主机名”。

    • 如果尚未设置,请在主设备和任何副本设备上设置数据中心名称,并将 DC-NAME 替换为数据中心名称。

      ghe-repl-node --datacenter DC-NAME
      
    • 新缓存将尝试从同一数据中心的另一个缓存中播种。 为存储库缓存设置 datacenter,将 REPLICA-DC-NAME 替换为要部署节点的数据中心的名称。

    ghe-repl-node --cache CACHE-LOCATION --cache-domain EXTERNAL-CACHE-DOMAIN --datacenter REPLICA-DC-NAME
    
  11. 要开始复制数据存储,请使用 ghe-repl-start 命令。

    ghe-repl-start
    

    Warning

    ghe-repl-start 会导致主服务器短暂中断,在此期间用户可能会看到内部服务器错误。 要提供更简便的消息,请先在主节点上运行 ghe-maintenance -s,然后再在副本节点上运行 ghe-repl-start,以将设备置于维护模式。 复制开始后,使用 ghe-maintenance -u 禁用维护模式。 当主节点处于维护模式时,Git 复制将无法进行。

  12. 要验证各个数据存储复制通道的状态,请使用 ghe-repl-status 命令。

    ghe-repl-status
    
  13. 要启用存储库网络到存储库缓存的复制,请设置数据位置策略。 有关详细信息,请参阅“数据位置策略”。

数据位置策略

可以通过用 spokesctl cache-policy 命令为存储库配置数据位置策略来控制数据局部性。 数据位置策略确定在哪些存储库缓存上复制哪些存储库网络。 默认情况下,在配置数据位置策略之前,不会在任何存储库缓存上复制任何存储库网络。

数据位置策略仅影响 Git 内容。 无论策略如何,数据库中的内容(如问题和拉取请求注释)都将复制到所有节点。

Note

数据位置策略与访问控制不同。 必须使用存储库角色来控制哪些用户可以访问存储库。 有关存储库角色的详细信息,请参阅“组织的存储库角色”。

可以配置一个策略来复制带有 --default 标志的所有网络。 例如,此命令将创建一个策略,以将每个存储库网络的单个副本复制到 cache_location 为“kansas”的存储库缓存集。

ghe-spokesctl cache-policy set --default 1 kansas

要为存储库网络配置复制,请指定作为网络根目录的存储库。 存储库网络包括一个存储库和存储库的所有分支。 如果不复制整个网络,则无法复制网络的一部分。

ghe-spokesctl cache-policy set <owner/repository> 1 kansas

您可以通过为网络指定副本计数为零来覆盖复制所有网络并排除特定网络的策略。 例如,此命令指定位置“kansas”中的任何存储库缓存都不能包含该网络的任何副本。

ghe-spokesctl cache-policy set <owner/repository> 0 kansas

不支持给定缓存位置中大于 1 的副本计数。